【赛迪网-it技术报道】在实际的工作中,我们经常需要查找某个对象的定义的情况,本文中我们将针对不同类型的对象分别进行讲解:
一、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也可以用来查询其他对象的创建语句,使用的方法如下;
|
例如:
|
闽公网安备 35060202000074号