Data Dictionary und dynamische Performance-Views

Das zentrale Set schreibgeschützter Referenztabellen und Views jeder Oracle-Datenbank wird kollektiv als Data Dictionary bezeichnet. Die dynamischen Performanceansichten sind spezielle Ansichten, die kontinuierlich aktualisiert werden, während eine Datenbank geöffnet ist und verwendet wird.

Data Dictionary - Überblick

Ein wichtiger Bestandteil einer Oracle-Datenbank ist das Data Dictionary. Hierbei handelt es sich um eine schreibgeschützte Gruppe von Tabellen, die administrative Metadaten zur Datenbank bereitstellt.

Zweck des Data Dictionarys

Das Data Dictionary enthält Metadaten, die den Inhalt der Datenbank beschreiben.

Beispiel: Das Data Dictionary enthält Informationen wie die folgenden:

Datenmanagement

Das Data Dictionary ist ein zentraler Bestandteil der Datenverwaltung für jede Oracle-Datenbank.

Beispiel: Die Datenbank führt die folgenden Aktionen aus:

Da Oracle AI Database Data Dictionary-Daten wie andere Daten in Tabellen speichert, können Benutzer die Daten mit SQL abfragen. Beispiel: Benutzer können SELECT-Anweisungen ausführen, um ihre Berechtigungen zu bestimmen, welche Tabellen in ihrem Schema vorhanden sind, welche Spalten in diesen Tabellen enthalten sind, ob Indizes auf diesen Spalten basieren usw.

Siehe:

Data Dictionary-Trennung in einer CDB

In einer CDB werden die Data Dictionary-Metadaten zwischen der CDB-Root und den PDBs aufgeteilt. Aus Benutzer- und Anwendungsperspektive ist das Data Dictionary in jedem Container in einer CDB getrennt.

In einer neu erstellten CDB, die noch keine Benutzerdaten enthält, enthält das Data Dictionary in der CDB-Root nur Systemmetadaten. Beispiel: Die Tabelle TAB$ enthält Zeilen, die nur von Oracle bereitgestellte Tabellen beschreiben, wie TRIGGER$ und SERVICE$. In der folgenden Grafik sind drei zugrunde liegende Data Dictionary-Tabellen dargestellt. Die roten Balken geben Zeilen an, die das System beschreiben.

Abbildung 1: Data Dictionary-Metadaten im CDB-Root

Beschreibung der Abbildung cncpt_vm_363.png

Angenommen, Sie erstellen eine PDB und dann ein hr-Schema, das die Tabellen employees und departments in dieser PDB enthält. Das Data Dictionary in der PDB enthält einige Zeilen, die von Oracle bereitgestellte Entitys beschreiben, und andere Zeilen, die vom Benutzer erstellte Entitys beschreiben. Beispiel: Die Tabelle TAB$ im PDB-Dictionary enthält eine Metadatenzeile für die Tabelle employees und eine Zeile für die Tabelle departments.

Abbildung 2: Data Dictionary-Architektur in einer CDB

Beschreibung der Abbildung cncpt_vm_361.png

Die obige Grafik zeigt, dass das Data Dictionary in der PDB Pointer zum Data Dictionary in der CDB-Root enthält. Intern werden von Oracle bereitgestellte Objekte wie Data Dictionary-Tabellendefinitionen und PL/SQL-Packages nur einmal in der CDB-Root dargestellt. Diese Architektur erreicht zwei Hauptziele innerhalb der CDB:

Data Dictionary-Komponenten

Das Data Dictionary besteht aus Basistabellen und Views.

Diese Objekte sind wie folgt definiert:

In der Regel werden Data Dictionary Views in Sets gruppiert. In vielen Fällen besteht ein Set aus drei Views, die ähnliche Informationen enthalten und durch ihre Präfixe voneinander unterschieden werden, wie in der folgenden Tabelle dargestellt. Wenn Sie die entsprechenden Ansichten abfragen, können Sie nur auf die für Sie relevanten Informationen zugreifen.

Tabelle 1: Data Dictionary View-Sets

Präfix Benutzerzugriff Inhalt Notizen
DBA_ Datenbankadministratoren Alle Objekt Einige DBA_-Ansichten enthalten zusätzliche Spalten mit Informationen, die für den Administrator nützlich sind.
ALL_ Alle Benutzer Objekte, für die der Benutzer über Berechtigungen verfügt Enthält Objekte, deren Eigentümer der Benutzer ist. Diese Ansichten entsprechen der aktuellen Gruppe aktivierter Rollen.
USER_ Alle Benutzer Objekte, deren Eigentümer der Benutzer ist Views mit dem Präfix USER_ schließen normalerweise die Spalte OWNER aus. Diese Spalte wird in den USER_-Views als der Benutzer impliziert, der die Abfrage abgibt.

