2009年2月12日星期四

数据字典data dictionary

数据字典是oracle数据库的一个重要组成部分,这是一组用于记录数据库信息的表(这个表是read-only的)。数据字典中包含:
数据库中所有方案对象(schema object)的定义(包括表table、视图view、索引index、簇index、同义词synonyms、序列sequence、过程procedure、函数function、包package、触发器trigger等等)

数据库为一个方案对象分配了多少空间,以及该对象当前使用了多少空间。
列的默认值
完整性约束(integrity constraint)信息
数据库用户名
每个用户被授予(grant)的权限(privilege)与角色(role)
监控(audit)信息,例如那个用户对某个方案对象进行了访问或更新操作
数据库中的其何使用数据字典
数据字典有三个主要用途:
oracle利用数据字典来获取关于用户、方案对象、及存储结构(storage structure)的信息
每当数据库中执行了DDL语句后,oracle将对数据字典进行修改
所有oracle用户都可以使用数据字典来获取关于数据库的信息
一、oracle如何使用数据字典
数据字典基表中的数据是oracle正常工作所必须的。因此,只有oracle才能增加或修改数据字典中的信息。当用户对数据库进行升级(upgrade)或降级(downgrade)的操作时,oracle提供了修改数据字典的脚本。
注:任何用户都不应该删除或修改数据字典表内的数据
在数据库运行期间,oracle通过数据字典内的信息来确定方案对象(schema object)是否存在,以及用户是否具备相应的权限。oracle会持续地更新数据字典,以便反映在数据库结构、监控、授权和数据等方面的变化。
例如:当用户创建了名为parts的表,则数据字典中将会增加记录这个新表,及相关列,数据段(segment),数据扩展(extent)的数据,并记录用户对此表的权限(privilege)信息。当数据字典再次被查询时,用户就能够看到这些信息。
二、如何使用数据字典how to use the data dictionary
所有数据库用户都可以参考数据字典视图提供的信息。用户可以使用SQL语句来访问数据字典视图。有些视图可以供所有oracle用户使用,而有些只有DBA才能访问。
只要数据库处于打开(open)状态,用户就可以使用数据字典。因为数据字典存储在SYSTEM表空间内,此表空间在数据库被打开后总是联机(online)的。
数据字典视图可以被分为多组。大多数情况下,一组视图由三个包含相似信息的视图构成,其中的区别在于视图名称的前缀:
前缀是USER,表明是用户视图(用户方案(schema)内的对象)
前缀是ALL,扩展的用户视图(用户可访问的对象)
前缀是DBA,DBA视图(所有用户方案内的对象)
同一组中各视图所包含的列是完全相同的,但有以下除外:
使用USER前缀的视图通常没有OWNER列。对于USER视图来说,这列的值等于提交查询的用户名
有些以DBA为前缀的视图包含管理员所需的额外列
二、动态性能表dynamic performance table
在数据库运行过程中,oracle将维护一组虚拟表(virtual table)用于记录数据库的当前状态(current database activity)。这组表被称为动态性能表(dynamic performance table)。
动态性能表并不是真正的表,大多数用户不应访问其中的信息,但是数据库管理员可以对其进行查询,或在其上创建视图并将访问权限授予其他用户。这些视图有时被称为固定视图(fixed view),因为数据库管理员不能将其修改或移除。
动态性能表由SYS用户所拥有,他们的名字都是以V_$开头。这些表上创建有视图,而视图上创建有公共同义词。这些同义词的名字都是以V$开头,例如,V$DATAFILE视图包含了数据库文件的信息,V$FIXED_TABLE视图包含了数据库所有动态性能表及视图的信息。
三、数据库对象元数据database object metadata
DBMS_METADATA包为用户提供了获取数据库对象完整定义的接口。此包可以通过XML或SQL DDL的形式提供定义信息。此包具备两类接口:
1、用于进行编程的灵活且完善的接口(A flexible,sophisticated interface for programmatic control)
2、用于随机查询(ad hoc querying)的简化接口
他概要信息
与数据库内的其他数据相同,数据字典也是以表及视图的形式组织的。一个数据库全部的数据字典表与数据字典视图都存储在该数据库的SYSTEM表空间内。
数据字典不仅是oracle数据库的基础组成部分,它也为所有用户--从终端用户,到应用程序设计者,再到数据库管理员--提供了一个重要的工具。数据字典可以通过SQL语句进行访问。由于数据字典是只读的,用户只能对这些表和视图执行查询操作(select语句)。
数据字典由以下两种结构组成:
1、基表
基表(base table)用于存储相关的数据库信息。只有oracle才能读这些表。用户很少直接访问它们,因为这些表是规范化的(normalized),且其中的大部分数据的含义是普通用户无法理解的。
2、用户访问视图user-accessible views
用户访问视图(user-accessible view)用于对数据字典基表内存储的数据进行汇总与展示。这些视图利用连接(join)及WHERE子句简化基表中的数据,将其解码(decode)为用户可理解的信息,例如用户名、表名等。大多数用户只能访问这些视图,而不能访问基表。
oracle中的SYS用户拥有数据字典中的所有基表(base table)及用户访问视图(user-accessible view)。其他oracle用户不应修改(UPDATE、DELETE或INSERT)SYS方案中的对象定义以及数据,否则将危害数据库的数据完整性(data integrity)。安全管理员必须严格控制此帐户。
注:修改或操作数据字典表中的数据可能会给数据库的运行带来不可恢复的损害。

没有评论:

发表评论