2008-09-19 9 views
142

Estoy construyendo un instalador para una aplicación. El usuario puede seleccionar una fuente de datos que haya configurado y nominar qué tipo de base de datos es. Quiero confirmar que el tipo de base de datos es de hecho Oracle y, de ser posible, qué versión de Oracle están ejecutando enviando una declaración SQL a la fuente de datos.¿Cómo puedo confirmar que una base de datos es Oracle y qué versión usa SQL?

+0

¿Qué pasa con su lenguaje de programación? Este tipo de pregunta realmente depende de la API de idioma para el acceso a la base de datos. – gizmo

+0

Supongo que tengo un origen de datos JDBC. Si la conexión falla, o la instrucción sql genera un error, entonces ciertamente puedo atraparlo y tratarlo como corresponda. – modius

Respuesta

247

Ejecutar este SQL:

select * from v$version; 

Y obtendrá un resultado como:

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 
+0

¿Funciona esto para todas las versiones de Oracle? – modius

+2

Todas las versiones de Oracle que he usado alguna vez. ¡No puedo hablar por Oracle 5.0 y antes! –

+1

Esta técnica me falló en Oracle 11.2.0.2.0, pero estoy teniendo algunos problemas de permisos de inicio de sesión. Sin embargo, para aquellos que pueden estar en el mismo barco que yo, la segunda técnica se menciona en esta página por Lawrence hizo el trabajo: seleccionar * de product_component_version – sugardaddy

7

Puede utilizar

SELECT * FROM v$version; 

o

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

si no desea analizar el resultado de v $ version.

40

dos métodos:

select * from v$version; 

os haré:

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 Identifying Your Oracle Database Software Release:

select * from product_component_version; 

os haré:

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 
+0

genial ... necesitaba product_component_version .. ya que no tuve acceso a v $ views – ShoeLace

+0

Esa segunda consulta es mucho más adecuada para la comprobación automática, ya que requiere definir un formato de datos, en lugar de depender del análisis ad-hoc. ¡Gracias por publicar! – jpaugh

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

La mejor respuesta, ya que solo proporciona el número de versión, por lo tanto, no es necesario analizar el resultado para extraer la versión en un script automatizado. – pseudocode

+0

No funciona con Oracle 11g. – tjati

+0

@omeinush Funciona perfectamente conmigo (11.2.0.3). – collapsar

1

Si tiene privilegios, se puede utilizar a continuación VIEW o V$VERSION:

SELECT VERSION FROM V$INSTANCE; 
+2

No soy el votante atrasado, pero veo una respuesta duplicada anterior arriba ... que puede ser la razón del voto abajo. –

-2

Aquí es una función simple:

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 
/

Done.

3

Si la instancia está abajo, usted es mirada de información de versión en alert.log

Otra forma cruda es mirar en Oracle binario, DB Si en alojado en Linux, trata de cuerdas de Oracle binario.

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

Para el uso de Oracle:

Select * from v$version; 

Para el uso del servidor SQL:

Select @@VERSION as Version 

y para MySQL uso:

Show variables LIKE "%version%"; 
Cuestiones relacionadas