public plustrace no yes no
sql> select * from user_sys_privs;
username privilege admin_option
------------------------------ ---------------------------------------- ------------
lunar select any table no
sql> select count(*) from v$fixed_table;
count(*)
----------
912
sql> select * from v$fixed_table where rownum<2;
name object_id type table_num
------------------------------ ---------- ----- ----------
x$kqfta 4294950912 table 0
sql> select * from v_$fixed_table where rownum<2;
select * from v_$fixed_table where rownum<2
ora-00942: 表或视图不存在
sql> select * from sys.v_$fixed_table where rownum<2;
name object_id type table_num
------------------------------ ---------- ----- ----------
x$kqfta 4294950912 table 0
sql>
通过查询v$fixed_table视图,我们可以看到大部分v$视图和一些x$视图(还有一些oracle未公开的视图不在其中)。
那么这些v$视图又是有什么组成的呢?
通过查询v$fixed_view_definition视图,可以看到这些v$视图的创建语句
sql> conn /@test1 as sysdba
已连接。
sql> grant select any table to lunar;
授权成功。
sql> conn lunar/lunar@test1
已连接。
sql>
sql> set heading off echo off long 50000 pages 10000
sql> select * from v$fixed_view_definition where view_name='v$fixed_table';
v$fixed_table select name , object_id , type , table_num from gv$fixed_table where inst_id = userenv('instance')
sql>
select name , object_id , type , table_num
from gv$fixed_table
where inst_id = userenv('instance')
那么这个gv$fixed_table视图的定义又是怎样的呢?
sql> select * from v$fixed_view_definition where view_name='gv$fixed_table';
gv$fixed_table select inst_id,kqftanam, kqftaobj, 'table', indx from x$kqfta union all select inst_id,kqfvinam, kqfviobj, 'view', 65537 from x$kqfvi union all select inst_id,kqfdtnam, kqfdtobj, 'table', 65537 from x$kqfdt
sql>
select inst_id,kqftanam, kqftaobj, 'table', indx from x$kqfta
union all
select inst_id,kqfvinam, kqfviobj, 'view', 65537 from x$kqfvi
union all
select inst_id,kqfdtnam, kqfdtobj, 'table', 65537 from x$kqfdt
这样我们就找到了创建一个v$视图的最低层的信息,即一个v$视图是由哪些x$表构成的。
要找到底层x$表的索引信息,可以查询v$indexed_fixed_column:
sql> desc v$indexed_fixed_column
name type nullable default comments
--------------- ------------ -------- ------- --------
table_name varchar2(30) y