Oracle 动态视图V$,V_$,GV$,GV_$与X$之间的关系

来源:互联网 发布:叶利钦 知乎 编辑:程序博客网 时间:2024/04/20 23:37
gv$是全局视图,而v$是针对某个实例的视图,$X是所有gv$的数据来源,从gv$到v$需要加上where inst_id = USERENV(’Instance’)。一般来说一个oracle数据库只会有一个实例对其操作,但在RAC上可以有多台实例同时装载并打开一个数据库,在RAC上得到的结果是:

etl@ALIDW> select distinct inst_id from gv$session;

从另一个视图v$fixed_view_definition中得到如下信息(以v$fixed_table为例):

那gv_$与v_$的定义又在什么地方呢?原来在$ORACLE_HOME/rdbms/admin存放着系统管理脚本,在catalog.sql中发现:

–CATCTL -S    Initial scripts single process

@@cdstrt

@@cdfixed.sql

@@cdcore.sql

–CATCTL -M

@@cdplsql.sql

@@cdsqlddl.sql

cdfixed.sql中找到

create or replace view v_$fixed_table as select * from v$fixed_table;

create or replace public synonym v$fixed_table for v_$fixed_table;

grant select on v_$fixed_table to select_catalog_role;

create or replace view gv_$fixed_table as select * from gv$fixed_table;

create or replace public synonym gv$fixed_table for gv_$fixed_table;

grant select on gv_$fixed_table to select_catalog_role;

…………………………………………………………………………………………………………….

[oracle@3857 admin]$ sqlplus sys/sys@archdw as sysdba

SQL> select * from user_role_privs;

因此我们常用的v$ 是v_$的同义词,v_$是基于真正的视图v$,而真正的v$视图是在gv$的基础上限制inst_id得到;

我们常用的gv$是gv_$的同义词,gv_$基于真正的视图gv$,而真正的gv$视图基于系统表X$。

0 0
原创粉丝点击