oracle 数据字典

在看盖国强的DBA入门,进阶与诊断案例时,按照他的思路把oracle的数据字典进行总结:

1.数据字典的组成

a.内部RDBMS(X$)表

b.数据字典表

c.动态性能视图

d.数据字典视图

2.各个部份描述

a.内部表(X$),X$是数据库的核心部份,这些表用于跟踪内部数据信息,维护数据库正常运行,x$是加密命名的,是oracle公司的技术机密,oracle通过X$创建大量的视图,提供用户查询和管理数据库之用。oracle不充许sysdba以外的用户直接访问,显示授权是不被充许的。

由于这部份没有文档一般只知道几个就己经很不错了!!!

b.数据字典表(data dictionary table )用于存储表,索引,约束以及其他数据库结构信息,通常以$结尾,如user$,tab$,ts$.

在创建数据库时通过运行sql.bsq脚本来创建,每个试图深入学习oracle都应该研究一下该文件。

c1.动态性能视图

动态性能视图(dymamic performance view ) 记录数据库运行时信息和统计数据,大部份动态性能视图被实时更新以反映数据库的前当状态。oracle 对v$提供了详细的文档说明供开发人员和管理人员参考,是研究和管理数据库的重要依据。

在数据库启动时,oracle动态创建x$表,在此基础上oracle创建了GV$和V$视图,从oracle 8i开始引入GV$视图(global V$视图),除一些特例外,每一个V$视图都对应一个GV$视图。GV$视图的产生是为了满足ops(rac)环境的需要,在ops(rac)环境中,查询GV$视图返回所有实例的信息,每个V$视图是基于GV$视图,增加了inst_id列的where 条件建立

where inst_id = userenv('Instance');

我们可以通过以下视图进行查证:

select * from v$fixed_table;                      -- 用于查看内部表,数据字典表,动态性能视图
select * from v$fixed_view_definition;      -- 用于查看内部表,数据字典表,动态性能视图生成sql

我以于V$parameter 为例:

我用倒推的方式进行查找数据来源;V$<--GV$<--X$

                                              ..$(数据字典表)<--X$

下面我进行验证以上推断:

1.V$parameter如果生成的,通过查询v$fixed_view_definition

具体sql如下:

select  NUM , NAME , TYPE , VALUE , DISPLAY_VALUE, ISDEFAULT , ISSES_MODIFIABLE , ISSYS_MODIFIABLE , ISINSTANCE_MODIFIABLE, ISMODIFIED , ISADJUSTED , ISDEPRECATED, DESCRIPTION, UPDATE_COMMENT, HASH  from GV$PARAMETER where inst_id = USERENV('Instance')

2.GV$parameter如果生成的,通过查询v$fixed_view_definition

select x.inst_id,x.indx+1,ksppinm,ksppity,ksppstvl, ksppstdvl, ksppstdf,  decode(bitand(ksppiflg/256,1),1,'TRUE','FALSE'),  decode(bitand(ksppiflg/65536,3),1,'IMMEDIATE',2,'DEFERRED',                                  3,'IMMEDIATE','FALSE'),  decode(bitand(ksppiflg,4),4,'FALSE',                                     decode(bitand(ksppiflg/65536,3), 0, 'FALSE', 'TRUE')),     decode(bitand(ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE'),  decode(bitand(ksppstvf,2),2,'TRUE','FALSE'),  decode(bitand(ksppilrmflg/64, 1), 1, 'TRUE', 'FALSE'),  ksppdesc, ksppstcmnt, ksppihash  from x$ksppi x, x$ksppcv y where (x.indx = y.indx) and  ((translate(ksppinm,'_','#') not like '##%') and    ((translate(ksppinm,'_','#') not like '#%')      or (ksppstdf = 'FALSE') or      (bitand(ksppstvf,5) > 0)))

;

通过以上结论动态性视图生成的路径:V$<--GV$<--X$

c2:GV_$,V_$和V$,GV$同义词

在GV$和V$之后,oracle建立了GV_$和V_$视图,然后创建公用同义词,这些工作通过脚本catalog.sql实现的。
视图V_$和GV_$视图基于V$和GV$视图首先被创建,然后基于V_$和GV_$视图创建同义词。通过V_$视图,oracle
把V$视图也普通用户隔离,V_$视图的权限可以授予其他用户,而oracle不允许于V$视图直接授授权:

在进行数据访问时,oracle访问view优先,然后是同义词

d.数据字典视图

数据字典视图是在X$表和数据字典表之上创建的视图,在创建数据库时由catalog.sql脚本创建。
按前缀可分3类

user_类视图:包含了用户所拥有的相关对象信息
all_类视图:包含了用户有权限访问的所有对象信息
dba_类视图:包含了数据库所有相关对象信息

3.如何查找生成数据字典视图的相关sql:

a.查看该视图的以all_tables为例

select * from dba_objects t
where t.object_name = 'ALL_TABLES';

b.查看生成的sql

 

 

 

 其中那个long存储就是生成相应的sql语句。

 4.SQL语句中oracle对于对象名的解析顺序

1.oracle首先查看在发出命令的用户模式中是否存在表或视图
2.如果表或视图不存在,oracle检查私有同义词是否存在
3.如查私有同义词存在,将使用这个同义词所引用的对象
4.如果私有同义词不存在,检查同名的公共同义词是否存在
5.如果公共同义词存,将使用这个同义词所引用的对象
6.如果公共同义词不存在,oracle返回信息"ORA-00942 table or view does not exist"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值