Nicht alle AnsichtenSets haben drei Elemente. Beispiel: Das Data Dictionary enthält eine DBA_LOCK-Ansicht, aber keine ALL_LOCK-Ansicht.

Die vom System bereitgestellte DICTIONARY-Ansicht enthält die Namen und abgekürzten Beschreibungen aller Data Dictionary Views. Die folgende Abfrage dieser Ansicht enthält eine Teilbeispielausgabe:

SQL> SELECT * FROM DICTIONARY
  2  ORDER BY TABLE_NAME;

TABLE_NAME                     COMMENTS
------------------------------ ----------------------------------------
ALL_ALL_TABLES                 Description of all object and relational
                               tables accessible to the user

ALL_APPLY                      Details about each apply process that
                               dequeues from the queue visible to the
                               current user
.
.
.

Siehe:

Containerdatenobjekte in einer CDB

Ein Containerdatenobjekt ist eine Tabelle oder View, die Daten enthält, die sich auf mehrere Container oder die gesamte CDB beziehen.

Containerdatenberechtigungen unterstützen eine allgemeine Anforderung, bei der sich mehrere PDBs in einer einzelnen CDB befinden, jedoch mit unterschiedlichen lokalen Administrationsanforderungen. Beispiel: Wenn Anwendungs-DBAs nicht lokal verwalten möchten, können sie den allgemeinen Benutzern Berechtigungen für Containerdaten für entsprechende Ansichten erteilen. In diesem Fall kann der CDB-Administrator auf die Daten für diese PDBs zugreifen. Im Gegensatz dazu erteilen PDB-Administratoren, die nicht möchten, dass der CDB-Administrator auf ihre Daten zugreift, keine Containerdatenberechtigungen.

Beispiele für Containerdatenobjekte sind von Oracle bereitgestellte Views, deren Namen mit V$ und CDB_ beginnen. Alle Containerdatenobjekte haben eine Spalte CON_ID. Die folgende Tabelle zeigt die Bedeutung der Werte für diese Spalte.

Tabelle 2: Container-ID-Werte

Container-ID Zeilen für
0 Ganze CDB
1 CDB$ROOT
2 PDB$SEED
Alle anderen IDs Vom Benutzer erstellte PDBs, Anwendungs-Roots oder Anwendungs-Seeds

In einer CDB ist für jede DBA_-Ansicht eine entsprechende CDB_-Ansicht vorhanden. Der Eigentümer einer CDB_-Ansicht ist der Eigentümer der entsprechenden DBA_-Ansicht. Die folgende Grafik zeigt die Beziehung zwischen den verschiedenen Kategorien von Dictionary Views:

Abbildung 3: Dictionary Views in einer CDB

Beschreibung der Abbildung cncpt_vm_366.png

Wenn der aktuelle Container eine PDB ist, kann ein Benutzer Data Dictionary-Informationen nur für die aktuelle PDB anzeigen. Wenn der aktuelle Container jedoch die CDB-Root ist, kann ein allgemeiner Benutzer CDB_-Views abfragen, um Metadaten für die CDB-Root und für PDBs anzuzeigen, für die dieser Benutzer berechtigt ist. Hinweis: Wenn Sie Daten aus der CDB-Root abfragen, konvertieren die Views CDB_ und V$ Daten implizit in den Zeichensatz AL32UTF8. Wenn ein Zeichensatz mehr Byte benötigt, um ein Zeichen darzustellen, wenn er in AL32UTF8 konvertiert wird, und wenn die Breite der Ansichtsspalte keine Daten aus einer bestimmten PDB aufnehmen kann, ist eine Datenabschneiden möglich.

In der folgenden Tabelle werden Abfragen von CDB_-Views beschrieben. Jede Zeile beschreibt eine Aktion, die nach der Aktion in der vorhergehenden Zeile erfolgt.

Tabelle 3: Abfragen von CDB_-Views

Arbeitsvorgang Beschreibung
SQL> CONNECT SYSTEM
 Enter password: ********
 Connected.

Der Benutzer SYSTEM, der allen Containern in der CDB gemeinsam ist, stellt eine Verbindung zur CDB-Root her (siehe "Allgemeine Benutzeraccounts").

