Qual è la differenza tra av $ view e il suo equivalente dba_?


9

Qual è la differenza generale tra una v$vista e il suo dba_equivalente? Prendi, per esempio, v$tablespacee dba_tablespaces.

Risposte:


13

Il modo più semplice di pensarci è:

  • DBA_ / USER_ / ALL_ le viste sono costruite sul dizionario dei dati - non sono disponibili se il database non è montato e aperto.

  • V$ le viste tendono a essere eseguite sull'istanza e pertanto potrebbero essere disponibili se il database non è montato o non è montato e aperto, a seconda della natura della vista.

Usando il tuo esempio:

  • V$TABLESPACEè una vista su X$KCCTS, che è una struttura di memoria interna.
  • DBA_TABLESPACES è una vista sulla tabella del dizionario dei dati SYS.TS$

3

Oltre alle differenze elencate da Adam Musch, ci sono alcune differenze tra le viste dba_ e v $ che vale la pena menzionare poiché sono potenziali gotcha se non si è consapevoli di queste differenze:

1) La maggior parte (ma non del tutto) v $ viste non sono tecnicamente viste, ma sono sinonimi di v_ $ viste. Questa è una distinzione importante poiché non è possibile concedere / revocare autorizzazioni per sinonimi:

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) È possibile eseguire query di flashback su viste dba_. Tuttavia, l'esecuzione di query di flashback su v $ views restituisce i dati correnti (12.1 documenti sull'utilizzo della tecnologia Oracle Flashback) :

Non è possibile recuperare i dati passati da una vista delle prestazioni dinamiche (V $). Una query su tale vista restituisce i dati correnti.

È possibile eseguire query su dati passati in viste del dizionario di dati statici, come * _TABLES.

Come ha sottolineato Adam Musch, v $ views viene eseguito direttamente sull'istanza mentre dba_ views viene eseguito sul dizionario dei dati. Una volta capito, ha senso il motivo per cui questa limitazione è in atto. Tuttavia, vorrei davvero che la query di flashback contro v $ views restituisse un errore invece di non funzionare in silenzio poiché questo gotcha può rimanere inosservato per un bel po 'di tempo ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.