データベースがOracleであり、SQLを使用しているバージョンを確認するにはどうすればよいですか?


165

アプリケーションのインストーラーをビルドしています。ユーザーは、設定したデータソースを選択し、それがどのタイプのデータベースであるかを指定します。SQLステートメントをデータソースに送信して、データベースの種類が本当にOracleであり、可能であれば、実行しているOracleのバージョンを確認したいと思います。


あなたのプログラミング言語はどうですか?この種の質問は、DBアクセスの言語APIに本当に依存します。
ギズモ

JDBCデータソースがあると思います。接続が失敗した場合、またはsqlステートメントが生成されてエラーが発生した場合は、それを確実にトラップして適切に処理できます。
modius 2008

回答:


286

このSQLを実行します。

select * from v$version;

そして、あなたは次のような結果を得るでしょう:

BANNER
----------------------------------------------------------------
Oracle Database 10g Release 10.2.0.3.0 - 64bit Production
PL/SQL Release 10.2.0.3.0 - Production
CORE    10.2.0.3.0      Production
TNS for Solaris: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production

2
私がこれまでに使用したすべてのバージョンのOracle。Oracle 5.0以前は話せません!
トニーアンドリュース

1
このテクニックはOracle 11.2.0.2.0では失敗しましたが、ログイン権限の問題がいくつかあります。しかし、私と同じボートにあるかもしれないものについて、ローレンスことで、このページに記載第2の技術は、仕事をした:PRODUCT_COMPONENT_VERSIONから選択*
ユーザ:sugardaddy

1
v $ viewsへの権限がない場合は機能しません。ローレンスの答えにはそれに対する答えがあります
JumpingJezza

@TonyAndrews:select * from v $ versionの場合の出力はどのようなものですか。失敗?
Atmesh Mishra 2016

@AtmeshMishra:わからない-多分ORA-00942: table or view does not exist?何を手に入れますか?
トニーアンドリュース

46

2つの方法:

select * from v$version;

あなたに与えるでしょう:

Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
PL/SQL Release 11.1.0.6.0 - Production
CORE 11.1.0.6.0 Production
TNS for Solaris: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production

または、Oracleデータベースソフトウェアリリースの識別

select * from product_component_version;

あなたに与えるでしょう:

PRODUCT VERSION STATUS
NLSRTL  11.1.0.6.0  Production
Oracle Database 11g Enterprise Edition  11.1.0.6.0  64bit Production
PL/SQL  11.1.0.6.0  Production
TNS for Solaris:    11.1.0.6.0  Production

すばらしい...
v_

この2番目のクエリは、アドホック解析に依存するのではなく、データ形式を定義する必要があるため、自動チェックにはるかに適しています。投稿ありがとうございます!
jpaugh 2016

29
SQL> SELECT version FROM v$instance;
VERSION
-----------------
11.2.0.3.0

1
バージョン番号のみを提供するため、最適な回答です。自動化されたスクリプトでバージョンを抽出するために出力を解析する必要はありません。
疑似コード

@omeinushは完全に動作します(11.2.0.3)。
collapsar 2016年

@tjatiバージョンではなく、ユーザー権限に依存しているようです。V$INSTANCEデフォルトでは、明らかにグローバルに利用できません。
jpmc26 2018

7

あなたはどちらかを使うことができます

SELECT * FROM v$version;

または

SET SERVEROUTPUT ON
EXEC dbms_output.put_line( dbms_db_version.version );

v $ versionの出力を解析したくない場合。


3

インスタンスがダウンしている場合は、alert.logでバージョン情報を探します

または別の粗雑な方法は、Oracleバイナリを調べることです。DBがLinuxでホストされている場合は、Oracleバイナリで文字列を試してください。

strings -a $ORACLE_HOME/bin/oracle |grep RDBMS | grep RELEASE

1

Oracleの場合:

Select * from v$version;

SQLサーバーの場合:

Select @@VERSION as Version

MySQLを使用する場合:

Show variables LIKE "%version%";

0

次のSQLステートメント:

select edition,version from v$instance

戻り値:

  • データベース版など。「XE」
  • データベースのバージョン。「12.1.0.2.0」

(v $ instanceビューでの特権の選択はもちろん必要です)


0

以下のメソッドを使用して、Oracleのバージョン番号を取得できます。

方法番号:1

set serveroutput on;
BEGIN 
DBMS_OUTPUT.PUT_LINE(DBMS_DB_VERSION.VERSION || '.' || DBMS_DB_VERSION.RELEASE); 
END;

方法番号:2

SQL> select *
  2  from v$version;

-2

簡単な関数は次のとおりです。

CREATE FUNCTION fn_which_edition
        RETURN VARCHAR2
    IS

    /*

        Purpose: determine which database edition

        MODIFICATION HISTORY
        Person      Date        Comments
        ---------   ------      -------------------------------------------
        dcox        6/6/2013    Initial Build

    */

    -- Banner
    CURSOR c_get_banner
    IS
        SELECT banner
          FROM v$version
         WHERE UPPER(banner) LIKE UPPER('Oracle Database%');

    vrec_banner c_get_banner%ROWTYPE; -- row record
    v_database VARCHAR2(32767); --

BEGIN
    -- Get banner to get edition
    OPEN c_get_banner;
    FETCH c_get_banner INTO vrec_banner;
    CLOSE c_get_banner;

    -- Check for Database type
    IF INSTR( UPPER(vrec_banner.banner), 'EXPRESS') > 0
    THEN
        v_database := 'EXPRESS';
    ELSIF INSTR( UPPER(vrec_banner.banner), 'STANDARD') > 0
    THEN
        v_database := 'STANDARD';
    ELSIF INSTR( UPPER(vrec_banner.banner), 'PERSONAL') > 0
    THEN
        v_database := 'PERSONAL';
    ELSIF INSTR( UPPER(vrec_banner.banner), 'ENTERPRISE') > 0
    THEN
        v_database := 'ENTERPRISE';
    ELSE
        v_database := 'UNKNOWN';
    END IF;

    RETURN v_database;
EXCEPTION
    WHEN OTHERS
    THEN
        RETURN 'ERROR:' || SQLERRM(SQLCODE);
END fn_which_edition; -- function fn_which_edition
/

できました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.