av $ビューとそれに対応するdba_の違いは何ですか?


9

v$ビューとそれにdba_相当するものの一般的な違いは何ですか?例として、v$tablespaceそしてdba_tablespaces

回答:


13

それを考える最も簡単な方法は次のとおりです。

  • DBA_ / USER_ / ALL_ ビューはデータディクショナリに基づいて構築されています-データベースがマウントされておらず、開かれていない場合は使用できません。

  • V$ ビューはインスタンスに対して実行される傾向があるため、ビューの性質に応じて、データベースがマウントされていない場合、またはマウントされておらず開かれていない場合に使用できる場合があります。

あなたの例を使用して:

  • V$TABLESPACEX$KCCTS内部メモリ構造であるのビューです。
  • DBA_TABLESPACES データディクショナリテーブルのビューです SYS.TS$

3

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 $ビューに対してフラッシュバッククエリを実行すると、現在のデータが返されます(Oracleフラッシュバックテクノロジの使用に関する12.1ドキュメント)

動的パフォーマンス(V $)ビューから過去のデータを取得することはできません。このようなビューに対するクエリは、現在のデータを返します。

* _TABLESなどの静的データディクショナリビューで過去のデータに対してクエリを実行できます。

Adam Muschが指摘したように、v $ビューはインスタンスに対して直接実行され、dba_ビューはデータディクショナリに対して実行されます。それを理解すれば、なぜこの制限が設けられているのか理解できます。それでも、私は本当に v $ビューに対するフラッシュバッククエリが静かに機能するのではなくエラーを返すことを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.