数据字典
数据字典是由Oracle服务器创建和维护的一组只读的系统表,它存放了有关数据库和数据库对象的信息,Oracle服务器依赖这些信息来管理和维护Oracle数据库。
数据字典分为两大类:一种是基表,另一种是数据字典视图。
Oracle服务器在数据库创建时自动生成基表,在任何数据库中,基表都是被最先创建的对象。由于基表中所存的数据过于复杂,因此这些基表很少直接被访问。数据字典视图则是把
数据字典基表中的信息转换为人们较为容易理解的形式,它们包含了用户名、用户的权限、对象名、约束和审计等方面的信息。
数据字典中的信息
数据字典中存储了如下的数据库信息:
- 数据库的逻辑结构和物理结构。如表空间和数据文件的信息
- 所有数据库对象定义的信息。这些对象包括表、索引、视图、序列号、同义词、过程、函数、软件包和触发器等。
- 所有数据库对象的磁盘空间分配信息。如对象所分配的磁盘空间和当前正在使用的磁盘空间。
- Oracle用户名。
- 每个用户所授予的权限和角色。
- 完整性约束的信息。
- 列的默认值。
- 审计信息。
数据字典的操作和使用
数据字典主要是由Oracle服务器来使用的,包括从数据字典中获取信息和及时修改相应数据字典信息。
可以修改Oracle服务器数据字典的SQL语句:
- DDL语句。如增加或减少表空间,增加或减少用户。
- DCL语句。如授予用户权限、回收用户权限等。
- 某些DML语句也可能间接地引起Oracle服务器修改数据字典。如引起表的磁盘空间的扩展的插入(INSERT)或修改(UPDATE)语句。
当数据管理员或用户使用DDL或DCL语句时,Oracle服务器都要将相关的信息记录到数据字典中。
但是,任何用户包括数据库管理员(DBA)都不能直接使用DML语句修改数据字典中的内容,只能通过访问数据字典(视图)来得到数据库相关信息。
数据字典视图
数据字典视图主要包括三大类,它们分别用前缀来区别,其前缀分别为USER、ALL和DBA。
- USER_* :有关用户所拥有的对象的信息。即用户自己创建的对象的信息。
- ALL_* :有关用户可以访问的对象的信息。即用户自己创建的对象的信息及授权给PUBLIC的帐户用户所拥有的对象的信息。
- DBA_* :有关整个数据库中对象的信息。
这里的*可以为TABLES、INDEXES、VIEWS、OBJECTS等。
查看这类数据字典视图的结构:
desc user_tables;
desc all_tables;
desc dba_tables;
可以看出,这三类数据字典视图的列几乎是相同的,只是以前缀为ALL和DBA开始的数据字典视图中比USER中多了一列OWNER。
其他的字典视图中主要的是V$视图,之所以这样叫是因为他们都是以V$或GV$开头的。由于当数据库运行的时候它们会不断进行更新,所以称它们为动态数据字典。
V$视图是基于X$虚拟视图的。V$视图是SYS用户所拥有的,在缺省状况下,只有SYS用户和拥有DBA系统权限的用户可以看到所有的视图,没有DBA权限的用户可以看
到USER_*和ALL_*,但不能看到DBA_*。