数据字典
一、什么是数据字典
数据字典是 Oracle存储所有实例信息的表和视图的集合。Oracle进程会在 SYS模式中
维护这些表和视图,也就是说数据字典的所有者为 sys用户,数据存放在 SYSTEM表空间中。
数据字典描述了实际数据是如何组织的,如一个表的创建者信息、创建时间信息、所属表空
间信息、用户访问权限信息等。对它们可以像处理其他数据库表或视图一样进行查询,但不
能进行任何修改。
Oracle数据库字典通常是在创建和安装数据库时被创建的,Oracle数据字典是 Oracle
数据库系统工作的基础,没有数据字典的支持,Oracle数据库系统就不能进行任何工作。
经验:
当用户在对数据库中的数据进行操作时遇到困难就可以访问数据字典来查
看 详 细 的 信 息 。 例 如 不 清 楚 分 区 表 的 分 区 情 况 , 则 可 以 通 过 查 询
user_tab_partitions视图获得表的分区情况。
二、数据字典的构成
数据字典分为数据字典表和数据字典视图。数据字典中的表是不可以直接被访问,但是
可以访问数据字典中的视图。数据字典视图分为 2类:静态数据字典(静态性能视图) 和 动
态数据字典(动态性能视图)。
|→→→ 数据字典表
数据字典 →→→ 数据字典视图→→→静态数据字典:三类,分别由三个前缀够成:user_*、all_*、 dba_*
|→→→动态数据字典
1.数据字典表
数据字典中的表是不可以直接被访问,表中的数据是 Oracle系统存放的系统数据,而
普通表存放的是用户的数据。为了方便的区别这些表,这些表的名字都是用"$"结尾,这些
表属于 SYS用户。
为了便于用户对数据字典表的查询, Oracle对这些数据字典都分别建立了用户视图,
这样即容易记住,还隐藏了数据字典表表之间的关系,Oracle针对这些对象的范围,分别
把视图命名为 DBA_*, ALL_*和 USER_*。
2. 静态数据字典
静态数据字典中的视图分为三类,它们分别由三个前缀够成:user_*、 all_*、 dba_*。
user_*:该视图存储了关于当前用户所拥有的对象的信息(即所有在该用户模式下的对
象)。
all_*:该视图存储了当前用户能够访问的对象的信息, 而不是当前用户拥有的对象(与
user_*相比,all_* 并不需要拥有该对象,只需要具有访问该对象的权限即可)。
dba_*:该视图存储了数据库中所有对象的信息(前提是当前用户具有访问这些数据库
的权限,一般来说必须具有管理员权限)。
示例
(1)user_tables:主要描述当前用户拥有的所有表的信息,主要包括表名、表空间名、
簇名等。通过此视图可以清楚地了解当前用户可以操作的表有哪些。
SQL>SELECT * FROM user_tables;
(2)user_indexes:查询该用户拥有哪些索引。
SQL>SELECT index_name FROM user_indexes;
(3)user_views:查询该用户拥有哪些视图。
SQL>SELECT view_name FROM user_views;
(4)user_objects:查询该用户拥有哪些数据库对象,对象包括表、视图、存储过程、
触发器、包、索引、序列、Java文件等。
SQL>SELECT object_name FROM user_objects;
(5)user_users:主要描述当前用户的信息,主要包括当前用户名、账户 id、账户状态、
表空间名、创建时间等。
SQL>SELECT * FROM user_users;
(6)all_objects:查询某一用户下的所有表、过程、函数等信息。
SQL>SELECT owner, object_name,object_type FROM all_objects;
查看数据字典:我们通过 dictionary 字典来查看所有的视图和其描述,该表只有 2个
字段:表名和描述。
SQL> DESC dictionary
名称 是否为空? 类型
-------------------- -------- -------------------------
TABLE_NAME VARCHAR2(30)
COMMENTS VARCHAR2(4000)
--查询当前用户所拥有的对象
SQL> SELECT table_name FROM dictionary WHERE table_name LIKE 'USER%';
经验:
使用数据字典时不需要记住所有的数据视图。只需按照如下步骤操作:
1.了解数据字典的结构,比如大概分成三类,常用的是 user_*。
SQL>SELECT table_name FROM DICTIONARY WHERE table_name LIKE
'USER%';
2.根据查询结构找到需要的数据字典视图。例如想知道表就可以查询
“USER_TABLE”;想知道视图就可以查询“USER_VIEW”;想知道存储过程就
可 以 查 询 “ USER_PROCEDURE”; 想 知 道 表 中 的 列 情 况 就 可 以 查 询
“USER_TAB_COLUMNS”。
3. 动态数据字典
除了静态数据字典中三类视图,其他的字典视图中主要的是 V$视图,之所以这样叫是
因为他们都是以 V$或 GV$开头的。这些视图会不断的进行更新,从而提供了关于内存和磁盘
的运行情况,所以我们只能对其进行只读访问而不能修改它们。 动态性能表用于记录
当前数据库的活动,只存于数据库运行期间,实际的信息都取自内存和控制文件。 DBA可
以使用动态视图来监视和调节数据。