Jaka jest różnica między widokiem AV $ a jego ekwiwalentem dba_?

9

Jaka jest ogólna różnica między v$widokiem a jego dba_ekwiwalentem? Weźmy na przykład v$tablespacei dba_tablespaces.

Tylko uczeń
źródło

Odpowiedzi:

13

Najłatwiej to wymyślić:

  • DBA_ / USER_ / ALL_ widoki są budowane na słowniku danych - nie są dostępne, jeśli baza danych nie jest zamontowana i otwarta.

  • V$ widoki mają tendencję do uruchamiania z instancją i dlatego mogą być dostępne, jeśli baza danych nie jest zamontowana lub nie jest zamontowana i otwarta, w zależności od charakteru widoku.

Na twoim przykładzie:

  • V$TABLESPACEto widok na X$KCCTSstrukturę pamięci wewnętrznej.
  • DBA_TABLESPACES jest widokiem na tabelę słownika danych SYS.TS$
Adam Musch
źródło
3

Oprócz różnic wymienionych przez Adama Muscha istnieje jeszcze kilka różnic między widokami dba_ i widokami v $, o których warto wspomnieć, ponieważ są to potencjalne problemy, jeśli nie zdajesz sobie sprawy z tych różnic:

1) Większość (ale nie do końca) wyświetleń v $ nie jest w ogóle widokami technicznymi, ale jest synonimem wyświetleń v_ $. Jest to ważne rozróżnienie, ponieważ nie można udzielać / odwoływać uprawnień względem synonimów:

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) Możesz uruchamiać zapytania retrospektywne przeciwko widokom dba_. Jednak uruchomienie zapytań retrospektywnych przeciwko widokom v $ zwraca bieżące dane (dokumenty 12.1 dotyczące korzystania z technologii Oracle Flashback) :

Nie można pobrać przeszłych danych z widoku wydajności dynamicznej (V $). Zapytanie w takim widoku zwraca bieżące dane.

Możesz wykonywać zapytania dotyczące danych przeszłych w widokach słownika danych statycznych, takich jak * _TABLES.

Jak zauważył Adam Musch, widoki v $ działają bezpośrednio na instancji, podczas gdy widoki dba_ działają na słowniku danych. Kiedy to zrozumiesz, ma sens, dlaczego to ograniczenie obowiązuje. Mimo to naprawdę chciałbym, aby zapytanie flashback przeciwko v $ views zwróciło błąd zamiast cicho nie działać, ponieważ to gotcha może pozostać niezauważone przez dłuższy czas ...

Kris Johnston
źródło