SQL> SELECT COUNT(*) FROM CDB_USERS
  WHERE CON_ID=1;

  COUNT(*)
 --------
 38
SYSTEM fragt CDB_USERS ab, um die Anzahl der allgemeinen Benutzer in der CDB-Root abzurufen. Die Ausgabe gibt an, dass 38 allgemeine Benutzer in der CDB-Root vorhanden sind.
SQL> SELECT COUNT(DISTINCT(CON_ID))
  FROM CDB_USERS;

  COUNT(DISTINCT(CON_ID))
 -----------------------
 4
SYSTEM fragt CDB_USERS ab, um die Anzahl der eindeutigen Container in der CDB zu bestimmen.
SQL> CONNECT SYSTEM@hrdb
 Enter password: ********
 Connected.
Der Benutzer SYSTEM stellt jetzt eine Verbindung zur PDB namens hrpdb her.
SQL> SELECT COUNT(*) FROM CDB_USERS;

  COUNT(*)
 ----------
 48
SYSTEM fragt CDB_USERS ab. Die Ausgabe gibt an, dass 48 allgemeine und lokale Benutzer im aktuellen Container (hrpdb) vorhanden sind.
SQL> SELECT COUNT(*) FROM DBA_USERS;

  COUNT(*)
 ----------
 48
SYSTEM fragt DBA_USERS ab. Die Ausgabe entspricht der vorherigen Abfrage. Da SYSTEM nicht mit dem CDB-Root verbunden ist, zeigt die DBA_USERS-Ansicht dieselbe Ausgabe wie CDB_USERS an. Da DBA_USERS nur die Benutzer im aktuellen Container anzeigt, wird 48 angezeigt.

Ansichten mit dem Präfix DBA_

Views mit dem Präfix DBA_ zeigen alle relevanten Informationen in der gesamten Datenbank an. Die DBA_-View ist nur für Administratoren gedacht.

In der folgenden Beispielabfrage werden Informationen zu allen Objekten in der Datenbank angezeigt:

SELECT OWNER, OBJECT_NAME, OBJECT_TYPE
FROM   DBA_OBJECTS
ORDER BY OWNER, OBJECT_NAME;

Siehe auch: Oracle AI Database Administrator's Guide für detaillierte Informationen zu administrativen Berechtigungen

Ansichten mit dem Präfix ALL_

Views mit dem Präfix ALL_ beziehen sich auf die Gesamtperspektive des Benutzers der Datenbank.

Diese Views geben Informationen zu Schemaobjekten zurück, auf die der Benutzer über öffentliche oder explizite Berechtigungen und Rollen sowie über Schemaobjekte zugreifen kann, deren Eigentümer der Benutzer ist.

Beispiel: Die folgende Abfrage gibt Informationen zu allen Objekten zurück, auf die Sie Zugriff haben:

SELECT OWNER, OBJECT_NAME, OBJECT_TYPE
FROM   ALL_OBJECTS
ORDER BY OWNER, OBJECT_NAME;

Da die ALL_-Views der aktuellen Gruppe aktivierter Rollen entsprechen, hängen die Abfrageergebnisse davon ab, welche Rollen aktiviert sind, wie im folgenden Beispiel dargestellt:

SQL> SET ROLE ALL;

Role set.

SQL> SELECT COUNT(*) FROM ALL_OBJECTS;

COUNT(*)
----------
68295

SQL> SET ROLE NONE;

Role set.

SQL> SELECT COUNT(*) FROM ALL_OBJECTS;

COUNT(*)
----------
53771

Anwendungsentwickler sollten die Auswirkungen von Rollen erkennen, wenn sie ALL_-Ansichten in einer gespeicherten Prozedur verwenden, in der Rollen standardmäßig nicht aktiviert sind.

Ansichten mit dem Präfix USER_

Die Views, die für typische Datenbankbenutzer am ehesten von Interesse sind, sind die Views mit dem Präfix USER_.

Diese Ansichten:

Beispiel: Die folgende Abfrage gibt alle in Ihrem Schema enthaltenen Objekte zurück:

SELECT OBJECT_NAME, OBJECT_TYPE
FROM   USER_OBJECTS
ORDER BY OBJECT_NAME;

Die DUAL-Tabelle

DUAL ist eine kleine Tabelle im Data Dictionary, auf die Oracle AI Database und vom Benutzer geschriebene Programme verweisen können, um ein bekanntes Ergebnis zu gewährleisten.

