Come posso confermare che un database è Oracle e quale versione utilizza SQL?


165

Sto creando un programma di installazione per un'applicazione. L'utente può selezionare un'origine dati che ha configurato e nominare quale tipo di database è. Voglio confermare che il tipo di database è effettivamente Oracle e, se possibile, quale versione di Oracle stanno eseguendo inviando un'istruzione SQL all'origine dati.


E il tuo linguaggio di programmazione? Questo tipo di domanda dipende davvero dall'API della lingua per l'accesso al DB.
gizmo,

Posso presumere di avere un'origine dati JDBC. Se la connessione fallisce, o se viene generata l'istruzione sql ed errore, allora posso sicuramente intrappolarla e trattarla di conseguenza.
modius,

Risposte:


286

Esegui questo SQL:

select * from v$version;

E otterrai un risultato come:

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
Tutte le versioni di Oracle che abbia mai usato. Non posso parlare per Oracle 5.0 e prima!
Tony Andrews,

1
Questa tecnica non è riuscita per me su Oracle 11.2.0.2.0, ma sto riscontrando alcuni problemi con le autorizzazioni di accesso. Tuttavia, per quelli che potrebbero trovarsi nella mia stessa barca, la seconda tecnica menzionata in questa pagina da Lawrence ha funzionato: selezionare * da product_component_version
sugardaddy il

1
Non funziona se non si dispone dell'autorizzazione per v $ views. La risposta di Lawrence ha una risposta per questo
JumpingJezza

@TonyAndrews: com'è l'output quando seleziona * dalla versione $ v; non riesce?
Atmesh Mishra,

@AtmeshMishra: Non sono sicuro - forse ORA-00942: table or view does not exist? Che cosa ottieni?
Tony Andrews,

46

Due metodi:

select * from v$version;

ti darà:

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

O identificare la versione del software del database Oracle in uso :

select * from product_component_version;

ti darà:

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

fantastico ... avevo bisogno di product_component_version .. dato che non avevo accesso a v $ views
ShoeLace

Quella seconda query è molto più adatta per il controllo automatico, in quanto richiede di definire un formato di dati, piuttosto che fare affidamento sull'analisi ad hoc. Grazie per la pubblicazione!
jpaugh,

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

1
La migliore risposta poiché fornisce solo il numero di versione, quindi non è necessario analizzare l'output per estrarre la versione in uno script automatizzato.
pseudocodice

@omeinush Funziona perfettamente con me (11.2.0.3).
collapsar

@tjati Sembra non dipendere dalla versione, ma dalle autorizzazioni dell'utente. V$INSTANCEapparentemente non è disponibile a livello globale per impostazione predefinita.
jpmc26,

7

Puoi usare entrambi

SELECT * FROM v$version;

o

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

se non si desidera analizzare l'output della versione $ v.


3

Se l'istanza non è attiva, si cercano le informazioni sulla versione in alert.log

Oppure un altro modo rozzo è quello di esaminare il binario Oracle, se DB è ospitato su Linux, provare le stringhe sul binario Oracle.

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

1

Per Oracle utilizzare:

Select * from v$version;

Per server SQL utilizzare:

Select @@VERSION as Version

e per l'uso di MySQL:

Show variables LIKE "%version%";

0

La seguente istruzione SQL:

select edition,version from v$instance

ritorna:

  • edizione del database ad es. "XE"
  • versione del database ad es. "12.1.0.2.0"

(ovviamente è necessario selezionare il privilegio nella vista dell'istanza v $)


0

Possiamo usare i metodi seguenti per ottenere la versione Numero di Oracle.

Metodo n .: 1

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

Metodo n .: 2

SQL> select *
  2  from v$version;

-2

Ecco una semplice funzione:

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
/

Fatto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.