Oracle数据字典

数据字典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> descts$;

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/26026406/viewspace-709306/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26026406/viewspace-709306/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值