Jaka jest ogólna różnica między v$
widokiem a jego dba_
ekwiwalentem? Weźmy na przykład v$tablespace
i dba_tablespaces
.
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$TABLESPACE
to widok na X$KCCTS
strukturę pamięci wewnętrznej. DBA_TABLESPACES
jest widokiem na tabelę słownika danych SYS.TS$
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 ...