ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle数据字典

Oracle数据字典

原创 Linux操作系统 作者:realkid4 时间:2011-02-05 18:13:02 0 删除 编辑

 

数据字典是Oracle数据库安装之后,自动创建的一系列数据库对象。数据字典是Oracle数据库对象结构的元数据信息。熟悉和深入研究数据字典对象,可以很大程度的帮助我们了解Oracle内部机制。

 

Oracle字典视图包括四个层次,分别为X$内部表、基础数据字典表、数据字典视图和动态性能视图。

 

X$内部表

 

X$内部数据表的特征为以X$作为前缀,属于Oracle运行核心基础信息。X$数据表用于监控管理Oracle正常工作,维护核心功能。X$数据表含义、资源属于Oracle非公开保密信息。目前关于X$数据表的知识,都是诸多Oracle技术研究人员不懈努力探索的结果。X$数据表只能为SYS用户访问到,并且权限不能赋给其他用户。

 

 

SQL> show user;

User is "SYS"  //当前用户为sys用户

 

SQL> desc x$bh;

Object x$bh does not exist. //使用desc描述x$bh

 

SQL> select count(*) from x$bh; //但是直接查询数据表x$bh,是有结果的

 

  COUNT(*)

----------

      9967

 

SQL> grant select on x$bh to scott;

 

grant select on x$bh to scott  //不支持赋值

 

ORA-02030: 只能从固定的表/视图查询

 

SQL>

 

 

 

由于x$数据表的特殊性,给我们研究带来一些困难。比较常用的方法,是通过autotrace工具进行x$数据表作用的研究。

 

 

数据字典表

x$内部数据表的内容更倾向于维护Oracle实例正常工作,主要涉及到共享内存的管理和各个实例进程的工作。数据字典表($表)的内容用来记录数据表、索引、视图和数据文件等对象的内容。这部分字典表特征是以$结尾,如tab$、COL$和ts$等。

 

数据字典表是在数据库创建的时候,通过调用脚本创建。脚本在安装数据库之后,还保存在数据库服务器目录上。一般路径为$oracle_home/rdbms/admin,文件名为sql.bsq。sql.bsp是一个很重要的学习资源,其中定义了所有数据字典表的结构。

 

数据字典表是数据字典的基础,但是注意数据字典表的可读性较差。Oracle在设计数据字典表结构的时候,相对严格的遵守了范式规则,消除冗余。示例如下:

 

//以数据表空间tablespace数据字典为例

SQL> desc ts$;

Name          Type           Nullable Default Comments

------------- -------------- -------- ------- --------

TS#           NUMBER                                  

NAME          VARCHAR2(30)                             

OWNER#        NUMBER                                  

ONLINE$       NUMBER                                  

CONTENTS$     NUMBER                                  

UNDOFILE#     NUMBER         Y                        

UNDOBLOCK#    NUMBER         Y                        

 

SQL> select ts#, name,owner#, undofile# from ts$;

 

       TS# NAME                               OWNER#  UNDOFILE#

---------- ------------------------------ ---------- ----------

         0 SYSTEM                                  0          0

         1 UNDOTBS1                                0          0

         2 SYSAUX                                  0          0

         3 TEMP                                    0          0

         4 USERS                                   0          0

         5 UNDOTBS2                                0          0

         6 EXAMPLE                                 0          0

 

7 rows selected

//上面的结果中,owner#为一个数字类型的,不能直接使用,需要使用user$数据表进行解析;

 

SQL> select user#,name from user$ where user#=0;

 

     USER# NAME

---------- ------------------------------

         0 SYS

 

 

$数据字典是保存数据库结构的基础数据表。一般的DBA管理和信息获取,可以从后面的数据字典视图入手。

 

 

V$动态性能视图

 

v$动态视图是描述Oracle当前运行状态的一系列视图集合。这部分视图的特点是以v$开头,描述系统当前状态信息。常见常用的如v$session、v$session_wait(10g后,其中内容融入到v$session中)、v$lock和v$sysstat等。

 

v$视图传统上是代表系统当前状态的描述,也就是即时性视图。虽然可以描述当前系统中发生的瓶颈或者性能问题,但是当瓶颈接触之后,很难发现和分析过去一个事件点的系统状态和问题SQL。同时,如果需要对运行时间段的情况进行分析,采用时间段镜像snap技术也存在一些偶然性。

 

