So zeigen Sie Datenbanken in Oracle 11g mit SQL * Plus an


78

Mit Hilfe dieses Befehls show databases;kann ich Datenbanken in MySQL sehen .

Wie zeige ich die verfügbaren Datenbanken in Oracle an ?

Antworten:


58

Sie können sich eine MySQL- "Datenbank" als Schema / Benutzer in Oracle vorstellen. Wenn Sie über die Berechtigungen verfügen, können Sie die DBA_USERSAnsicht abfragen , um die Liste der Schemas anzuzeigen:

SELECT * FROM DBA_USERS;

21
Einige Oracle-Datenbanken haben viele Benutzer ohne Objekte. Für diese und Alternative ist SELECT DISTINCT OWNER FROM ALL_OBJECTS;
Gary Myers

1
+1 nette Alternative, beachten Sie nur, dass Sie, wenn Sie kein privilegierter Benutzer sind und diese Abfrage ausführen, nur die EIGENTÜMER sehen, für die Sie ein Privileg für mindestens eines ihrer Objekte haben.
dpbradley

5
Die Abfrage an DBA_USERS gibt ein "ORA-00942: Tabelle oder Ansicht existiert nicht", möglicherweise Berechtigungsproblem? Der im Kommentar "SELECT DISTINCT OWNER FROM ALL_OBJECTS;" arbeitet mit denselben Zugangsdaten. db 11g
a1an

2
SELECT * FROM DBA_USERS;
Felipe Augusto

92

SELECT NAME FROM v$database; Zeigt den Datenbanknamen in Oracle an


2
Ich denke, das war es, was die Frage stellte. Zumindest denke ich daran, wenn ich "Datenbank" höre ... im Gegensatz zu Schema (oder Benutzer).
Randy Stegbauer

2
Dies sollte die Antwort sein
Ameya Deshpande

Wenn Sie beispielsweise Oracle Database Express Edition ausführen, wird so etwas wie XEder eindeutige Name gedruckt , der Ihre Instanz / Datenbank eindeutig identifiziert (heißt er SID?). Auf der anderen Seite gibt der show databasesBefehl von MySQL aus , was MySQL als Datenbank bezeichnet, auch bekannt als Schema (ungefähr das, was Sie SELECT USERNAME FROM DBA_USERSin Oracle erhalten).
Álvaro González

28

Oracle verfügt nicht über ein einfaches Datenbankmodell wie MySQL oder MS SQL Server. Ich finde es am nächsten, die Tablespaces und die entsprechenden Benutzer darin abzufragen.

Zum Beispiel habe ich einen DEV_DB-Tabellenbereich mit allen meinen tatsächlichen 'Datenbanken' darin:

SQL> SELECT TABLESPACE_NAME FROM USER_TABLESPACES;

Ergebend:

SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
EXAMPLE
DEV_DB

Es ist auch möglich, die Benutzer in allen Tabellenbereichen abzufragen:

SQL> select USERNAME, DEFAULT_TABLESPACE from DBA_USERS;

Oder innerhalb eines bestimmten Tablespace (am Beispiel meines DEV_DB-Tablespace):

SQL> select USERNAME, DEFAULT_TABLESPACE from DBA_USERS where DEFAULT_TABLESPACE = 'DEV_DB';

ROLES DEV_DB
DATAWARE DEV_DB
DATAMART DEV_DB
STAGING DEV_DB

14

Vielleicht könnten Sie diese Ansicht verwenden, aber ich bin nicht sicher.

select * from v$database;

Aber ich denke, es werden nur Informationen über die aktuelle Datenbank angezeigt.

Andere Option, wenn die Datenbank unter Linux läuft ... wäre ungefähr so:

SQL>!grep SID $TNS_ADMIN/tnsnames.ora | grep -v PLSExtProc

Erste, die in 11g nicht funktioniert: "ORA-00942: Tabelle oder Ansicht existiert nicht"
a1an

2
Hi @ a1an. Ohne Zweifel existiert die v $ -Datenbank in 11g. Überprüfen Sie, ob Sie die Abfrage mit ausreichenden Rechten ausführen. Hier finden Sie die Dokumentation zur v $ -Datenbank für Oracle 11g. docs.oracle.com/cd/B28359_01/server.111/b28320/… Algo, hier haben Sie einen Beitrag mit einem Beispiel zur Verwendung der v% -Datenbank in oracle 11g. neeraj-dba.blogspot.com.es/2011/10/… Viel Glück!
Jonathan

2
Wahrscheinlich ist es ein Berechtigungsproblem, das ausgeführt wird, während sysdba funktioniert
a1an

Ok @ a1an, geben Sie einfach Berechtigungen für die Auswahl in dieser Ansicht. Gewähren Sie Ihrem Benutzer select on v_ $ database. BITTE BEACHTEN SIE den Unterstrich! v $ database ist ein Synonym und Sie können proviledgest für Synonyme nicht gewähren (dies kann zu einem ORA-02030-Fehler führen).
Jonathan

1

Ich bin mir nicht ganz sicher, aber normalerweise hat ein Server eine Datenbank (mit vielen Benutzern). Wenn Sie viele Datenbanken erstellen, bedeutet dies, dass Sie auch viele Instanzen, Listener usw. erstellen. So können Sie Ihre überprüfen LISTENER, um es zu identifizieren.

Bei meinen Tests habe ich 2 Datenbanken ( dbtestund dbtest_1) erstellt. Als ich meinen LISTENER-Status überprüfte, sah es so aus:

lsnrctl status

....

STATUS des HÖRERS

..... .....

(BESCHREIBUNG = (ADRESSE = (PROTOKOLL = TCP) (GASTGEBER = 10.10.20.20) (PORT = 1521)))

Leistungsübersicht ...

Der Dienst "dbtest" hat 1 Instanz (en).

Instanz "dbtest", Status READY, hat 1 Handler für diesen Service ...

Der Dienst "dbtest1XDB" hat 1 Instanz (en).

Die Instanz "dbtest1", Status READY, hat 1 Handler für diesen Dienst ...

Der Dienst "dbtest_1" hat 1 Instanz (en).

Die Instanz "dbtest1", Status READY, verfügt über 1 Handler für diesen Dienst ... Der Befehl wurde erfolgreich ausgeführt

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.