Die doppelte Tabelle ist nützlich, wenn ein Wert nur einmal zurückgegeben werden muss, z.B. das aktuelle Datum und die aktuelle Uhrzeit. Alle Datenbankbenutzer haben Zugriff auf DUAL.

Die Tabelle DUAL enthält eine Spalte mit dem Namen DUMMY und eine Zeile mit dem Wert X. Das folgende Beispiel fragt DUAL ab, um einen arithmetischen Vorgang auszuführen:

SQL> SELECT ((3*4)+5)/3 FROM DUAL;

((3*4)+5)/3
-----------
 5.66666667

Siehe auch: Oracle AI Database SQL Language Reference für weitere Informationen zur Tabelle DUAL

Funktionsweise des Data Dictionarys

Der Oracle AI Database-Benutzeraccount SYS ist Eigentümer aller Basistabellen und für den Benutzer zugänglichen Views des Data Dictionarys.

Während des Datenbankvorgangs liest Oracle AI Database das Data Dictionary, um sicherzustellen, dass Schemaobjekte vorhanden sind und Benutzer den richtigen Zugriff darauf haben. Oracle AI Database aktualisiert das Data Dictionary kontinuierlich, um Änderungen in Datenbankstrukturen, Auditing, Berechtigungen und Daten widerzuspiegeln.

Beispiel: Wenn Benutzer hr eine Tabelle mit dem Namen interns erstellt, fügt die Datenbank dem Data Dictionary neue Zeilen hinzu, die die neue Tabelle, die neuen Spalten, das neue Segment, die Extents und die Berechtigungen von hr für die Tabelle widerspiegeln. Diese neuen Informationen werden angezeigt, wenn die Dictionary Views das nächste Mal abgefragt werden.

Daten in den Basistabellen des Data Dictionarys sind erforderlich, damit Oracle AI Database funktioniert. Nur Oracle AI Database darf Data Dictionary-Informationen schreiben oder ändern. Kein Oracle AI Database-Benutzer darf niemals Zeilen oder Schemaobjekte ändern, die in dem Schema SYS enthalten sind, weil dadurch eine Störung der Datenintegrität auftreten kann. Der Sicherheitsadministrator muss strikte Kontrolle über diesen zentralen Account bewahren.

Warnung: Das Ändern oder Bearbeiten der Daten in Data Dictionary-Tabellen kann sich dauerhaft und nachteilig auf den Datenbankbetrieb auswirken.

Metadaten und Datenlinks

Die CDB verwendet einen internen Verknüpfungsmechanismus, um Data Dictionary-Informationen zu trennen.

Insbesondere verwendet Oracle AI Database die folgenden automatisch verwalteten Zeiger:

Oracle AI Database erstellt und verwaltet automatisch Metadaten- und Datenlinks zu CDB$ROOT. Benutzer können diese Links nicht hinzufügen, ändern oder entfernen.

Siehe:

Öffentliche Synonyme für Data Dictionary Views

Oracle AI Database erstellt öffentliche Synonyme für viele Data Dictionary Views, damit Benutzer bequem darauf zugreifen können.

Der Sicherheitsadministrator kann auch zusätzliche öffentliche Synonyme für Schemaobjekte erstellen, die systemweit verwendet werden. Oracle empfiehlt, denselben Namen für ein privates Schemaobjekt und ein öffentliches Synonym zu verwenden.

Siehe auch: "Synonyme - Überblick"

Data-Dictionary-Cache

Ein Großteil der Data Dictionary-Informationen befindet sich im Data Dictionary-Cache, da die Datenbank ständig die Informationen benötigt, um den Benutzerzugriff zu validieren und den Status von Schemaobjekten zu prüfen.

Die Caches enthalten in der Regel die Parsing-Informationen. Die COMMENTS-Spalten, die die Tabellen und ihre Spalten beschreiben, werden nicht im Dictionary-Cache gecacht, sondern können im Datenbankpuffercache gecacht werden.

Siehe auch: "Data Dictionary-Cache"

Andere Programme und das Data Dictionary

Andere Oracle AI Database-Produkte können vorhandene Views referenzieren und zusätzliche Data Dictionary-Tabellen oder -Views erstellen.

Oracle empfiehlt, dass Anwendungsentwickler, die Programme schreiben, die auf das Data Dictionary verweisen, die öffentlichen Synonyme anstelle der zugrunde liegenden Tabellen verwenden. Synonyme ändern sich seltener zwischen Releases.

Data Dictionary-Speicher

Das Data Dictionary, in dem die Metadaten für die CDB als Ganzes gespeichert werden, wird nur in den System-Tablespaces gespeichert.