oracle10g开始,v$动态视图进入了一个新的时代,可以保存v$session的历史信息。ASH(Active Session History)技术就是每个一个间隔的时间段,保存当前动态视图的镜像进行保存,这些信息保存7天。借助ASH技术,Oracle提出了基于历史进行分析的AWR(Automatic Workload Report)报表。最后,从性能主动优化的出发点,提出了ADDM(Automatic Database Diagnostic Monitor)报告,提供智能化的数据库优化提示。这些方便的功能特性,全都是基于动态视图。

 

v$动态视图主要是针对SGA和数据库实例进程的显示。在这个过程中,Oracle使用了DMA(Direct Memory Access)技术,可以高效的获取这些分析数据。

 

 

数据字典视图

 

数据字典视图是建立在X$数据表和数据字典表之上的一个视图层。这个视图层还v$视图层一样,是在数据库创建的时候自动执行的脚本。这个脚本名为catalog.sql,位于$oracle_home/rdbms/admin里。

 

数据字典视图解决了数据字典表可读性差等一系列缺点,是适合方便使用的视图层。字典视图最大的一个特点就是清晰的前缀结构,分为dba、all、user三种。对于一个对象信息,如数据表,有dba_tables,all_tables和user_tables三个版本。

 

ü        user_对象视图:描述了当前用户schema下的对象;

ü        all_对象视图:描述了当前用户有权限访问到的所有对象的信息;

ü        dba_对象视图:包括了所有数据库对象的信息;

 

三层对象视图的视角在于owner的差异。通过不同的owner划分为不同的层次。user_视图中,是不包括owner列的。其他两类视图中,都有owner列表是对象的所属schema信息。

 

 

数据字典视图在Oracle角度上是公开的资源信息,所有的数据字典视图都可以在官方文档中找到对应的说明和解释。同时,这些视图都包括准确的comment信息。善于使用数据字典视图,可以帮助我们解决很多日常问题。

 

 

SQL> desc dba_tablespaces;

Name                     Type         Nullable Default Comments                                                             

------------------------ ------------ -------- ------- --------------------------------------------------------------------

TABLESPACE_NAME          VARCHAR2(30)                  Tablespace name                                         

BLOCK_SIZE               NUMBER                        Tablespace block size                                               

INITIAL_EXTENT           NUMBER       Y       Default initial extent size                                         

NEXT_EXTENT              NUMBER       Y         Default incremental extent size                                     

MIN_EXTENTS              NUMBER               Default minimum number of extents                                   

MAX_EXTENTS              NUMBER       Y       Default maximum number of extents                                   

PCT_INCREASE             NUMBER  Y   Default percent increase for extent size                            

MIN_EXTLEN               NUMBER       Y   Minimum extent size for the tablespace                              

STATUS                   VARCHAR2(9)  Y    Tablespace status: "ONLINE", "OFFLINE", or "READ ONLY"              

CONTENTS                 VARCHAR2(9)  Y       Tablespace contents: "PERMANENT", or "TEMPORARY"                     

LOGGING                  VARCHAR2(9)  Y      Default logging attribute                                           

FORCE_LOGGING            VARCHAR2(3)  Y      Tablespace force logging mode                                       

EXTENT_MANAGEMENT        VARCHAR2(10) Y    Extent management tracking: "DICTIONARY" or "LOCAL"                 

ALLOCATION_TYPE          VARCHAR2(9)  Y                Type of extent allocation in effect for this tablespace             

PLUGGED_IN               VARCHAR2(3)  Y                                                                                    

SEGMENT_SPACE_MANAGEMENT VARCHAR2(6)  Y                Segment space management tracking: "AUTO" or "MANUAL"               

DEF_TAB_COMPRESSION      VARCHAR2(8)  Y                Default compression enabled or not: "ENABLED" or "DISABLED"         

RETENTION                VARCHAR2(11) Y                Undo tablespace retention: "GUARANTEE", "NOGUARANTEE" or "NOT APPLY"

BIGFILE                  VARCHAR2(3)  Y                Bigfile tablespace indicator: "YES" or "NO"                         

 

SQL>

 

这里要说明一下,并不是所有的对象都是有三层对象视图,有时候all_层视图是被省略掉的。比如我们之前在闪回中介绍的dba_recyclebin,就没有对应的all_层视图。

 

SQL> desc all_recyclebin;

Object all_recyclebin does not exist.

 

SQL> desc all_tablespaces;

Object all_tablespaces does not exist.

 

 

这个问题的解释也是可以接受的,一些对象是不存在授权的关系的。而且站在管理上看,一些对象可能还是有管理员dba或者对象创建者owner进行管理比较合适。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17203031/viewspace-686814/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
求道~

注册时间:2010-11-30

  • 博文量
    545
  • 访问量
    7676833