4 Stimmen

Abfrage der in DBA_Tables aufgeführten Tabellen

Ein Produkt eines Drittanbieters, das wir in meinem Unternehmen einsetzen, verwendet Oracle als Backend. Ich versuche, mich bei der Oracle-Datenbank anzumelden und mir das Schema und die Daten anzusehen. Ich habe mich als sys/sysdba angemeldet, einen Benutzer mit einem Standard-Tablespace erstellt, der von der Anwendung erstellt wurde, und dem Benutzer alle erforderlichen Berechtigungen zur Abfrage der Strukturen erteilt. Außerdem habe ich O7_DICTIONARY_ACCESSIBILITY auf true gesetzt, um die Abfrage der Data-Dictionary-Objekte zu ermöglichen.

Nachdem ich mich als Benutzer angemeldet und User_Tables abgefragt habe, wird nichts zurückgegeben. Wenn ich jedoch DBA_Tables abfrage, werden die Tabellen zurückgegeben, die ich zu finden erwarte. Ich bin ein Oracle-Neuling, daher weiß ich nicht genau, wie eine Nicht-System-Tabelle im Tablespace sein kann, eine User_table aber nicht.

Und vor allem: Wie können Sie die Daten in diesen Tabellen abfragen? Immer wenn ich ein einfaches "Select *" aus den Tabellen versuche, erhalte ich die Fehlermeldung "Tabelle oder Ansicht existiert nicht".

Vielen Dank im Voraus.

15voto

Justin Cave Punkte 220606

Der Standard-Tablespace, den Sie für einen Benutzer festlegen, steuert, in welchem Tablespace Objekte, die diesem Benutzer gehören, erstellt werden. Er hat nichts damit zu tun, welche Objekte sie abfragen können.

  • USER_TABLES gibt Informationen über die Tabellen zurück, die ein bestimmter Benutzer besitzt. Es klingt nicht so, als ob Ihr Benutzer irgendwelche Tabellen besitzt, so dass Sie erwarten würden, dass diese leer sind.
  • ALL_TABLES liefert Informationen über die Tabellen, auf die ein bestimmter Benutzer Zugriff hat. Wenn Sie die entsprechenden Berechtigungen erteilt haben, sollte Ihr Benutzer die Tabellen in dieser Data Dictionary-Ansicht sehen.
  • DBA_TABLES gibt Informationen über jede Tabelle in der Datenbank zurück, auch wenn Sie nicht unbedingt Zugriff auf die zugrunde liegende Tabelle haben.

Wenn Sie versuchen, Daten aus einer der Tabellen abzufragen, geben Sie den Schemanamen an (die Spalte OWNER in ALL_TABLES )? Wenn Sie ein Objekt nicht besitzen, müssen Sie in der Regel voll qualifizierte Namen verwenden, um darauf zu verweisen, d.h.

SELECT *
  FROM schema_owner.table_name

Sie können die Verwendung vollständig qualifizierter Namen vermeiden, wenn

  • Sie erstellen ein Synonym (öffentlich oder privat) für das Objekt
  • Sie ändern die CURRENT_SCHEMA für die Sitzung. Dies ändert das Standardschema, nach dem ein Name aufgelöst wird. Es hat keine Auswirkungen auf Berechtigungen und Privilegien. Sie können das aktuelle Schema mit dem Befehl

    ALTER SESSION SET current_schema = new_schema_name

    Sie müssten dies für jede Sitzung tun, die der Benutzer erstellt - möglicherweise in einem Anmelde-Trigger.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X