数据字典的概念
还记得我们在手工建库的时候,运行的两个脚本文件。一个是catalog.sql,另一个是catproc.sql。catalog.sql是用来创建数据库的内部字典表的。catproc.sql是用来创建数据库的内建的存储过程。
数据字典是Oracle数据库中的一系列只读的参考表和视图。它与数据库内的其他数据相同,也是以标及视图的形式组织的。一个数据库的全部数据字典表与数据字典视图都物理地存储在该数据库的SYSTEM表空间内。它由两个部分组成:数据字典基本表(也叫基表base table)、数据字典视图(也叫用户访问视图)。
当创建数据库时数据字典也被创建。为了实时、准确地反映数据库的状态,用户对Oracle数据库进行操作时,数据字典将会被实时的自动更新。数据库依赖数据字典来记录、验证、管理正在进行的工作。
数据字典的重要性
数据字典是整个Oracle数据库的核心之一,描述了数据库自身的信息,以及数据库里记录对象的信息。比如说我们要对一个数据库中的一个表进行一个添加记录的操作。则需要定位到这个表位于哪个数据文件里,这个表的结构是什么等等才能够完成我们操作。数据字典就是记录着这样的信息(是以表的形式记录的)。
数据字典基本表与数据字典视图的区别
Structure of the Data Dictionary
The data dictionary consists of the following:
Base Tables(基本/数据字典基本表)
The underlying tables that store information about the associated database. Only Oracle should write to and read these tables. Users rarely access them directly because they are normalized, and most of the data is stored in a cryptic format.
基表存储的是一些与数据库相关的信息。只有Oracle才可以读写这些表。用户很少直接访问它们 。因为它们都是规范化的,而且大部分数据都是用一种保护的格式存储的。(只有Oracle才看得 懂,用户是无法看懂里面的信息的)
User-Accessible Views(用户访问视图/数据字典视图)
The views that summarize and display the information stored in the base tables of the data dictionary. These views decode the base table data into useful information, such as user or table names, using joins and WHERE clauses to simplify the information. Most users are given access to the views rather than the base tables.
这个视图是对存储在数据字典的基表中的数据的总结与展示。通过用连接和where字句去简化信息 的方法,把这些视图将基表中的数据编码成有用的信息(所谓有用,就是用户可以看懂,理解的 形式),比如用户,表名等,而这种将数据编码是通过用连接和where字句与简化信息。很多用 户都被赋予了访问视图的权限,而没有访问基表的权限。
这是Oracle Conceptes中对数据字典组成的介绍。简单地说:数据字典基本表就是给Oracle看的,而数据字典视图是为了方便用户而将基本表简化出来的(内容应该是一样的)。
所有这些数据字典基本表与数据字典视图的所有者都是sys(oracle数据库的超级用户)。其他Oracle用户只可以查看,而不能用DML语句(update,delete,insert)去修改这些数据字典表(可能会带来不可恢复的损害)。
为了方便其他用户访问这些视图,Oracle为所有的数据字典视图创建了公共的同名词(public synonym)。所谓的同名词就是别名。这样数据库里的任何用户都通过别名来访问有权查看的视图了。这些视图与同名词就是通过catalog.sql脚本创建的。
数据字典视图分为三个层面:DBA视图(所有用户schema内的对象)、ALL视图(用户可访问的对象)、USER视图(用户schema内的对象)。
DBA视图表示以DBA_开头的视图,包括了整个数据库范围的数据。dba_table表示整个数据库里所有表的信息。用户需要一定的授权才能访问DBA层面的视图。
ALL视图表示以ALL_开头的视图,包含了当前登录用户有权限看到的数据。all_tables记录了当前登录用户有权限访问的所有表的信息。
USER视图表示以USER_开头的视图,包含了当前登录用户所拥有的所有表的信息。
三个视图的关系是DBA包含了ALL包含了USER
dictionary视图记录了所有数据字典视图的名称。它的别名是dict。可以通过它来查看数据库中的视图。
动态性能视图(动态性能表/Dynamic Performance Tables)
除了用具体表存放数据字典外,还有一个数据字典,叫做动态性能视图。用于记录数据库的当前状态,是将内存里的数据或控制文件的数据以表的形式展现出来,是一种虚拟表(virtual table)。所有动态性能视图的名称都存放在v$fixed_table里。而这些动态性能视图都是以v_$开头,属主是用户sys。Oracle为每个动态性能视图都创建了同名词,同名词是将中间的“_”去掉了,都是以v$开头。
动态性能表并不是真正的表,大多数用户不应访问其中的信息。但是数据库管理员可以对其进行查询,或在其上创建视图并将访问权限授予其他用户。这些视图有时被称为固定视图(fixed view),因为数据库管理员不能将其修改或移除。