oracle数据字典

来源:互联网 发布:布丁动漫软件下载 编辑:程序博客网 时间:2024/05/18 15:06
 

数据字典是Oracle数据库的核心组件,它由一系列只读的数据字典表和数据字典视图组成。数据字典表中记录了数据库的系统信息,如方案对象的信息,例程运行的性能信息(如例程的状态,SGA区的信息)。数据字典表达所有者是SYS用户,其数据字典表和数据字典视图都被保存在SYSTEM表空间中。所以,为了性能和安全的原因,Oracle建议不要在SYSTEM表空间中创建其它方案对象。

为了方便使用,数据字典中的信息通过表和视图的方式组织。数据字典的组成包括数据字典表和数据字典视图两部分。数据字典表中的所有信息实际上都是保存在数据字典表中的。数据字典表中存储的信息通常都是经过加密处理的。数据字典表属于SYS用户,通过在创建数据库时自动运行SQL.BSQ脚本来创建数据字典表。大部分数据字典表的名称中都包含$等这样的特殊符号。

数据字典主要保存如下信息:
1)各种方案对象的定义信息,如表,视图,索引,同义词,绪论,存储过程,函数,包,触发器和各种对象。
2)存储空间的分配信息,如为某个对象分配了多少存储空间,该对象使用了多少存储空间。
3)安全信息,如账户,权限,角色,完整性约束信息。
4)例程运行时代性能和统计信息。
5)其他数据库本身的基本信息。

Oracle数据字典内容包括:

1)数据库中所有模式对象的信息,如表、视图、簇、及索引等。
2)分配多少空间,当前使用了多少空间等。
3)列的缺省值。
4)约束信息的完整性。
5)Oracle用户的名字。
6)用户及角色被授予的权限。
7)用户访问或使用的审计信息。
8)其它产生的数据库信息。

Oracle数据字典的主要用途是:

1)Oracle通过查询数据字典表或数据字典视图来获取有关用户,方案对象。对象的定义信息以及其他存储结构的信息,以便确认权限,方案对象的存在性和正确性。
2)在每次执行DDL语句修改方案对象和对象后,Oracle都在数据字典中记录下所做的修改。
3)用户可以从数据字典的只读视图中,获取各种与方案对象和对象有关的信息。
4)DBA可以从数据字典的动态性能视图中,监视例程的运行状态,为性能调整提供依据。

数据库数据字典是一组表和视图结构。它们存放在SYSTEM表空间中
当用户在对数据库中的数据进行操作时遇到困难就可以访问数据字典来查看详细的信息。
用户可以用SQL语句访问数据库数据字典。

2,Oracle中的数据字典有静态和动态之分。
1,静态数据字典>主要是在用户访问数据字典时不会发生改变的,
例如某用户创建的表
2,动态数据字典>是依赖数据库运行的性能的,反映数据库运行的一些内在信息,所以在访问这类数据字典时往往不是一成不变的。

静态数据字典:这类数据字典主要是由表和视图组成
数据字典中的表是不能直接被访问的,但是可以访问Oracle数据字典中的视图。
静态数据字典中的视图分为三类,它们分别由三个前缀够成:user_*、 all_*、 dba_*

user_*
该视图存储了关于当前用户所拥有的对象的信息。(即所有在该用户模式下的对象)

all_*
该试图存储了当前用户能够访问的对象的信息。(与user_*相比,all_* 并不需要拥有该对象,只需要具有访问该对象的权限即可)

dba_*
该视图存储了数据库中所有对象的信息。(前提是当前用户具有访问这些数据库的权限,一般来说必须具有管理员权限)

从上面的描述可以看出,三者之间存储的数据肯定会有重叠,其实它们除了访问范围的不同以外(因为权限不一样,所以访问对象的范围不一样),其他均具有一致性。具体来说,由于数据字典视图是由SYS(系统用户)所拥有的,所以在却省情况下,只有SYS和拥有DBA系统权限的用户可以看到所有的视图。没有 DBA权限的用户只能看到user_*和all_*视。如果没有被授予相关的SELECT权限的话,他们是不能看到 dba_*视图的。

由于三者具有相似性,下面以user_为例介绍几个常用的静态视图:
1)user_users视图:主要描述当前用户的信息,主要包括当前用户名、帐户id、帐户状态、表空间名、创建时间等。例如执行下列命令即可返回这些信息。select * from user_users
2)user_tables视图:主要描述当前用户拥有的所有表的信息,主要包括表名、表空间名、簇名等。通过此视图可以清楚了解当前用户可以操作的表有哪些。执行命令为:select * from user_tables
3)user_objects视图:主要描述当前用户拥有的所有对象的信息,对象包括表、视图、存储过程、触发器、包、索引、序列等。该视图比 user_tables视图更加全面。例如, 需要获取一个名为“package1”的对象类型和其状态的信息,可以执行下面命令:
select object_type,status
from user_objects
where object_name=upper(‘package1’);
这里需注意upper的使用,数据字典里的所有对象均为大写形式,而PL/SQL里不是大小写敏感的,所以在实际操作中一定要注意大小写匹配。
4)user_tab_privs视图:该视图主要是存储当前用户下对所有表的权限信息。比如,为了了解当前用户对table1的权限信息,可以执行如下命令:select * from user_tab_privs where table_name=upper('table1')
了解了当前用户对该表的权限之后就可以清楚的知道,哪些操作可以执行,哪些操作不能执行。
前面的视图均为user_开头的,其实all_开头的也完全是一样的,只是列出来的信息是当前用户可以访问的对象而不是当前用户拥有的对象。对于dba_开头的需要管理员权限,其他用法也完全一样,这里就不再赘述了。

动态数据字典
Oracle包含了一些潜在的由系统管理员如SYS维护的表和视图,由于当数据库运行的时候它们会不断进行更新,所以称它们为动态数据字典(或者是动态性能视图)。这些视图提供了关于内存和磁盘的运行情况,所以我们只能对其进行只读访问而不能修改它们。Oracle中这些动态性能视图都是以v$开头的视图,比如v$access。下面就几个主要的动态性能视图进行介绍。
1)v$access该视图显示数据库中锁定的数据库对象以及访问这些对象的会话对象(session对象)。
运行如下命令:select * from v$access
结果如下:(因记录较多,故这里只是节选了部分记录)
SID
OWNER OBJECT TYPE
27 DKH V$ACCESS CURSOR
27 PUBLIC V$ACCESS SYNONYM
27 SYS DBMS_APPLICATION_INFO PACKAGE
27 SYS GV$ACCESS VIEW
2)v$session该视图列出当前会话的详细信息。由于该视图字段较多,这里就不列详细字段,为了解详细信息,可以直接在sql*plus命令行下键入:desc v$session即可。
3)v$active_instance该视图主要描述当前数据库下的活动的实例的信息。依然可以使用select语句来观察该信息。
4)v$context该视图列出当前会话的属性信息。比如命名空间、属性值等。

原创粉丝点击