分享

第七章 数据字典

 月影斜 2010-05-08

 Oracle 概念(Oracle 10.2) 第七章 数据字典

7、数据字典

这一章描述了每个Oracle数据库核心引用的只读表,它们的总称叫数据字典(data dictionary)。

这一章包含下列主题:

数据字典介绍

如何使用数据字典

动态性能表

数据库对象元数据

数据字典介绍

Oracle数据库的最重要的一个部分就是它的数据字典,它们是一些只读的表集合,提供数据库的信息。一个数据字典包含:

数据库中所有模式对象的定义(表、视图、索引、聚集、同义词、序列、过程、函数、包、触发器等等)

模式对象被分配了多少空间,当前使用了多少

列默认值

完整性约束信息

Oracle用户名

每个用户被赋予的权限和角色

审核信息,例如谁有权限访问或者更新不同的模式对象

其他数据库通用信息

和其他数据库数据一样,数据字典以表和视图的方式存在。给定数据库的所有数据字典表和视图都保存在数据库的SYSTEM表空间。

数据字典不仅仅是Oracle数据库的核心部分,还是从最终用户到应用程序设计人员和数据库管理员所有用户的一个重要工具。使用SQL语句可以访问数据字典。因为数据字典是只读的,你只能对它的表或视图执行查询(SELECT语句)。

数据字典结构

数据字典包含下列内容:

基表

这些底层表保存相关数据库的信息。只有Oracle可以读写这些表。用户很少直接访问它们,因为它们是标准化的,而且大部分数据都以加密的格式保存。

用户可访问视图

这些视图汇总和显示保存在数据字典基表中的信息。这些表将基表转换为有用的信息,比如用户或表名、使用连接和WHERE子句来简化信息。大部分用户都只被赋予了这些视图的访问,而不是直接访问基表。

SYS,数据字典的拥有者

Oracle用户SYS拥有所有的数据字典基表和用户可访问表。没有Oracle用户能够更新(UPDATE,DELET,INSERT)SYS模式包含的模式对象或任意行,因为那样的操作会破坏数据完整性。安全管理员必须严格控制这个中心账号。

注意:修改或者操作数据字典表的数据能够对数据库操作的影响是持久和有害的。

数据字典如何使用

数据字典主要有三个用处:

Oracle访问数据字典来查找关于用户、模式对象和存储结构的信息

Oracle每次执行一个数据定义语句(DDL)时都会修改数据字典

任何Oracle用户都可以将数据字典做为数据库的只读参考信息

Oracle如何使用数据字典

数据字典中基表的数据对Oracle运行是至关重要的。因为只有Oracle可以写入和修改数据字典信息。Oracle在数据库升级或者降级时提供脚本来修改数据字典表。

注意:数据字典表的任何数据都不能被任何用户修改和删除。

数据库操作过程中,Oracle读取数据字典来确保模式对象存在和用户有足够的权限来访问它们。Oracle还不断的更新数据字典来反映数据库结构、审核、赋权和数据的变化。

例如,如果用户Kathy创建一个叫parts的表,然后数据字典中会增加新行来反映新的表、列、段、区段和Kathy在这表上拥有的权限。这些信息在下次查询这个字典视图时可以看到。

数据字典视图的公共同义词

Oracle对一些数据字典视图创建了公共同义词,所以用户可以很方便的访问他们。安全管理员还可以对模式对象创建公共同义词,这样就可以在系统范围内使用。用户要避免将他们自己的模式对象取名和公共同义词的名字相同。

针对数据字典快速访问的Cache

大部分的数据字典信息都保存在SGA的字典Cache中,因为Oracle运行过程中需要不停的访问数据字典来确认用户有权限访问模式对象和确定模式对象的状态。保存在的内存中的所有信息采用最近使用(LRU)算法。

解析信息也大部分保存在cache中。描述表和行的COMMENT行没有缓存,除非他们被经常访问。

其他的程序和数据字典

