¿Cómo puedo confirmar que una base de datos es Oracle y qué versión está usando SQL?

165

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

modius
fuente
¿Qué hay de tu lenguaje de programación? Este tipo de pregunta realmente depende del lenguaje API para el acceso a la base de datos.
gizmo
Puedo suponer que tengo una fuente de datos JDBC. Si la conexión falla, o la instrucción sql genera un error, entonces ciertamente puedo atrapar eso y tratarlo en consecuencia.
modius

Respuestas:

286

Ejecute este SQL:

select * from v$version;

Y obtendrás 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
Tony Andrews
fuente
2
Todas las versiones de Oracle que he usado. ¡No puedo hablar por Oracle 5.0 y antes!
Tony Andrews
1
Esta técnica me falló en Oracle 11.2.0.2.0, pero tengo algunos problemas de permiso de inicio de sesión. Sin embargo, para aquellos que podrían estar en el mismo bote que yo, la segunda técnica mencionada en esta página por Lawrence funcionó: seleccione * de product_component_version
sugardaddy
1
No funciona si no tiene permiso para v $ views. La respuesta de Lawrence tiene una respuesta para eso
JumpingJezza
@TonyAndrews: ¿Cómo es la salida cuando se selecciona * de la versión v $; falla?
Atmesh Mishra
@ AtmeshMishra: No estoy seguro, ORA-00942: table or view does not exist¿ tal vez ? ¿Qué sacas?
Tony Andrews
46

Dos métodos:

select * from v$version;

Te regalaré:

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 identificando su versión de software de base de datos Oracle :

select * from product_component_version;

Te regalaré:

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
fuente
genial ... necesitaba product_component_version ... ya que no tenía acceso a v $ views
ShoeLace
Esa segunda consulta es mucho más adecuada para la verificación automática, ya que requiere definir un formato de datos, en lugar de depender de un análisis ad-hoc. ¡Gracias por publicar!
jpaugh
29
SQL> SELECT version FROM v$instance;
VERSION
-----------------
11.2.0.3.0
Ugur
fuente
1
La mejor respuesta ya que solo da el número de versión, por lo tanto, no es necesario analizar el resultado para extraer la versión en un script automatizado.
pseudocódigo
@omeinush funciona perfectamente conmigo (11.2.0.3).
collapsar
@tjati Parece depender no de la versión, sino de los permisos del usuario. V$INSTANCEaparentemente no está disponible globalmente por defecto.
jpmc26
7

Puedes usar

SELECT * FROM v$version;

o

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

si no desea analizar la salida de v $ version.

Peter Lang
fuente
3

Si su instancia está inactiva, busque información de versión en alert.log

O otra forma cruda es buscar en el binario de Oracle, si DB está alojado en Linux, pruebe las cadenas en el binario de Oracle.

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

Para uso de Oracle:

Select * from v$version;

Para uso del servidor SQL:

Select @@VERSION as Version

y para uso MySQL:

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

La siguiente instrucción SQL:

select edition,version from v$instance

devoluciones:

  • edición de base de datos, por ejemplo. "XE"
  • versión de la base de datos, por ejemplo. "12.1.0.2.0"

(por supuesto, es necesario seleccionar el privilegio en la vista v $ instancia)

Pancho
fuente
0

Podemos usar los siguientes métodos para obtener la versión Número de Oracle.

Método No: 1

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

Método No: 2

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

Aquí hay 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
/

Hecho.

usuario2460369
fuente