首页|资讯|互联网|电信|硬件|软件|情报|产经|博客|家庭|商用电脑|游戏|评测|学院|下载|网络通信|方案应用|搜索
移动计算|商用软件|外包|开源|中间件|企业|IT经理|发烧友|程序员|IT女性|学生|老板|笔记本|手机|台式机|数码|论坛
程序员

实例讲解如何查找某个对象的定义情况

2008-03-13 11:34 作者:Curitis 来源:赛迪网
[摘要] 在实际的工作中,我们经常需要查找某个对象的定义的情况,本文中我们将针对不同类型的对象分别进行讲解:
[关键字] 查找 对象 定义
  在实际的工作中,我们经常需要查找某个对象的定义的情况,本文中我们将针对不同类型的对象分别进行讲解:

  一、V$视图和X$视图

  普通的用户不能访问V$视图:

  SQL> conn lunar/lunar@test1

  已连接。

  SQL> select * from user_sys_privs;

  USERNAME PRIVILEGE ADMIN_OPTION

  ---------- -------------- ------------

  SQL> select * from user_role_privs;

  USERNAME GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE OS_GRANTED

  ----------- --------------- ------------ ------------ ----------

  LUNAR CONNECT NO YES NO

  LUNAR RESOURCE NO YES NO

  PUBLIC PLUSTRACE NO YES NO

  SQL> select count(*) from v$fixed_table;

  select count(*) from v$fixed_table

  ORA-00942: 表或视图不存在

  必须授权:

  SQL> conn /@test1 as sysdba

  已连接。

  SQL> grant select on v_$fixed_table to lunar;

  授权成功。

  SQL> conn lunar/lunar@test1

  已连接。

  SQL>

  我们可以发现,得到授权的普通用户仍然只能访问V$开头的视图,而不能直接访问V_$开头的视图,因为实际上V$视图是V_$视图的公有同义词(PUBLIC SYNONYM)要想访问V_$必须带上SYS.V_$。

  例如:

  SQL> select count(*) from v$fixed_table;

  COUNT(*)

  ----------

  912

  SQL> select count(*) from v_$fixed_table;

  select count(*) from v_$fixed_table

  ORA-00942: 表或视图不存在

  SQL> select count(*) from sys.v_$fixed_table;

  COUNT(*)

  ----------

  912

  SQL>

  与此同时,也可以授予用户SELECT any table权限,这样这个用户就可以访问所有的V$视图:

  SQL> grant select any table to lunar;

  授权成功。

  SQL> select * from user_role_privs;

  USERNAME GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE OS_GRANTED

  ------------ --------------------- ------------ ------------ ----------

  LUNAR CONNECT NO YES NO

  LUNAR RESOURCE NO YES NO

  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
关键词: 查找, 对象, 定义,
  • 我要留言
关于eNet | 广告服务 | 版权声明 | 加入eNet | 联系我们 | 建议/投诉 | 网站导航 | 加入收藏

网站合作、内容监督、商务咨询、投诉建议:010-65245588
合作建议:hezuo@mail.enet.com.cn
Copyright © 1998--2008 硅谷动力公司版权所有 京ICP证000044号

京ICP证000044号