数据字典是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/