Überprüfen der Oracle-Sid und des Datenbanknamens


115

Ich möchte die SID und den aktuellen Datenbanknamen überprüfen.

Ich verwende die folgende Abfrage zum Überprüfen der Oracle-SID

select instance from v$thread;

aber Tabelle oder Ansicht existiert nicht Fehler kommt.

Ich verwende die folgende Abfrage zum Überprüfen des aktuellen Datenbanknamens

select name from v$database;

aber Tabelle oder Ansicht existiert nicht Fehler kommt.

Irgendeine Idee für die oben genannten zwei Probleme?

Antworten:


148

Ich nehme an, SELECT user FROM dual;sollte Ihnen den aktuellen Benutzer geben

und SELECT sys_context('userenv','instance_name') FROM dual;den Namen der Instanz

Ich glaube, Sie können SID als bekommen SELECT sys_context('USERENV', 'SID') FROM DUAL;


1
Vielen Dank für die schnelle Antwort. Sind Instanz und Oracle SID dasselbe?
Adnan

2
@Adnan Sie müssen nicht gleich sein, da möglicherweise mehrere Instanzen der Datenbank auf einem einzelnen Computer ausgeführt werden. Sie werden durch SID
V4Vendetta am

@adnan Hast du die Werte bekommen, die du brauchst?
V4Vendetta

8
select sys_context('userenv','db_name') from dual;für Datenbankname und Sid habe ich bereits in der Antwort hinzugefügt.
Ich

2
Bitte überprüfen Sie diesen Link
V4Vendetta

57

Wenn Ihr Ziel wie ich darin besteht, den Datenbankhost und die SID dazu zu bringen, eine Oracle JDBC-URL zu generieren, z

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

Die folgenden Befehle helfen:

Oracle-Abfragebefehl zum Überprüfen der SID (oder des Instanznamens):

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

Oracle-Abfragebefehl zum Überprüfen des Datenbanknamens (oder des Serverhosts):

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

Att. Sergio Marcelo


Perfekt. Genau das wollte ich wissen, wusste aber nicht, wie ich es ausdrücken sollte.
Addison

Ich auch. Danke Sergio!
Horseatingweeds

48

Der Vollständigkeit halber können Sie auch ORA_DATABASE_NAME verwenden.

Es ist möglicherweise erwähnenswert, dass nicht alle Methoden dieselbe Ausgabe liefern:

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

Für die obigen Abfragen sind keine besonderen Berechtigungen erforderlich. Wird überprüft, indem nur ein neuer Benutzer mit der Berechtigung CONNECT erstellt wird.
Bdeem

22

Die V $ -Ansichten sind hauptsächlich dynamische Ansichten von Systemmetriken. Sie werden zur Leistungsoptimierung, Sitzungsüberwachung usw. verwendet. Der Zugriff ist daher standardmäßig auf DBA-Benutzer beschränkt, weshalb Sie diese erhalten ORA-00942.

Der einfachste Weg, den Datenbanknamen zu finden, ist:

select * from global_name;

Diese Ansicht wird PUBLIC gewährt, sodass jeder sie abfragen kann.


Was ist mit Orakel SID? Gibt es eine Methode, um es von einem Scott-Konto aus zu überprüfen?
Adnan

1
Das ist der Dienstname, nicht die SID.
jpmc26

5

Geben Sie an der sqlplusEingabeaufforderung ein

SQL> select * from global_name;

Dann wird das Ergebnis an der Eingabeaufforderung angezeigt

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

Hier ist zuerst ein "ORCL" der Datenbankname, möglicherweise Ihr System "XE" und andere, die zum Zeitpunkt des Herunterladens von Oracle angegeben wurden.


Danke, du hast meinen Tag gemacht.
Muhammad Ashikuzzaman

2

Wie oben erwähnt wurde,

select global_name from global_name;

ist der Weg zu gehen.

Sie konnten v $ database / v $ instance / v $ thread nicht abfragen, da Ihr Benutzer nicht über die erforderlichen Berechtigungen verfügt. Sie können sie (über ein DBA-Konto) gewähren mit:

grant select on v$database to <username here>;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.