Wie kann ich bestätigen, dass eine Datenbank Oracle ist und welche Version SQL verwendet?

165

Ich erstelle ein Installationsprogramm für eine Anwendung. Der Benutzer kann eine von ihm konfigurierte Datenquelle auswählen und angeben, um welchen Datenbanktyp es sich handelt. Ich möchte bestätigen, dass der Datenbanktyp tatsächlich Oracle ist und wenn möglich, welche Version von Oracle sie ausführen, indem ich eine SQL-Anweisung an die Datenquelle sende.

modius
quelle
Was ist mit Ihrer Programmiersprache? Diese Art von Frage hängt wirklich von der Sprach-API für den DB-Zugriff ab.
Gizmo
Ich kann davon ausgehen, dass ich eine JDBC-Datenquelle habe. Wenn die Verbindung fehlschlägt oder die SQL-Anweisung einen Fehler generiert, kann ich das mit Sicherheit abfangen und entsprechend behandeln.
Modius

Antworten:

286

Führen Sie diese SQL aus:

select * from v$version;

Und Sie erhalten ein Ergebnis wie:

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
Tony Andrews
quelle
2
Alle Versionen von Oracle, die ich jemals verwendet habe. Ich kann nicht für Oracle 5.0 und früher sprechen!
Tony Andrews
1
Diese Technik ist unter Oracle 11.2.0.2.0 für mich fehlgeschlagen, aber ich habe einige Probleme mit den Anmeldeberechtigungen. Für diejenigen, die sich möglicherweise im selben Boot wie ich befinden, hat die zweite von Lawrence auf dieser Seite erwähnte Technik funktioniert: Wählen Sie * aus product_component_version
sugardaddy
1
Funktioniert nicht, wenn Sie keine Berechtigung für v $ -Ansichten haben. Lawrence Antwort hat eine Antwort darauf
JumpingJezza
@TonyAndrews: Wie sieht die Ausgabe aus, wenn Sie * aus der v $ -Version auswählen? scheitert?
Atmesh Mishra
@ AtmeshMishra: Ich bin nicht sicher - vielleicht ORA-00942: table or view does not exist? Was bekommst du?
Tony Andrews
46

Zwei Methoden:

select * from v$version;

werde dir geben:

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

ODER Identifizieren Ihrer Oracle Database Software-Version :

select * from product_component_version;

werde dir geben:

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
Lawrence
quelle
großartig ... ich brauchte product_component_version .. da ich keinen Zugriff auf v $ views hatte
ShoeLace
Diese zweite Abfrage eignet sich weitaus besser für die automatische Überprüfung, da ein Datenformat definiert werden muss, anstatt sich auf Ad-hoc-Analyse zu verlassen. Danke fürs Schreiben!
Jpaugh
29
SQL> SELECT version FROM v$instance;
VERSION
-----------------
11.2.0.3.0
Ugur
quelle
1
Beste Antwort, da nur die Versionsnummer angegeben wird und daher die Ausgabe nicht analysiert werden muss, um die Version in einem automatisierten Skript zu extrahieren.
Pseudocode
@omeinush Funktioniert perfekt mit mir (11.2.0.3).
Kollapsar
@tjati Es scheint nicht von der Version abhängig zu sein, sondern von den Benutzerberechtigungen. V$INSTANCEist anscheinend standardmäßig nicht global verfügbar.
jpmc26
7

Sie können entweder verwenden

SELECT * FROM v$version;

oder

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

Wenn Sie die Ausgabe der v $ -Version nicht analysieren möchten.

Peter Lang
quelle
3

Wenn Ihre Instanz nicht verfügbar ist, suchen Sie in alert.log nach Versionsinformationen

Oder eine andere grobe Methode besteht darin, sich mit Oracle-Binärdateien zu befassen. Wenn DB unter Linux gehostet wird, versuchen Sie es mit Zeichenfolgen auf Oracle-Binärdateien.

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

Für Oracle verwenden:

Select * from v$version;

Für SQL Server verwenden Sie:

Select @@VERSION as Version

und für MySQL verwenden:

Show variables LIKE "%version%";
Jack
quelle
0

Die folgende SQL-Anweisung:

select edition,version from v$instance

kehrt zurück:

  • Datenbankausgabe zB. "XE"
  • Datenbankversion zB. 12.1.0.2.0

(Wählen Sie die Berechtigung in der v $ -Instanzansicht aus. Dies ist natürlich erforderlich.)

Pancho
quelle
0

Wir können die folgenden Methoden verwenden, um die Versionsnummer von Oracle zu erhalten.

Methode Nr.: 1

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

Methode Nr.: 2

SQL> select *
  2  from v$version;
Lova Chittumuri
quelle
-2

Hier ist eine einfache Funktion:

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
/

Getan.

user2460369
quelle