Comprobando el sid de Oracle y el nombre de la base de datos

115

Quiero verificar el SID y el nombre de la base de datos actual.

Estoy usando la siguiente consulta para verificar el SID de Oracle

select instance from v$thread;

pero la tabla o la vista no existe se aproxima un error.

Estoy usando la siguiente consulta para verificar el nombre de la base de datos actual

select name from v$database;

pero la tabla o la vista no existe se aproxima un error.

¿Alguna idea de los dos problemas anteriores?

Adnan
fuente

Respuestas:

148

Supongo que SELECT user FROM dual;debería darte el usuario actual

y SELECT sys_context('userenv','instance_name') FROM dual;el nombre de la instancia

Creo que puede obtener SID como SELECT sys_context('USERENV', 'SID') FROM DUAL;

V4Vendetta
fuente
1
Gracias por una respuesta rápida. ¿Son la instancia y el SID de Oracle lo mismo?
Adnan
2
@Adnan No es necesario que sean iguales, ya que podría haber varias instancias de la base de datos ejecutándose en una sola máquina, son identificadas por SID
V4Vendetta
@adnan ¿Obtuviste los valores que necesitabas?
V4Vendetta
8
select sys_context('userenv','db_name') from dual;para el nombre de la base de datos y sid ya he agregado en la respuesta. Espero que esto te dé lo que quieres
V4Vendetta
2
Consulte este enlace
V4Vendetta
57

Si, como yo, su objetivo es obtener el host de la base de datos y el SID para generar una URL de Oracle JDBC, como

jdbc:oracle:thin:@<server_host>:1521:<instance_name>

los siguientes comandos ayudarán:

Comando de consulta de Oracle para verificar el SID (o el nombre de la instancia):

select sys_context('userenv','instance_name') from dual; 

Comando de consulta de Oracle para verificar el nombre de la base de datos (o host del servidor):

select sys_context('userenv', 'server_host') from dual;

Att. Sergio Marcelo

Sergio MC Figueiredo
fuente
Perfecto. Esto es exactamente lo que quería saber, pero no sabía cómo expresarlo.
Addison
Yo también. ¡Gracias Sergio!
Horseatingweeds
48

Solo para completar, también puede usar ORA_DATABASE_NAME.

Vale la pena señalar que no todos los métodos le brindan el mismo resultado:

SQL> select sys_context('userenv','db_name') from dual;

SYS_CONTEXT('USERENV','DB_NAME')
--------------------------------------------------------------------------------
orcl

SQL> select ora_database_name from dual;

ORA_DATABASE_NAME
--------------------------------------------------------------------------------
ORCL.XYZ.COM

SQL> select * from global_name;

GLOBAL_NAME
--------------------------------------------------------------------------------
ORCL.XYZ.COM
Patrick Marchand
fuente
No se necesitan permisos especiales para las consultas anteriores. Verificado mediante la creación de un nuevo usuario con privilegios de CONECTAR únicamente.
bdeem
22

Las vistas V $ son principalmente vistas dinámicas de métricas del sistema. Se utilizan para ajustar el rendimiento, supervisar la sesión, etc. Por lo tanto, el acceso está limitado a los usuarios de DBA de forma predeterminada, por lo que los está obteniendo ORA-00942.

La forma más sencilla de encontrar el nombre de la base de datos es:

select * from global_name;

Esta vista se otorga a PUBLIC, por lo que cualquiera puede consultarla.

APC
fuente
¿Qué pasa con Oracle SID? ¿Existe algún método para verificarlo desde la cuenta de Scott?
Adnan
1
Ese es el nombre del servicio, no el SID.
jpmc26
5

Escriba en el sqlplussímbolo del sistema

SQL> select * from global_name;

entonces verá el resultado en el símbolo del sistema

SQL ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM

Aquí primero un "ORCL" es el nombre de la base de datos, puede ser su sistema "XE" y otro lo que se dio en el tiempo de descarga de Oracle.

anant kumar
fuente
Gracias, has hecho mi dia.
Muhammad Ashikuzzaman
2

Como se ha mencionado anteriormente,

select global_name from global_name;

es el camino a seguir.

No puede consultar v $ database / v $ instance / v $ thread porque su usuario no tiene los permisos necesarios. Puede otorgarles (a través de una cuenta DBA) con:

grant select on v$database to <username here>;
Phil
fuente