概述

官方文档

Oracle数据库字典通常是在创建和安装数据库时被创建的,Oracle数据字典是Oracle数据库系统工作的基础,没有数据字典的支持,Oracle数据库系统就不能进行任何工作。数据字典中的表是不能直接被访问的,但是可以访问数据字典中的视图。

Oracle 数据字典是有表和视图组成,它们存放在 SYSTEM 表空间中, 数据字典中的表是不能直接被访问的,但是可以访问数据字典中的视图。

Oracle字典视图包括四个层次,分别为X$内部表、基础数据字典表、数据字典视图和动态性能视图(v$或者GV$开头)。


Oracle-数据字典解读_oracle
Oracle-数据字典解读_其他_02

Not all views sets have three members. For example, the data dictionary
contains a DBA_LOCK view but no ALL_LOCK view.

查看全部的数据字典 dictionary

Oracle 11g中数据字典视图2577个,神仙也记不住,但是有个dictionary视图,该视图里记录了所有的数据字典视图的名称。所以当我们需要查找某个数据字典而又不知道这个信息在哪个视图里的时候,就可以在dictionary视图里找。该视图还有个同名词dict。

select * from dict ORDER BY TABLE_NAME;SELECT * FROM DICTIONARY ORDER BY TABLE_NAME;

同义词视图

select OWNER,SYNONYM_NAME,TABLE_NAME from dba_synonyms  ;

我们可以看到 v$ 正好是v_$的同义词,验证了之前的关于oracle性能视图的理论。

Oracle-数据字典解读_oracle_03

SQL> select OWNER,SYNONYM_NAME,TABLE_NAME from dba_synonyms a where  a.table_name='DICTIONARY' ;

OWNER                 SYNONYM_NAME         TABLE_NAME
---------------     ----------------       ----------------- 
PUBLIC                  DICTIONARY        DICTIONARY
PUBLIC                  DICT              DICTIONARY

数据字典的内容
  • 1,数据库中所有模式对象的信息,如表、视图、簇、及索引等。
  • 2,分配多少空间,当前使用了多少空间等。
  • 3,列的缺省值。
  • 4,约束信息的完整性。
  • 5,Oracle 用户的名字。
  • 6,用户及角色被授予的权限。
  • 7,用户访问或使用的审计信息。
  • 8,其它产生的数据库信息。

数据字典分类

数据字典分为 数据字典表 和 数据字典视图

数据字典表

数据字典表里的数据是 Oracle 系统存放的系统数据,而普通表存放的是用户的数据。

为了方便的区别这些表,数据字典表的名字都是用”$”结尾, 这些表属于 SYS用户,只有 Oracle 能够进行读写。

数据字典表由$ORACLE_HOME/rdbms/admin/sql.bsq 脚本创建.

SYS 用户下的这些数据字典表,存放在 system 表空间下面, 表名都用”$”结尾.

为了便于用户对数据字典表的查询, Oracle 对这些数据字典都分别建立了用户视图, 这样即容易记住, 还隐藏了数据字典表表之间的关系, Oracle 针对这些对象的范围,分别把视图命名为 DBA_XXXX, ALL_XXXX 和 USER_XXXX。


数据字典视图

动态性能视图由脚本: $ORACLE_HOME/rdbms/admin/catalog.sql 创建

静态数据字典(静态性能视图)

Views with the Prefix DBA_

包括了所有数据库对象的信息;

Views with the prefix DBA_ show all relevant information in the entire database.
DBA_ views are intended only for administrators.

前提是当前用户具有访问这些数据库的权限,一般来说必须具有管理员权限。

SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM
DBA_OBJECTS ORDER BY OWNER, OBJECT_NAME;

Views with the Prefix ALL_

当前用户有权限访问到的所有对象的信息;
与user_*相比,all_* 并不需要拥有该对象,只需要具有访问该对象的权限即可

SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM
ALL_OBJECTS ORDER BY OWNER, OBJECT_NAME;

Views with the Prefix USER_

当前用户schema下的对象;

SELECT OBJECT_NAME, OBJECT_TYPE FROM USER_OBJECTS
ORDER BY OBJECT_NAME;

动态数据字典(动态性能视图)

除了静态数据字典中三类视图, 其他的字典视图中主要的是 V$视图,之所以这样叫是因为他们都是以 V$GV$开头的。

这些视图会不断的进行更新,从而提供了关于内存和磁盘的运行情况,所以我们只能对其进行只读访问而不能修改它们。

V$视图是基于 X$虚拟视图的。V$视图是 SYS 用户所拥有的,在缺省状况下,只有 SYS 用户和拥有 DBA 系统权限的用户可以看到所有的视图,没有 DBA 权限的用户可以看到 USER_和 ALL_视图,但不能看到 DBA_视图。

与 DBA_,ALL,和 USER_视图中面向数据库信息相反,这些视图可视的给出了面向实例的信息。

更多请查看 Oracle-动态性能视图解读