13->oracle的数字字典

    数据字典系统表,保存在system表空间中。
由表和视图组成,由服务器在安装数据库时自动创建,用户不可以直接修改数据库字典,在执行DDL语句时,oracle会自动修改。
记录一些表和视图(只读的),新建的表不要和这空间建在一起(9i以前的版本新用户建的表默认表空间为system,注意修改)

查询数据字典:
select * from dictionary
主要四部分:
1,内部RDBMS表:x$……
2,数据字典表:……$
3,动态性能视图:gv$……,v$……
4,数据字典视图:user_……,all_……,dba_……
一,内部RDBMS表 x$……,例如:x$kvit,x$bh,x$ksmsp,x$ksppi和x$ksppcv
核心部分,用于跟踪内部数据库信息,维持DB的正常运行。
是加密命名的,不允许sysdba以外的用户直接访问,显示授权不被允许。最好不要修改.
x$kvit=Kernel Layer Performance Layer V Information tables Transitory Instance parameter
数据库启动时,动态创建x$……
二,数据字典表 ……$,如tab$,obj$,ts$……
--用来存储表、索引、约束以及其他数据库结构的信息。
--创建数据库时通过脚本sql.bsq来创建,脚本:$oracle_home/rdbms/admin/sql.bsq

三,动态性能视图 gv$……,v$……,如V$parameter
--记录了DB运行时信息和统计数据,大部分动态性能视图被实时更新以反映DB当前状态。
--数据库创建时建立的。
--只有sysdba可以直接访问。
--》查看表v$fixed_view_definition(***),可以查看GV$和V$视图的创建语句。(oracle提供一些特殊视图,用来记录其他视图的创建方式,v$fixed_view_definition就是其中之一) 也可以通过 v$fixed_table查看
--select view_definition from v$fixed_view_definition where view_name='V$FIXED_TABLE';
-》gv$……=Global V$,在X$……基础上创建,是为了满足OPS环境(多个实例)的需要面产生的,可以返回多个实例的信息。
V$……,在GV$……基础上创建,只返回当前实例的信息。定义语句都带有:where inst_id =USERENV('Instance')
-》GV$和V$之后,oracle建立了GV_$和V_$视图,又为这些视图建立了公用同义词。由脚本catalog.sql实现的,脚本 :$oracle_home/rdbms/admin/catalog.sql
create or replace view v_$process as select * from v$process;
create or replace public synonym v$process for v_$process;

create or replace view gv_$process as select * from gv$process;
create or replace public synonym gv$process for gv_$process;

-->可以看出:
V$(视图)-->V_$(视图)-->V$(公用同义词)
GV$(视图)-->GV_$(视图)-->GV$(公用同义词)
这样做的目的:通过V_$和GV_$,oracle把V$视图和GV视图和普通用户隔离开来。(oracle允许V_$视图权限可以授权给其他用户,但不允许任何对于V$视图的直接授权。)
所以,在非Sys用户下,我们访问的都是同义词,而不是V$视图或GV视图。

--oracle访问数据顺序:view-->同义词。
四,数据库字典视图
--是在X$表和数据字典表之上建立的视图。
--创建数据库时由脚本catalog.sql创建。脚本 :$oracle_home/rdbms/admin/catalog.sql
--按前缀不同,作用范围的分为三类:
1、以user开头的数据字典: 包含当前用户所拥有的相关对象信息。--能够查到对象的所有者是当前用户的所有对象
select table_name from user_tables;  (scott) 5
2、以all开头的数据字典:  包含当前用户有权限访问的所有对象的信息。--能够查到所有当前用户有权限访问的对象
select table_name from all_tables;  (scott) 96
3、以dba开头的数据字典:  包含数据库所有相关对象的信息。--只能是有dba权限的用户查询,能查到数据库中所有对象
select table_name from dba_tables (sys system)






原文地址:https://www.cnblogs.com/liaomin416100569/p/9331271.html