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

来源:pcdog 作者:佚名 2008-03-13 出处:pcdog.com

oracle  
下一页 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未公开的视图不在其中)。



下一页 1 2 3 
上一篇:Oracle数据库中关键字
下一篇:讲解Oracle中JOB与存储过程的接合用法