Info2soft verwendet Cookies, um Ihnen ein besseres und angenehmeres Surferlebnis auf unserer Website zu ermöglichen. Datenschutzerklärung
Wird geladen...
Nutzer von MySQL und PostgreSQL greifen aus Gewohnheit oft auf SHOW TABLES; oder \dt zurück. In Oracle existieren beide Befehle nicht; deren Ausführung führt zu einem Fehler.
Oracle nutzt stattdessen ein Datenwörterbuch (Data Dictionary), eine Sammlung schreibgeschützter Systemviews, die Metadaten zu allen Objekten der Datenbank speichern. Abfragen dieser Views sind zwar ausführlicher als ein Einzeilen-Kurzbefehl, aber deutlich leistungsfähiger. Neben bloßen Tabellennamen lassen sich aus derselben Abfrage Speicherdetails, Partitionierungsinformationen, Zeilenanzahlen und das Datum der letzten Statistikauswertung abrufen.
| Datenbank | Methode zum Auflisten von Tabellen |
|---|---|
| MySQL | SHOW TABLES; |
| PostgreSQL | \dt oder Abfrage von information_schema |
| Oracle | Abfrage von Datenwörterbuch-Views (USER_TABLES, ALL_TABLES, DBA_TABLES) |
Das Datenwörterbuch ist in drei Gültigkeitsbereiche gegliedert, die jeweils an unterschiedliche Zugriffsebenen der Datenbank gebunden sind. Welche View Sie abfragen, hängt davon ab, welche Objekte Ihr Benutzerkonto einsehen darf – das wird im folgenden Abschnitt detailliert erläutert.
Oracle gliedert seine Datenwörterbuch-Views nach Eigentümerschaft und Berechtigungen in drei Ebenen. Zuerst müssen Sie prüfen, welche Ebene auf Ihr Benutzerkonto zutrifft, bevor Sie eine Abfrage schreiben.
Nutzen Sie USER_TABLES, wenn Sie nur die Tabellen einsehen möchten, die Sie in Ihrem eigenen Schema erstellt haben. Dies ist die gängigste Ausgangsbasis für Entwickler, die mit ihren eigenen Objekten arbeiten.
SELECT table_name, tablespace_name, num_rows, last_analyzed
FROM user_tables
ORDER BY table_name;
Die Spalten num_rows und last_analyzed geben Ihnen schnell Aufschluss darüber, ob eine Tabelle Daten enthält und wann der Optimierer zuletzt Statistiken für sie erfasst hat.
In Umgebungen mit mehreren Schemas müssen Sie ggf. Tabellen anderer Nutzer einsehen, für die Ihnen Lese- oder Schreibberechtigungen erteilt wurden. ALL_TABLES umfasst alle Tabellen, auf die Ihr Konto Zugriff hat – nicht nur Ihre eigenen.
Zum Filtern nach einem bestimmten Schema fügen Sie eine WHERE-Klausel hinzu:
SELECT owner, table_name, tablespace_name
FROM all_tables
WHERE owner = 'SALES_DEPT'
ORDER BY owner, table_name;
Ein wichtiger Detailpunkt: Oracle speichert Tabellennamen und Benutzernamen standardmäßig in GROSSBUCHSTABEN. Eine Abfrage mit WHERE owner = 'sales_dept' liefert kein Ergebnis. Verwenden Sie stets Großbuchstaben innerhalb der einfachen Anführungszeichen – es sei denn, das Schema wurde mit gemischter Groß-/Kleinschreibung in doppelten Anführungszeichen erstellt.
DBA_TABLES bietet eine vollständige Übersicht über alle Tabellen in sämtlichen Schemas. Zum Abfragen benötigen Sie entweder die Rolle DBA oder die Berechtigung SELECT ANY DICTIONARY.
Da Oracle zahlreiche interne Systemschemas mitliefert, liefert eine reine Abfrage viele überflüssige Einträge. Schließen Sie diese mit einer Ausschlussliste aus:
SELECT owner, table_name, tablespace_name
FROM dba_tables
WHERE owner NOT IN ('SYS', 'SYSTEM', 'OUTLN', 'DBSNMP', 'APPQOSSYS')
ORDER BY owner, table_name;
Bei dem Fehler ORA-00942: Tabelle oder View existiert nicht fehlen Ihrem Konto die erforderlichen Berechtigungen. Bitten Sie Ihren DBA um die Zuweisung der Rolle SELECT_CATALOG_ROLE – dies ist die Standardmethode, um Lesezugriff auf Dictionary-Views zu gewähren, ohne vollständige DBA-Berechtigungen zu erteilen.
Einfache Standardabfragen liefern nur eine grundlegende Liste. Die folgenden Abfragen gehen weiter: Sie ermöglichen die Suche nach Tabellen anhand von Spaltennamen, Größe oder Teilnamen und helfen Ihnen, das passende Werkzeug für Ihren Anwendungsfall auszuwählen.
| Anwendungsfall | Zu abfragende View | Benötigte Berechtigung |
|---|---|---|
| Tabellen anhand eines Spaltennamens suchen | ALL_TAB_COLUMNS | Standardbenutzer |
| Zeilenanzahl und Datum der letzten Statistikauswertung prüfen | USER_TABLES | Standardbenutzer |
| Tabellen nach Teilnamen durchsuchen | USER_TABLES | Standardbenutzer |
| Tabellen nach ihrer Größe auflisten | DBA_SEGMENTS | DBA-Rolle |
| Auflisten von Anwendungstabellen ohne Systemschemas | DBA_TABLES | DBA-Rolle |
| Visuelle Tabellenübersicht | SQL Developer / dbForge | Benutzerzugriff |
Wenn Sie den Namen einer Spalte kennen, aber nicht wissen, in welchen Tabellen sie vorkommt, fragen Sie ALL_TAB_COLUMNS ab. Das ist besonders hilfreich bei komplexen Schemas mit vielen verknüpften Tabellen.
SELECT owner, table_name, column_name
FROM all_tab_columns
WHERE column_name = 'USER_ID'
ORDER BY owner, table_name;
Der Oracle-Optimierer benötigt Statistiken, um den effizientesten Ausführungsplan zu ermitteln. Wenn num_rows ungenau ist oder last_analyzed mehrere Monate zurückliegt, kann die Abfrageleistung unbemerkt abnehmen – ohne offensichtliche Fehlermeldungen.
SELECT table_name, num_rows, last_analyzed
FROM user_tables
WHERE num_rows > 0
ORDER BY num_rows DESC;
DBMS_STATS.GATHER_TABLE_STATS für die betreffenden Tabellen auszuführen.Wenn Sie sich nur an einen Teil des Tabellennamens erinnern, verwenden Sie den Operator LIKE mit dem Platzhalter %. Halten Sie den Suchbegriff in GROSSBUCHSTABEN, um der Oracle-internen Speicherung von Bezeichnern zu entsprechen.
SELECT table_name
FROM user_tables
WHERE table_name LIKE '%INVENTORY%';
Tabellendaten werden in Oracle als Segmente gespeichert. Daher müssen Sie DBA_SEGMENTS abfragen, um genaue Größenangaben zu erhalten. Diese Abfrage gibt die Gesamtgröße jeder Tabelle in Megabyte aus, beginnend mit der größten Tabelle.
SELECT segment_name AS table_name,
owner,
SUM(bytes) / 1024 / 1024 AS size_mb
FROM dba_segments
WHERE segment_type = 'TABLE'
GROUP BY segment_name, owner
ORDER BY size_mb DESC;
Dies ist ein praktischer Ausgangspunkt für Speicherprüfungen oder die Ermittlung großer Tabellen vor einer Migration.
Eine reine Abfrage von DBA_TABLES enthält auch alle internen Oracle-Systemtabellen, die Sie meist nicht benötigen. Schließen Sie diese aus, um eine übersichtliche Liste Ihrer Anwendungstabellen zu erhalten.
SELECT owner, table_name
FROM dba_tables
WHERE owner NOT IN (
'SYS', 'SYSTEM', 'OUTLN', 'DBSNMP',
'APPQOSSYS', 'CTXSYS', 'XDB', 'WMSYS'
)
ORDER BY owner, table_name;
Das passende Werkzeug hängt von Ihrer Arbeitsweise ab:
SET LINESIZE.Auch erfahrene DBAs stoßen bei Abfragen des Oracle-Datenwörterbuchs auf Zugriffsprobleme oder leere Ergebnislisten. Hier die vier häufigsten Probleme und deren Lösungen.
SELECT_CATALOG_ROLE oder der Berechtigung SELECT ANY DICTIONARY.SELECT-Berechtigung für diese Objekte erteilt hat.CREATE TABLE "Sales_Data", behält Oracle die genaue Schreibweise bei. Eine Standardabfrage mit 'SALES_DATA' liefert keine Treffer.SELECT * FROM "Sales_Data";ALTER SESSION SET CONTAINER = pdb_name;, bevor Sie Ihre Abfrage ausführen.Sobald Sie einen klaren Überblick über Ihre Tabellenstruktur haben, stellt sich als nächste Frage, wie diese Daten über Systeme hinweg geschützt und synchron gehalten werden können. Für Teams mit produktivem Oracle-Betrieb bedeutet dies eine zuverlässige Replikationsebene, die hohe Transaktionsvolumina, Schemaänderungen und plattformübergreifende Umgebungen verarbeiten kann, ohne laufende Betriebsabläufe zu stören.
i2Stream ist eine unternehmensgerechte Datenbankreplikationslösung, die exakt für diese Szenarien entwickelt wurde. Statt eine einheitliche Standardreplikation anzubieten, geht sie direkt auf die praktischen Herausforderungen von Oracle-Umgebungen ein.
Für Teams, die über die reine Replikation hinaus eine umfassende Datenresilienz benötigen, bietet die Produktpalette von Info2Soft die passenden Ergänzungen. i2Backup übernimmt die zentrale Sicherung physischer, virtueller und Cloud-Umgebungen, während i2Migration unterbrechungsfreie plattformübergreifende Migrationen für Oracle und weitere Systeme unterstützt.
F1: Kann ich Tabellen in Oracle ohne DBA-Berechtigungen auflisten?
Ja. USER_TABLES und ALL_TABLES sind für Standardbenutzer ohne spezielle Rechte zugänglich. USER_TABLES zeigt Ihre eigenen Tabellen an, ALL_TABLES alle Tabellen, für die Ihnen Zugriff gewährt wurde. Erhöhte Berechtigungen benötigen Sie nur bei der Abfrage von DBA_TABLES.
F2: Warum liefert USER_TABLES kein Ergebnis?
Meist besitzt der aktuelle Benutzer keine eigenen Tabellen. Wenn Sie ein dediziertes Verbindungsbenutzerkonto oder ein neu erstelltes Konto verwenden, fragen Sie stattdessen ALL_TABLES ab, um alle Objekte einzusehen, auf die Ihr Konto Zugriff hat.
F3: Was ist der Unterschied zwischen USER_TABLES, ALL_TABLES und DBA_TABLES?
USER_TABLES zeigt nur Ihre eigenen Tabellen an. ALL_TABLES umfasst diese sowie alle Tabellen anderer Benutzer, für die Ihnen Zugriff erteilt wurde. DBA_TABLES listet sämtliche Tabellen der gesamten Datenbank auf – die Abfrage erfordert jedoch Administratorberechtigungen.
F4: Wie liste ich Tabellen nach ihrer Größe in Oracle auf?
Fragen Sie DBA_SEGMENTS ab, filtern Sie nach segment_type = ‚TABLE‘ und summieren Sie die Bytes pro Segment. Hierfür benötigen Sie DBA-Berechtigungen. Die vollständige Syntax finden Sie im Abschnitt mit den erweiterten Abfragen weiter oben.
Das Auflisten von Tabellen in Oracle hängt allein davon ab, welche View des Datenwörterbuchs zu Ihrer Zugriffsebene passt. Nutzen Sie USER_TABLES für Ihr eigenes Schema, ALL_TABLES, wenn Sie Tabellen aus anderen zugänglichen Schemas einsehen möchten, und DBA_TABLES für eine vollständige datenbankweite Übersicht – vorausgesetzt, Sie verfügen über die erforderlichen Berechtigungen.
Die erweiterten Abfragen dieses Leitfadens ermöglichen weitergehende Auswertungen: die Suche nach Tabellen anhand von Spaltennamen, die Prüfung von Statistiken, die Filterung nach Speichergröße oder die Eingrenzung von Ergebnissen per Teilnamen. Die meisten Zugriffsprobleme lassen sich auf fehlende Berechtigungen oder Probleme mit der Groß-/Kleinschreibung zurückführen – beide lassen sich unkompliziert beheben, wenn Sie die Ursache kennen.
Wenn Ihre Arbeit über das Abfragen von Tabellenstrukturen hinausgeht und Sie Daten über Systeme hinweg synchron halten möchten, lohnt sich ein Blick auf i2Stream von Info2soft. Es realisiert Echtzeit-Oracle-Replikation auf Transaktionsebene, unterstützt Schemaänderungen ohne manuelle Eingriffe und funktioniert in heterogenen Datenbankumgebungen, ohne Ihren Produktivserver zu beeinträchtigen.
· Unternehmenskunden und Mittelstand weltweit
· Unser Support-Team unterstützt Sie während der gesamten Testphase
· Starten Sie eine 60-tägige Testversion oder sehen Sie sich eine Demo an, um zu erfahren, wie Info2Soft Unternehmensdaten schützt.