Oracle Databaseのv_$表とv$表の関係
はじめに
**動的パフォーマンス・ビュー(v$表)**は、データベースが稼働している間にデータベース・サーバーが継続して更新している特別なビューです。他DBと比較してもOracleDatabaseの動的パフォーマンス・ビューの多彩さは郡を抜いています。
アクセスする際は v$表
に対してselect文を投げますが、たまに各種ドキュメントを見ると「v_$表」という表記が出てきます。例えば下記はたまたま見つけた例ですが、AWSのDMSのマニュアルにはこのような記載があります。
https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Source.Oracle.html
権限を付与する場合、オブジェクトのシノニムではなく、オブジェクトの実際の名前を使用します。たとえば、V_$OBJECT を下線を含めて使用し、下線のない V$OBJECT は使用しません。
またディクショナリビューを参照する権限を与える場合には、 V_$LICENSE
と**アンダーバー**を指定をする必要がありますよね。
SQL> GRANT SELECT ON SYS.V_$LICENSE TO rivus;
権限付与が成功しました。
V_$表とは
下記のマニュアルにもある通り、正確にはv$表は**PUBLIC シノニム**です。V$ARCHIVEの場合、V_$ARCHIVEが 実表
でV$ARCHIVEは シノニム
です。権限を付与する際はシノニムではなく実表に対しての権限を付与する必要があるため、上記の通りアンダーバーを付与する必要があるということです。
https://docs.oracle.com/cd/E16338_01/server.112/b56311/dynviews_1001.htm
実際の動的パフォーマンス・ビューは、接頭辞
V_$
によって識別されます。これらのビューのパブリック・シノニムには、接頭辞V$
が付いています。データベース管理者および他のユーザーは、V_$
オブジェクトではなく、V$
オブジェクトのみにアクセスしてください。
実際の確認した結果は下記の通りです。
SQL> set pages 2000 lin 2000
col OWNER for a10
col SYNONYM_NAME for a15
col TABLE_OWNER for a15
col TABLE_NAME for a15
select OWNER,SYNONYM_NAME,TABLE_OWNER,TABLE_NAME from ALL_SYNONYMS where TABLE_NAME like 'V_$ARCHIVE';
SQL> SQL> SQL> SQL> SQL> SQL>
OWNER SYNONYM_NAME TABLE_OWNER TABLE_NAME
---------- --------------- --------------- ---------------
PUBLIC V$ARCHIVE SYS V_$ARCHIVE
関連しているかもしれない記事
- VirtualBoxのOracle LinuxにOracle Database 19cをインストール
- DBCA実行時の[DBT-06103] The port (1,521) is already in use.について
- Oracle Database 19cインストール事前準備
- Oracle Databaseのsystem表領域の領域縮小
- GoldenGate 12.3新機能のParallel Replicatの動作を確認してみる