频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

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

来源:pcdog 作者:佚名 出处:巧巧读书 2008-03-13 进入讨论组
下一页 1 2 3 

在实际的工作中,我们经常需要查找某个对象的定义的情况,本文中我们将针对不同类型的对象分别进行讲解:
 
  一、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未公开的视图不在其中)。

本文:http://www.qqread.com/oracle/2008/03/u401314.html进入讨论组讨论。
下一页 1 2 3 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章