Das Data Dictionary, in dem die Metadaten für eine bestimmte PDB gespeichert werden, wird in den eigenständigen Tablespaces gespeichert, die für diese PDB dediziert sind. Die PDB-Tablespaces enthalten sowohl die Daten als auch die Metadaten für ein Anwendungs-Backend. Daher wird jede Gruppe von Data Dictionary-Tabellen in einer eigenen dedizierten Gruppe von Tablespaces gespeichert.

Siehe auch: "Der SYSTEM-Tablespace" für weitere Informationen zum SYSTEM Tablespace

Überblick über dynamische Performanceansichten

Während des gesamten Betriebs verwaltet Oracle AI Database eine Reihe virtueller Tabellen, die aktuelle Datenbankaktivitäten aufzeichnen.

Diese Views sind dynamisch, da sie kontinuierlich aktualisiert werden, während eine Datenbank geöffnet ist und verwendet wird. Die Ansichten werden manchmal als V$-Ansichten bezeichnet, da ihre Namen mit V$ beginnen.

Dynamische Performance-Views enthalten Informationen wie die folgenden:

Die dynamischen Performance-Views haben die folgenden primären Verwendungen:

Inhalt der dynamischen Performance-Views

Dynamische Performance-Views werden als feste Views bezeichnet, da sie von einem Datenbankadministrator nicht geändert oder entfernt werden können. Datenbankadministratoren können jedoch Views für die Tabellen abfragen und erstellen und anderen Benutzern Zugriff auf diese Views erteilen.

SYS ist Eigentümer der dynamischen Performancetabellen, deren Namen mit V_$ beginnen. Views werden für diese Tabellen erstellt, und dann öffentliche Synonyme mit dem Präfix V$. Beispiel: Die Ansicht V$DATAFILE enthält Informationen zu Datendateien. Die Ansicht V$FIXED_TABLE enthält Informationen zu allen dynamischen Performancetabellen und -ansichten.

Für fast jede V$-Ansicht ist eine entsprechende GV$-Ansicht vorhanden. Wenn Sie in Oracle Real Application Clusters (Oracle RAC) eine GV$-View abfragen, werden die V$-View-Informationen aus allen qualifizierten Datenbankinstanzen abgerufen.

Wenn Sie eine Datenbank mit Database Configuration Assistant (DBCA) erstellen, erstellt Oracle automatisch das Data Dictionary. Oracle AI Database führt automatisch das Skript catalog.sql aus, das Definitionen der Ansichten und öffentlichen Synonyme für die dynamischen Performance-Views enthält. Sie müssen catalog.sql ausführen, um diese Ansichten und Synonyme zu erstellen.

Siehe:

Speicherung der dynamischen Performance-Views

Dynamische Performance-Views basieren auf virtuellen Tabellen, die aus Datenbankspeicherstrukturen erstellt wurden.

Die Views sind keine herkömmlichen Tabellen, die in der Datenbank gespeichert sind. Die Lesekonsistenz ist für die Views nicht gewährleistet, da die Daten dynamisch aktualisiert werden.

Da die dynamischen Performance-Views keine echten Tabellen sind, hängen die Daten vom Status der Datenbank und der Datenbankinstanz ab. Beispiel: Sie können V$INSTANCE und V$BGPROCESS abfragen, wenn die Datenbank gestartet, aber nicht gemountet wird. Sie können V$DATAFILE jedoch erst abfragen, wenn die Datenbank gemountet wurde.

Siehe auch: "Nebenläufigkeit und Konsistenz von Daten"

Datenbankobjektmetadaten

Das Package DBMS_METADATA und die Funktion DBMS_DEVELOPER.GET_METADATA stellen Schnittstellen zum Extrahieren vollständiger Definitionen von Datenbankobjekten bereit.

Mit dem Package DBMS_METADATA können die Definitionen entweder als XML oder als SQL-DDL ausgedrückt werden. Oracle AI Database bietet zwei Arten von Schnittstellen: eine flexible, ausgefeilte Schnittstelle für programmatische Steuerung und eine vereinfachte Schnittstelle für Ad-hoc-Abfragen.

Mit der Funktion DBMS_DEVELOPER.GET_METADATA werden die Objektmetadaten als JSON-Dokument zurückgegeben.

Siehe auch: Oracle AI Database PL/SQL Packages and Types Reference für weitere Informationen zu DBMS_METADATA. Oracle AI Database PL/SQL Packages and Types Reference für weitere Informationen zu DBMS_DEVELOPER.GET_METADATA.