如何查找某个对象的定义(V$_X$_DBA)[2]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 lunar2000 的 blog

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                        

本文关键:如何查找某个对象的定义(V$_X$_DBA)
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top