Oracle学习笔记:数据字典
oracle数据字典
说起字典,下面让我来打个比方。我们读书写字,靠的是什么?你会说:字!那我问你,你所用的字又是什么呢?!这时,你只可能把字典(新华字典、康熙字典、说文解字等等)里的说法拿出来解释了。再进一步,你能随随便便就自己写一本字典,把每个字重新定义一下,就去用吗?显然不可能,要是那样,世界早乱套了!有意思的是:即使是字典关于每个字的解释还是用其他的字来解释的,这样循环解释下去.....????????这其实只是表现形式的一致,内容上绝不会死循环的,那就是铁定规定一些最最基础的语义不可再分的字为基础字!其他的不过是多种说法写法,不断被解释的新字而已!
就是这样:数据库里的数据字典就是就是解释数据库对象的对象,所以数据字典也叫元数据-metadata。他们不可以被用户增、删、改,只能查看使用。数据字典也有一些不可再分的字典基础表,其他的主要是视图、视图的视图、同义词而已,而我们能用的只能是这些视图、视图的视图、同义词。你问了“oracle为什么不让咱看基础表啊”?让你看,你看的懂吗?话又说回来,真让你看懂了,oracle不早关门了?! 这就是历史、兼容性、效率、管理、安全、习惯等问题了。
为什么oracle提供了这么多的数据字典啊?你说是如果你盖房子了,是用现成的砖、水泥、钢筋等等建筑材料好啊,还是先从一个老房子上拆零件好啊?但有时候有集成度较高的半成品也是很好的,可这个东西是没有标准去把握的,只好仁者见仁、智者见智了。oracle也是不断顺应民意不断改变的!
oracle的数据字典主要从两个角度去划分的
- static 和 dynamic 指的是字典信息内容是否实时更新,是否可以阶段重现或者是否可控。static主要适用于用户模式对象,在数据库open状态下使用;dynamic主要是数据库实例提供的内存结构信息,他们甚至没有database中存储的表结构,完全是oracle实例提供的内存表,而且可用的字典表在实例启动的不同阶段都是不同的。由此也引出了两者的可访问的方式有些不同:dynamic字典只能使用简单的 select where,要使用其他的东西,必须先转储位实体表;而 static 则没有这些限制!
- privileges :指权限、安全管理角度。 其中,static 的 dba_、all_、user_ 指的是从用户ID安全角度定义了内容访问许可范围,由此引出了大量的数据字典视图、同义词;类似的dynamic的v_$、v$、gv_$、gv$从实例ID安全角度定义了内容访问许可范围,也引出了大量的数据字典视图、同义词!
?
oracle数据字典的衍生关系
oracle程序fixed 表-->fixed 视图:如v$instance ----该层的fixed 表是对用户访问关闭的
oracle: x$表-->gv$视图-->v$视图 --该层是对用户访问关闭的
| |
gv_$视图 v_$视图
| |
gv$同义词 v$同义词
oracle:? *$基础表-->dba_*视图-->all_*视图-->user视图 ----该层的表是对用户访问关闭的
all_*视图、user视图实际上都是从*$基础表定义而来的,逻辑范围上如上
?
在进行数据访问时,Oracle 访问 VIEW优先,然后是同义词。
?
你绝对用的到的基础数据字典
- dictionary 【dict】 --列出所有的数据字典,oracle10g里有 1378 个!
- dict_columns --列出所有的数据字典表列
- v$fixed_table --列出所有的dynamic 表、视图,此处的 fixed 应理解为oracle内置的、固有的
- v$fixed_view_definition --列出所有dynamic视图的原始定义,此处的 fixed 应理解为oracle内置的、固有的
- v$process --oracle进程信息,addr
- v$session --oracle的会话信息,paddr对应v$process的addr,process指client的os的processid,*_sql_*,row_wait_row#,event等待事件描述,sql_trace
- v$sql --oracle缓存的sql
- v$sgainfo、v$sgastat、v$pgastat --sga的固定和动态组成情况
- v$sysem_parameter --oracle系统所有的初始化参数,不包含隐藏参数
- v$sysem_event --oracle实例的系统等等事件统计
- v$thread --当前lgwr线程信息,从中可以获得很多redo相关的信息。sequence#-1
- v$version、v$option --oracle的版本、组件情况
- v$open_cursor --oracle打开的所有cursor情况
- v$object_dependency --oracle系统运行时所有object的依赖情况
- v$bgprocess --oracle所有可能的后台进程,已经是否运行等情况
- v$datafile、v$datafile_header --oracle的datafile信息
- v$log、v$logfile、v$log_history --oracle的online redo 的信息及归档历史信息
其他常见的oracle数据字典(不断收集整理中......)
- v$session_event、v$session_wait、v$session_wait_class、v$session_wait_history --当前会话等待事件、汇总、历史统计
- v$sql、v$sql_plan、v$sql_trace、v$sql_text、v$sql_cursor、v$sqlstats、v$sqlarea --sql缓存中的sql文本
- v$process_memory --oracle进程的内存使用详细信息
- v$system_wait_class --oracle系统等待事件汇总
- v$database
- v$instance
- v$tablespace --从控制文件中获得的关于表空间的基本信息
- v$thread --lgwr线程信息,从中可以获得很多redo相关的信息