
4.5 数据字典
4.5.1 数据字典简介
数据字典是由Oracle服务器创建和维护的一组只读的系统表,它存储了有关数据库和数据库对象的信息,Oracle服务器依赖这些信息来管理和维护数据库。数据字典是一组表和视图结构,它们存储在SYSTEM表空间中。当用户对数据库中的数据进行操作时,如果遇到问题就可以访问数据字典来查看详细的信息。所有的数据字典的名称都存储在DICTIONARY里。
数据字典中存储了以下数据库信息。
➢ 数据库中所有方案对象的信息,如表、视图、同义词和索引等。
➢ 数据库的逻辑结构和物理结构,如表空间和数据文件的信息。
➢ 列的默认值。
➢ 完整性约束的信息。
➢ Oracle用户的名称。
➢ 用户和角色被授予的权限。
➢ 用户访问或使用的审计信息。
➢ 数据库对象的磁盘空间分配信息,如对象所分配的和当前使用的磁盘空间。
➢ 其他产生的数据库信息。
注意
在创建数据库时会运行catalog.sql和catrpoc.sql脚本文件。首先运行catalog.sql脚本文件来创建数据库的内部字典表。然后再运行catrpoc.sql脚本文件来创建数据库内建的存储过程、包等PL/SQL对象。如果使用DBCA工具来创建数据库,则DBCA会自动调用这两个脚本文件。否则执行CREATE DATABASE命令来创建数据库时,需要手工运行这两个脚本文件。
4.5.2 数据字典内容
数据字典中包含数据字典基表和数据字典视图两种内容。
(1)数据字典基表
数据字典基表存储相关的数据库的信息。只有Oracle数据库才能读写数据字典基表,用户很少直接访问它们,因为大部分数据被存储在一个加密格式中,而且大部分数据太过复杂,是普通用户无法理解的。Oracle服务器在创建数据库时自动生成数据字典基表,在任何数据库中,数据字典基表都是Oracle数据库中创建的第一个对象。
(2)数据字典视图
数据字典视图用于对数据字典基表内存储的数据进行汇总与展示,使用JOIN和WHERE子句来简化数据字典基表中的数据,将数据字典基表数据解码为用户较为容易理解的信息,如用户名或表名。在数据字典中,这些视图包含所有对象的名称和描述。有些数据字典视图所有的用户都可以访问,而另外一些仅用于管理员访问。Oracle数据库为许多数据字典视图创建公用同义词,使用户可以方便地访问它们。
4.5.3 数据字典分类
数据字典组织方式是先基于数据字典基表创建数据字典视图,然后再基于数据字典视图创建同义词,以便用户能够方便地对其进行访问。并将该同义词授权给PUBLIC,从而使得所有用户都可以通过同义词查看数据字典信息。
数据字典主要包括三大类,它们分别用前缀来区别,其前缀分别为USER、ALL和DBA,如表4-2所示。这3类数据字典的列几乎是相同的,只是以前缀为ALL和DBA开始的数据字典比USER多了一些列。
表4-2 数据字典分类

在Oracle数据库中,常用的数据字典如表4-3所示。
表4-3 常用数据字典