其他的Oracle产品可以引用已有的视图和创建它们自己的数据字典表或者视图。应用开发人员写的程序指向的数据字典应该使用公共同义词而不是底层表:因为在软件版本之间同义词基本保持不变。

如何使用数据字典

数据字典的视图可以被所有数据库用户引用。使用SQL语句可以访问数据字典。某些视图对于所有Oracle用户可用,其他的只对数据库管理员可用。

数据字典在数据库打开时总是可用。它们保存在总是在线的SYSTEM表空间上。

数据字典由一系列视图组成。在多数情况下,一个由三个视图组成的系列包含类似的信息,相互之间用他们的前缀区分:

表7-1 数据字典视图前缀

前缀

范围

USER

用户视图(用户模式相关的)

ALL

扩展用户视图(用户可以访问的)

DBA

数据库管理员的视图(针对所有用户模式的)

这一系列视图的列基本类似,除了:

USER前缀的视图通常不包含OWNER列。这一列隐含在对这个USER视图提交查询的用户上。

某些DBA视图包含对管理员有用的一些额外列信息

USER前缀的视图

典型数据库用户关心的视图就是前缀为USER的视图。这些视图:

指向用户自己的私有数据库环境,包含用户创建的模式对象信息、用户创建的权限等等。

只显示用户相关行

和其他视图的列类似,除了不包含隐含的OWNER列之外

返回ALL视图的一部分信息

可以有简单的PUBLIC同义词来方便使用

例如,下列查询返回了你的模式中包含的所有对象:

SELECT object_name,object_type FROM USER_OBJECTS;

ALL前缀视图

ALL前缀视图指向用户的数据库整个透视图。这个视图除了返回用户拥有的模式对象信息之外,还返回通过公开的或者隐含的分配给这个用户的权限和角色而能够访问的模式对象信息。例如,下面的查询返回你有权限访问的所有对象信息:

SELECT owner,object_name,object_type FROM ALL_OBJECTS;

DBA前缀视图

DBA前缀视图显示整个数据库的全景视图。这些视图不能创建同义词,因为DBA前缀视图只能被数据库管理员访问。因此,为查询DBA前缀视图,管理员必须在视图名字前加上它的所有者SYS,如下:

SELECT owner,object_name,object_type FROM SYS.DBA_OBJECTS;

Oracle推荐你通过阻止用户在数据字典上拥有系统访问权限来保护数据字典。如果你启动了数据字典保护(07_DICTIONARY_ACCESSIBILITY为false),然后访问SYS模式对象(数据字典)被限制为拥有SYS模式的用户。这些用户是SYS和以SYSDBA方式连接的用户。(似乎不是这样子,system也可以访问,拥有DBA权限就可以,因为DBA权限包含了SELECT ANY DICTIONARY权限)

DUAL

DUAL表是数据字典中的一个小表,Oracle和用户写的程序可以引用它来确保一个已知结果。这个表包含一列叫DUMMY,包含一行值为X。

动态性能视图

在Oracle运行期间,Oracle维护了一系列虚拟表来记录当前数据库的活动。这些表叫做动态性能表。

动态性能表不是真实的表,它们对于大多数用户来说不可访问。但是,数据库管理员可以查询、在表上创建视图、分配这些视图的权限给其他用户。这些视图有时候叫做固定视图,因为它们不能由数据库管理员修改和删除。

SYS拥有动态性能表;他们的名字以V_$开始。在此基础上创建视图,然后再在视图上创建公共同义词。这些同义词以V$开始。例如,V$DATAFILE视图包含数据库数据文件的信息,V$FIXED_TABLE视图包含数据库中所有动态性能表和视图的信息。

数据库对象元数据

DBMS_METADATA包提供了抽取全部数据库对象定义的接口。定义可以显示为XML或者SQL DDL格式。提供两种形式的接口:

可编程控制的灵活精密接口

特殊查询使用的简单接口

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多