分类: Oracle
2008-03-30 21:47:03
来源:赛迪网 作者:Curitis |
在实际的工作中,我们经常需要查找某个对象的定义的情况,本文中我们将针对不同类型的对象分别进行讲解:
一、V$视图和X$视图
普通的用户不能访问V$视图:
我们可以发现,得到授权的普通用户仍然只能访问V$开头的视图,而不能直接访问V_$开头的视图,因为实际上V$视图是V_$视图的公有同义词(PUBLIC SYNONYM)要想访问V_$必须带上SYS.V_$。
例如:
与此同时,也可以授予用户SELECT any table权限,这样这个用户就可以访问所有的V$视图:
通过查询V$FIXED_TABLE视图,我们可以看到大部分V$视图和一些X$视图(还有一些Oracle未公开的视图不在其中)。 |
有人要问,那么这些V$视图又是有什么组成的呢?
通过查询V$FIXED_VIEW_DEFINITION视图,我们可以看到这些V$视图的创建语句:
|
那么这个GV$FIXED_TABLE视图的定义又是怎样的呢?
|
此时我们就找到了创建一个V$视图的最低层的信息,即一个V$视图是由哪些X$表构成的。
要找到底层X$表的索引信息,可以查询v$indexed_fixed_column:
|
一般情况下,V$视图和GV$视图的定义是一样的,只是GV$视图中包含的实例id的信息,常用于OPS或者RAC的系统中,也有少数几个V$视图和GV$视图的定义是有区别的,比如GV$PX_PROCESS和V$PX_PROCESS:
|
二、数据字典的组成
下面我们再来将一个数据字典表的定义呢?
|
三、如何查找用户自定义的某个表的定义?
在Oracle 9i前,我们可以使用下面的方法:
|
从Oracle 9i开始,我们可以使用dbms_metadata.get_ddl来找到对象的定义。
例如:
|
大家需要注意,这个查询是需要临时表空间的,所以如果临时表空间不够查询就会有问题了:
|
dbms_metadata.get_ddl也可以用来查询其他对象的创建语句,使用的方法如下;
|
例如:
|