本章开始学习数据字典相关知识
oracle通过数据字典来管理和展现数据库信息。
3.1 数据字典概述
数据字典是oracle数据库的一个重要组成部分,是元数据的存储地点。oracle rdbms使用数据字典记录和管理对象信息和安全信息等,用户和数据库系统管理员可以通过数据字典来获取数据库相关信息。
数据字典包含以下内容:
(1)所有数据库schema对象的定义(表、视图、索引、聚簇、同义词、序列、过程、函数、包、触发器等);
(2)数据库的空间分配和使用情况;
(3)字段的缺省值;
(4)完整性约束信息;
(5)oracle用户名称、角色、权限等信息;
(6)审计信息;
(7)其他数据库信息。
通常所说的数据字典由4个部分组成:内部RDBMS(X$)表、数据字典表、动态性能(V$)视图和数据字典视图。
3.2 内部RDBMS(X$)表
X$是oracle数据库的核心部分,这些表用于跟踪内部数据库信息,维持数据库的正常运行。
X$是oracle数据库的运行基础,在数据库启动时由oracle应用程序动态创建。
3.3 数据字典表
数据字典表用以存储表、索引、约束以及其他数据库结构的信息,这些对象通常以$结尾(如tab$、obj$、ts$等),在创建数据库的时候通过运行sql.bsq脚本来创建。
3.4 动态性能视图
动态性能(V$)视图记录了数据库运行时信息和统计数据,大部分动态性能视图被实时更新以反映数据库当前状态。
3.4.1 GV$和V$视图
在数据库启动时,oracle动态创建X$表,在此基础上,oracle创建了GV$和V$视图。查询GV$视图返回所有实例信息,而每个V$视图是基于GV$视图,增加了inst_id列的where条件限制建立,指包含当前连接实例信息。
oracle提供了一些特殊视图用以记录其他视图的创建方式,v$fixed_view_definition就是其中之一。
3.4.2 GV_$、V_$视图和V$、GV$同义词
在GV$和V$之后,oracle建立了GV_$和V_$视图,随后为这些视图建立了公用同义词。这些工作都是通过catalog.sql脚本(该脚本位于$ORACLE_HOME/rdbms/admin/目录下)实现的。
在进行数据访问时,oracle访问view优先,然后是同义词。
3.4.3 数据字典视图
数据字典视图是在X$表和数据字典表之上创建的视图,在创建数据库时由catalog.sql脚本创建。
按照前缀的不同,数据字典视图通常被分为以下三类:
(1)USER_类视图:包含了用户所拥有的相关对象信息;
(2)ALL_类视图:包含了用户有权限访问的所有对象的信息;
(3)DBA_类视图:包含了数据库所有相关对象的信息。
3.4.4 进一步的说明
oracle的X$表信息可以从v$fixed_table中查到。
3.5 最后的验证
最后通过v$aprameter视图来追踪数据库的架构。
3.5.1 v$parameter的结构
select view_definition from v$fixed_view_definition a where a.view_name='V$PARAMETER';
可以看到v$parameter是由gv$parameter创建的,gv$parameter则由X$创建的。
3.5.2 视图还是同义词
访问的是同义词,除sys用户以外,其他用户不能查询V$视图,V$视图也不能被授权给其他用户。
3.5.3 oracle如何通过同义词定位对象
事件10046
alter session set events '10046 trace name context forever,level 12';
最后总结一下sql语句中oracle对于对象名的解析顺序,具体如下(写太多了简化一下):
用户是否存在表或视图>私有同义词是否存在>公有同义词是否存在>报错不存在
第三章完