Wie wird die Liste der Datenbanken in Oracle angezeigt?

33

Gibt es eine Entsprechung zur MySQL- SHOW DATABASESAnweisung?

Ist es möglich, Datenbanken in einem Cluster zu finden? dh Datenbanken im Netzwerk auf einem anderen System vorhanden?

Kann ich die in einer Oracle-Installation vorhandenen Dateien analysieren, um sie zu finden?

Wie würden Sie bei vollständigen Zugriffsberechtigungen für ein Oracle-System vorgehen, um alle vorhandenen Datenbanken aufzulisten?

Kshitiz Sharma
quelle
4
Beachten Sie auch, dass die Terminologie zwischen MySQL und Oracle Database nicht übereinstimmt. In Bezug auf die Architektur verfügt Oracle über table-> schema-> database und gleichzeitig auch table-> tablespace-> database. MySQL hat einfach Tabelle-> Datenbank. Vielleicht suchen Sie wirklich nach einer Oracle-Schemaliste (denken Sie an SQL-Namespaces für Tabellen) oder einer Oracle-Tablespace-Liste (denken Sie an Gruppen von Betriebssystemdateien für Tabellen).
Kubanczyk

Antworten:

22

Gibt es eine Entsprechung zur MySQL- SHOW DATABASESAnweisung?

Es gibt keine solche Sache. Sie können Listener auf einem Computer ( lsnrctl status) abfragen, um zu sehen, welche Dienste dort registriert sind, aber das ordnet Datenbank nicht eins zu eins zu (und es könnten mehrere Listener auf demselben Computer sein). Andernfalls stellen die häufig verwendeten Tools eine Verbindung zu einer Datenbankinstanz her, und eine Instanz gehört zu einer einzelnen Datenbank.

Wenn es sich um Oracle RAC-Cluster handelt, kennt jede Instanz ihre Peers (andere Instanzen, die dieselbe Datenbank bedienen), und Sie können die anderen Instanzen, die derzeit für diese Datenbank gestartet sind, in der gv$instanceAnsicht suchen .
Sie können das crsctlDienstprogramm auch verwenden , um die im Cluster registrierten Dienste (einschließlich Datenbanken) und deren Status aufzulisten.
Wenn Sie über die Cluster-Software eines anderen Anbieters sprechen, bin ich mir ziemlich sicher, dass alle diese Arten von Dienstprogrammen zur Ressourcenverwaltung abzufragen sind.

Wenn es sich nur um eine Reihe von Computern handelt, gibt es keine hundertprozentig zuverlässige Methode, um alle Datenbanken in einem Netzwerk aufzulisten.

Um aktive (dh gestartete) Datenbanken zu finden, suchen Sie *_pmon_*unter Unix nach Prozessen (es gibt einen pro Datenbankinstanz) und unter Windows nach Oracle-Diensten.

Informationen zum Auffinden von Installationen der Oracle-Datenbanksoftware finden Sie /etc/oratabunter Unix. Dies sollte alle ORACLE_HOMEinstallierten s enthalten . Sie können in jeder innerhalb derer suchen $ORACLE_HOME/dbsfür spfile<SID>.oraund / oder init<SID>.oraDateien - jeweils eine für jede Datenbank sein wird.

(Ich glaube, Sie können das Äquivalent der Informationen in oratabden folgenden Windows-Registrierungsschlüsseln finden HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE, aber ich kenne die Struktur nicht.)

Wenn Sie jetzt natürlich Ihre gesamte Datenbank bei einem OEM-Server (Enterprise Manager) registriert haben, als Sie diese installiert haben, finden Sie dort die vollständige Liste - aber ich denke, wenn Sie fragen, ob dies nicht der Fall ist.

Matte
quelle
12

Oracle hat keine Datenbanken, sondern Schemata, mit denen Sie sie auflisten können

SELECT USERNAME FROM ALL_USERS ORDER BY USERNAME; 

oder so ähnlich :

SELECT TABLESPACE_NAME FROM USER_TABLESPACES;
DevYudh
quelle
2
Tablespaces sind im Allgemeinen nicht mit Schemas verknüpft.
Mat
2
ALLE NUTZER? USER_TABLESPACES?
Kubanczyk
"Gibt es eine Entsprechung zur MySQL SHOW DATABASES-Anweisung?" Ich versuche, diese Frage zu beantworten. Sag nicht, dass du es nicht weißt
DevYudh
1
@ DevYudh: Ein Tablespace in Oracle ist etwas völlig anderes als eine "Datenbank" in MySQL. Die erste Abfrage ist richtig, die zweite Abfrage ist einfach falsch
a_horse_with_no_name
11

Einfach ausgedrückt gibt es keine direkte Analogie für MySQL-Datenbanken oder einen Cluster unter Oracle: Die engste Übereinstimmung ist ein Schema, aber das ist immer noch sehr unterschiedlich.

Dies wird sich anscheinend in 12c mit der Einführung von steckbaren Datenbanken ändern :

Das saubere Trennen der Datenbankvorgänge vom Benutzerinhalt ist eine wesentliche Veränderung gegenüber herkömmlichen Datenbankarchitekturen. Oracle 11g und alle seine Vorgänger konnten jeweils nur eine Datenbank ausführen, sagte Kyte. Wenn eine Organisation mehrere Datenbanken auf einem einzigen Server ausführen möchte, muss sie mehrere Instanzen von Oracle 11g ausführen, eine für jede Datenbank. Wie der Name schon sagt, können mit steckbaren Datenbanken mehrere Mandantendatenbanken unter einer Kopie von Oracle 12c ausgeführt werden.

Jack Douglas
quelle
Äh toll, mehr Komplikation, mehr Arbeitsplatzsicherheit ...
Kubanczyk
6

Ich denke, eine Antwort für zukünftige Browser auf * nix könnte sein:

Katze / etc / oratab

rlblyler
quelle
3

Stellen Sie einfach eine Verbindung zu ASM her und überprüfen Sie den Datenbank-Client.

set pages 999 lines 120
col SOFTWARE_VERSION for A15
col INSTANCE_NAME for A20
col DB_NAME for A20 trunc
select INSTANCE_NAME, DB_NAME, STATUS, SOFTWARE_VERSION as "version"
from  V$ASM_CLIENT;
t.menard
quelle
1
Dies setzt voraus, dass ASM verwendet wird! Was ist mit Datenbanken, die in einem Dateisystem oder SAN gespeichert sind?
Colin 't Hart
3

Wenn Sie unter Oracle 12 über Pluggable Databases (empfohlen) verfügen, haben Sie folgende Möglichkeiten:

SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS ORDER BY PDB_ID;
Peter
quelle
0

Für Standalone-Datenbanken, um die Liste der Datenbanken abzurufen, die nach dem Neustart des Hosts automatisch gestartet werden:

cat /etc/oratab | grep -i ":y" | grep -v "^#"

oder um eine Liste aller Datenbanken zu erhalten:

cat /etc/oratab | grep -v "^#"

Für RAC-Datenbanken kann folgende Methode hilfreich sein:

crsctl stat res -t | grep "\.db"

Wie bereits erwähnt, ist die Datenbank in MySQL nicht mit der Datenbank in Oracle identisch. In Oracle ist es dem Schema näher - das heißt dem Container für Benutzerobjekte. Um eine Schemaliste zu erhalten, können Sie folgende SQL-Anweisung verwenden:

select username from dba_users order by 1;

oder um nicht systembezogene Schemata aufzulisten (verfügbar in Oracle RDBMS ab Version 12c):

select username from dba_users where ORACLE_MAINTAINED='N' order by 1;
Prokhozhii
quelle