Was ist der Unterschied zwischen av $ view und seinem dba_-Äquivalent?

9

Was ist der allgemeine Unterschied zwischen einer v$Ansicht und ihrer dba_Entsprechung? Nehmen Sie zum Beispiel v$tablespaceund dba_tablespaces.

Nur ein Lernender
quelle

Antworten:

13

Der einfachste Weg, daran zu denken, ist:

  • DBA_ / USER_ / ALL_ Ansichten basieren auf dem Datenwörterbuch - sie sind nicht verfügbar, wenn die Datenbank nicht bereitgestellt und geöffnet ist.

  • V$ Ansichten werden in der Regel für die Instanz ausgeführt und sind daher je nach Art der Ansicht möglicherweise verfügbar, wenn die Datenbank nicht bereitgestellt oder nicht bereitgestellt und geöffnet ist.

Anhand Ihres Beispiels:

  • V$TABLESPACEist eine Ansicht auf X$KCCTS, die eine interne Speicherstruktur ist.
  • DBA_TABLESPACES ist eine Ansicht der Datenwörterbuchtabelle SYS.TS$
Adam Musch
quelle
3

Neben den von Adam Musch aufgelisteten Unterschieden gibt es noch einige weitere Unterschiede zwischen dba_-Ansichten und v $ -Ansichten, die erwähnenswert sind, da sie potenzielle Fallstricke darstellen, wenn Sie diese Unterschiede nicht kennen:

1) Die meisten (aber nicht alle) v $ -Ansichten sind technisch gesehen überhaupt keine Ansichten, sondern Synonyme für v_ $ -Ansichten. Dies ist eine wichtige Unterscheidung, da Sie keine Berechtigungen für Synonyme erteilen / widerrufen können:

sqlplus / as sysdba

grant select on v$tablespace to user1;
   SQL Error: ORA-02030: can only select from fixed tables/views

select table_name from dba_synonyms where synonym_name = 'V$TABLESPACE';
   TABLE_NAME
   -------------
   V_$TABLESPACE

grant select on V_$TABLESPACE to user1;
   grant succeeded.

2) Sie können Flashback-Abfragen für dba_-Ansichten ausführen. Wenn Sie jedoch Flashback-Abfragen für v $ -Ansichten ausführen, werden aktuelle Daten zurückgegeben (12.1-Dokumente zur Verwendung der Oracle Flashback-Technologie) :

Sie können frühere Daten nicht aus einer dynamischen Leistungsansicht (V $) abrufen. Eine Abfrage in einer solchen Ansicht gibt aktuelle Daten zurück.

Sie können Abfragen für vergangene Daten in statischen Datenwörterbuchansichten ausführen, z. B. * _TABLES.

Wie Adam Musch betonte, werden v $ -Ansichten direkt für die Instanz ausgeführt, während dba_-Ansichten für das Datenwörterbuch ausgeführt werden. Sobald Sie das verstanden haben, ist es sinnvoll, warum diese Einschränkung besteht. Trotzdem wünsche ich mir wirklich, dass eine Flashback-Abfrage für v $ -Ansichten einen Fehler zurückgibt, anstatt stillschweigend nicht zu funktionieren, da dieses Problem für einige Zeit unbemerkt bleiben kann ...

Kris Johnston
quelle