oracle

V$SESSIONをはじめV$ではじまる動的パフォーマンスビューはパブリックシノニムです。

v$sessionってVIEWだと勘違いしている人多くないですか?自分も最初そう思っていました。実はPUBLIC SYNONYMなんです。(ついでに言うと、データディクショナリであるDBA_OBJECTSやDBA_TABLESもPUBLIC SYNONYMなっていて何れもSYSのVIEWです。)

DBA_OBJECTSで確認できます
col owner for a10
col object_name for a30
col object_type for a10

select owner, object_name, object_type from dba_objects where object_name ='V$SESSION'
;
OWNER      OBJECT_NAME                    OBJECT_TYP
---------- ------------------------------ ----------
PUBLIC     V$SESSION                      SYNONYM

SQL>
DBMS_METADATA.GET_DDL()でDDLを確認できます

ついでにDDLも確認しておきます。as sysdbaでログインしないと確認できません。

set lin 100
select DBMS_LOB.SUBSTR(dbms_metadata.get_ddl('SYNONYM','V$SESSION','PUBLIC'),200,1) from dual
;
DBMS_LOB.SUBSTR(DBMS_METADATA.GET_DDL('SYNONYM','V$SESSION','PUBLIC'),200,1)
----------------------------------------------------------------------------------------------------

  CREATE OR REPLACE NONEDITIONABLE PUBLIC SYNONYM "V$SESSION" FOR "SYS"."V_$SESSION"


SQL>
col owner for a10
col object_name for a12
col object_type for a10
col status for a10

select OWNER,OBJECT_NAME,OBJECT_TYPE,STATUS from all_objects where OBJECT_NAME= 'V_$SESSION'
;
OWNER      OBJECT_NAME  OBJECT_TYP STATUS
---------- ------------ ---------- ----------
SYS        V_$SESSION   VIEW       VALID

SQL>

この通り、実はSYSが保持するV_$SESSIONという名前のVIEWの「パブリックシノニム」がV$SESSIONなのです。この為、ファンクションやプロシージャ内でv$sessionをそのまま使おうとしたら使えない経験ありませんでしたか?このような場合はそのユーザに対しV_$SESSIONのselect 権限を付与する必要があります。

スポンサーリンク
タイトルとURLをコピーしました