oracle数据字典

  说起字典,下面让我来打个比方。我们读书写字,靠的是什么?你会说:字!那我问你,你所用的字又是什么呢?!这时,你只可能把字典(新华字典、康熙字典、说文解字等等)里的说法拿出来解释了。再进一步,你能随随便便就自己写一本字典,把每个字重新定义一下,就去用吗?显然不可能,要是那样,世界早乱套了!有意思的是:即使是字典关于每个字的解释还是用其他的字来解释的,这样循环解释下去.....????????这其实只是表现形式的一致,内容上绝不会死循环的,那就是铁定规定一些最最基础的语义不可再分的字为基础字!其他的不过是多种说法写法,不断被解释的新字而已!

  就是这样:数据库里的数据字典就是就是解释数据库对象的对象,所以数据字典也叫元数据-metadata。他们不可以被用户增、删、改,只能查看使用。数据字典也有一些不可再分的字典基础表,其他的主要是视图、视图的视图、同义词而已,而我们能用的只能是这些视图、视图的视图、同义词。你问了“oracle为什么不让咱看基础表啊”?让你看,你看的懂吗?话又说回来,真让你看懂了,oracle不早关门了?! 这就是历史、兼容性、效率、管理、安全、习惯等问题了。

  为什么oracle提供了这么多的数据字典啊?你说是如果你盖房子了,是用现成的砖、水泥、钢筋等等建筑材料好啊,还是先从一个老房子上拆零件好啊?但有时候有集成度较高的半成品也是很好的,可这个东西是没有标准去把握的,只好仁者见仁、智者见智了。oracle也是不断顺应民意不断改变的!



oracle的数据字典主要从两个角度去划分的

  1. static 和 dynamic 指的是字典信息内容是否实时更新,是否可以阶段重现或者是否可控。static主要适用于用户模式对象,在数据库open状态下使用;dynamic主要是数据库实例提供的内存结构信息,他们甚至没有database中存储的表结构,完全是oracle实例提供的内存表,而且可用的字典表在实例启动的不同阶段都是不同的。由此也引出了两者的可访问的方式有些不同:dynamic字典只能使用简单的 select where,要使用其他的东西,必须先转储位实体表;而 static 则没有这些限制!
  2. 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优先,然后是同义词。


 

你绝对用的到的基础数据字典

  1. dictionary 【dict】  --列出所有的数据字典,oracle10g里有 1378 个!
  2. dict_columns  --列出所有的数据字典表列
  3. v$fixed_table  --列出所有的dynamic 表、视图,此处的 fixed 应理解为oracle内置的、固有的
  4. v$fixed_view_definition  --列出所有dynamic视图的原始定义,此处的 fixed 应理解为oracle内置的、固有的
  5. v$process  --oracle进程信息,addr
  6. v$session  --oracle的会话信息,paddr对应v$process的addr,process指client的os的processid,*_sql_*,row_wait_row#,event等待事件描述,sql_trace
  7. v$sql  --oracle缓存的sql
  8. v$sgainfo、v$sgastat、v$pgastat  --sga的固定和动态组成情况
  9. v$sysem_parameter  --oracle系统所有的初始化参数,不包含隐藏参数
  10. v$sysem_event  --oracle实例的系统等等事件统计
  11. v$thread  --当前lgwr线程信息,从中可以获得很多redo相关的信息。sequence#-1
  12. v$version、v$option  --oracle的版本、组件情况
  13. v$open_cursor  --oracle打开的所有cursor情况
  14. v$object_dependency  --oracle系统运行时所有object的依赖情况
  15. v$bgprocess  --oracle所有可能的后台进程,已经是否运行等情况
  16. v$datafile、v$datafile_header  --oracle的datafile信息
  17. v$log、v$logfile、v$log_history  --oracle的online redo 的信息及归档历史信息




其他常见的oracle数据字典(不断收集整理中......)

  1. v$session_event、v$session_wait、v$session_wait_class、v$session_wait_history  --当前会话等待事件、汇总、历史统计
  2. v$sql、v$sql_plan、v$sql_trace、v$sql_text、v$sql_cursor、v$sqlstats、v$sqlarea  --sql缓存中的sql文本
  3. v$process_memory  --oracle进程的内存使用详细信息
  4. v$system_wait_class  --oracle系统等待事件汇总
  5. v$database  
  6. v$instance
  7. v$tablespace  --从控制文件中获得的关于表空间的基本信息
  8. v$thread  --lgwr线程信息,从中可以获得很多redo相关的信息