Controllo del sid di Oracle e del nome del database


115

Voglio controllare il SID e il nome del database corrente.

Sto usando la seguente query per controllare Oracle SID

select instance from v$thread;

ma la tabella o la vista non esiste l'errore sta arrivando.

Sto usando la seguente query per controllare il nome del database corrente

select name from v$database;

ma la tabella o la vista non esiste l'errore sta arrivando.

Qualche idea per questi due problemi?

Risposte:


148

Presumo SELECT user FROM dual;dovrebbe darti l'utente corrente

e SELECT sys_context('userenv','instance_name') FROM dual;il nome dell'istanza

Credo che tu possa ottenere SID come SELECT sys_context('USERENV', 'SID') FROM DUAL;


1
Grazie per la risposta rapida. L'istanza e l'oracolo SID sono la stessa cosa?
Adnan

2
@Adnan Non è necessario che siano uguali poiché potrebbero esserci più istanze del DB in esecuzione su una singola macchina, vengono identificate da SID
V4Vendetta

@adnan Hai ottenuto i valori di cui avevi bisogno?
V4Vendetta

8
select sys_context('userenv','db_name') from dual;per nome database e sid ho già aggiunto nella risposta. spero che questo ti dia quello che vuoi
V4Vendetta

2
Si prega di controllare questo link
V4Vendetta

57

Se, come me, il tuo obiettivo è ottenere l'host del database e il SID per generare un URL JDBC Oracle, come

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

i seguenti comandi aiuteranno:

Comando query Oracle per controllare il SID (o il nome dell'istanza):

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

Comando query Oracle per controllare il nome del database (o l'host del server):

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

Att. Sergio Marcelo


Perfetto. Questo è esattamente quello che volevo sapere, ma non sapevo come esprimerlo.
Addison

Anch'io. Grazie Sergio!
alghe il

48

Solo per completezza, puoi anche utilizzare ORA_DATABASE_NAME.

Potrebbe valere la pena notare che non tutti i metodi ti danno lo stesso risultato:

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

Non sono necessarie autorizzazioni speciali per le query precedenti. Verificato creando un nuovo utente solo con privilegi CONNECT.
presumibilmente il

22

Le visualizzazioni V $ sono principalmente visualizzazioni dinamiche delle metriche di sistema. Vengono utilizzati per l'ottimizzazione delle prestazioni, il monitoraggio della sessione, ecc. Pertanto l'accesso è limitato agli utenti DBA per impostazione predefinita, motivo per cui stai ricevendo ORA-00942.

Il modo più semplice per trovare il nome del database è:

select * from global_name;

Questa visualizzazione è concessa a PUBLIC, quindi chiunque può interrogarla.


Che mi dici di Oracle SID? Esiste un metodo per verificarlo dall'account scott?
Adnan

1
Questo è il nome del servizio, non il SID.
jpmc26

5

Digita sul sqlplusprompt dei comandi

SQL> select * from global_name;

quindi vedrai il risultato sul prompt dei comandi

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

Qui il primo "ORCL" è il nome del database, potrebbe essere il tuo sistema "XE" e altro ciò che è stato dato durante il download di Oracle.


Grazie, mi hai reso la giornata.
Muhammad Ashikuzzaman

2

Come è stato accennato in precedenza,

select global_name from global_name;

è la strada da percorrere.

Non è stato possibile interrogare v $ database / v $ istanza / v $ thread perché l'utente non dispone delle autorizzazioni richieste. Puoi concederli (tramite un account DBA) con:

grant select on v$database to <username here>;
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.