v$
ビューとそれに相当するdba_
ビューの一般的な違いは何ですか?たとえば、v$tablespace
とdba_tablespaces
を考えてみましょう。
それを考える最も簡単な方法は次のとおりです。
DBA_ / USER_ / ALL_
ビューはデータディクショナリに基づいて構築されています。データベースがマウントされていない場合、ビューは使用できません。
V$
ビューはインスタンスに対して実行される傾向があるため、ビューの性質に応じて、データベースがマウントされていない場合、またはデータベースがマウントされていない場合に使用できる可能性があります。
あなたの例を使用して:
V$TABLESPACE
は、内部メモリ構造であるX$KCCTS
のビューです。DBA_TABLESPACES
は、データディクショナリテーブルSYS.TS$
のビューですAdam Muschが挙げた違いに加えて、dba_ビューとv $ビューの間には、これらの違いに気付いていない場合に問題になる可能性があるため、言及する価値のあるいくつかの違いがあります。
1)ほとんど(すべてではない)のv $ビューは、技術的にはまったくビューではありませんが、v_ $ビューの同義語です。シノニムに対して権限を付与/取り消すことができないため、これは重要な違いです。
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)dba_ビューに対してフラッシュバッククエリを実行できます。ただし、v $ビューに対してフラッシュバッククエリを実行すると、現在のデータが返されます (12.1 docs on Oracle Flashback Technologyの使用) :
動的パフォーマンス(V $)ビューから過去のデータを取得することはできません。このようなビューに対するクエリは、現在のデータを返します。
* _TABLESなどの静的データディクショナリビューで過去のデータに対してクエリを実行できます。
Adam Muschが指摘したように、v $ビューはインスタンスに対して直接実行されますが、dba_ビューはデータディクショナリに対して実行されます。それを理解すれば、なぜこの制限が設けられているのかは理にかなっています。それでも、私は本当にv $ビューに対するフラッシュバッククエリが静かに機能するのではなくエラーを返し、この問題がしばらくの間気付かれない可能性があるためです。 ..