Oracle 資料字典及註釋查詢

bitifi發表於2015-12-18

 Oracle透過資料字典來管理和展現資料庫資訊,資料字典通常儲存資料庫的後設資料,是資料庫的資料庫,其中儲存的資訊至關重要。正確理解這部分內容有助於提高大家對Oracle資料庫的認知。

資料字典有四類

1內部RDBMSX$)表

 X$表是Oracle資料庫的核心部分,這些表用於跟蹤內部資料庫資訊,維持資料庫的正常執行,X$表是加密命名的,而且Oracle不做文件說明,這部分知識是ORACLE公司的技術機密,ORACLE公司透過這些X$建立起其它大量檢視提供使用者查詢管理資料庫之用。
       
內部X$表可以用v$fixed_table來查詢

2資料字典表

資料字典表裡的資料是Oracle系統存放的系統資料,而普通表存放的是使用者的資料。為了方便的區別這些表,這些表的名字都是用"$"結尾,這些表屬於SYS使用者。

資料字典表由$ORACLE_HOME/rdbms/admin/sql.bsq 指令碼建立, 這個指令碼里又呼叫了其他的指令碼來建立這些資料字典表。 在那些建立指令碼里有基表的建立SQL

Oracle 對資料字典表的說明:

These underlying tables store information about the database. Only Oracle Database should write to and read these tables. Users rarely access the base tables directly because they are normalized and most data is stored in a cryptic format.

這些資料字典表,只有Oracle 能夠進行讀寫。

SYS使用者下的這些資料字典表,存放在system 表空間下面,表名都用"$"結尾,為了便於使用者對資料字典表的查詢, Oracle對這些資料字典都分別建立了使用者檢視,這樣即容易記住,還隱藏了資料字典表表之間的關係,Oracle針對這些物件的範圍,分別把檢視命名為DBA_XXXX, ALL_XXXXUSER_XXXX

查詢資料庫中的字典表

select * from dba_tables where owner='SYS' and tablespace_name='SYSTEM'

註釋查詢:

官方文件沒有註釋,查詢註釋可以透過查詢建立指令碼來獲得

 

[oracle@oracledb ~]$ cd $ORACLE_HOME/rdbms/admin/

[oracle@oracledb admin]$ ls -l *.bsq

-rw-r--r-- 1 oracle oinstall   25905 Mar 19  2009 daw.bsq

-rw-r--r-- 1 oracle oinstall   91730 Jul 22  2011 dcore.bsq

-rw-r--r-- 1 oracle oinstall    2832 Oct 23  2006 ddm.bsq

-rw-r--r-- 1 oracle oinstall     674 Jul 14  2008 ddst.bsq

-rw-r--r-- 1 oracle oinstall   17993 Feb 23  2010 denv.bsq

-rw-r--r-- 1 oracle oinstall    1364 Oct 31  2005 dexttab.bsq

-rw-r--r-- 1 oracle oinstall    4937 Oct 31  2005 dfmap.bsq

-rw-r--r-- 1 oracle oinstall     728 Oct 31  2005 djava.bsq

-rw-r--r-- 1 oracle oinstall   33697 Apr 26  2011 dlmnr.bsq

-rw-r--r-- 1 oracle oinstall    9632 Dec  8  2009 dmanage.bsq

-rw-r--r-- 1 oracle oinstall   25509 Jun  8  2007 dobj.bsq

-rw-r--r-- 1 oracle oinstall   32867 May 18  2011 doptim.bsq

-rw-r--r-- 1 oracle oinstall   47093 Nov 12  2009 dpart.bsq

-rw-r--r-- 1 oracle oinstall   16679 Jan  8  2007 dplsql.bsq

-rw-r--r-- 1 oracle oinstall   17811 Oct  9  2009 drac.bsq

-rw-r--r-- 1 oracle oinstall  128181 May 13  2011 drep.bsq

-rw-r--r-- 1 oracle oinstall  139898 Jun 11  2010 dsec.bsq

-rw-r--r-- 1 oracle oinstall   17751 Mar  9  2009 dsqlddl.bsq

-rw-r--r-- 1 oracle oinstall   19958 Jul 30  2008 dsummgt.bsq

-rw-r--r-- 1 oracle oinstall   15830 Apr 29  2011 dtools.bsq

-rw-r--r-- 1 oracle oinstall    5474 Oct 31  2006 dtxnspc.bsq

-rw-r--r-- 1 oracle oinstall 2495314 Sep 18  2011 recover.bsq

-rw-r--r-- 1 oracle oinstall   53130 Jul 14  2008 sql.bsq [oracle@oracledb admin]$

[oracle@oracledb admin]$ find . -name "*.bsq" | xargs grep "create table obj"

./dmanage.bsq:create table object_usage                         /* object usage statistics */

./dcore.bsq:create table obj$                                            /* object table */

./dcore.bsq:create table objerror$

./dcore.bsq:create table objauth$                           /* table authorization table */

./dcore.bsq:create table objpriv$                       /* privileges granted to objects */

[oracle@oracledb admin]$ more dcore.bsq

REM   sanagara  07/18/11 - add spare columns to sqlerror$

REM   yifeng    04/04/10 - add comments to opqtype$ flags

REM   gravipat  10/15/09 - add sqlerror$

REM   rmacnico  04/14/09 - add comments for seg$, ts$ flag bits

REM   shvenugo  03/19/09 - add comments to opqtype$ flags

REM   mbastawa  04/06/08 - add result cache for tab$.property

REM   schakrab  03/24/08 - add comments on obj$ flag

Rem   mziauddi  01/25/08 - use spare2+spare3 of cdef$ for constraint ddl SCN

REM   ramekuma  03/13/08 - bug-6865413: add comments on i_obj2 index

REM   jaeblee   02/06/08 - add i_syn2

REM   bvaranas  01/30/08 - project 25274: Add deferred_stg$

REM   ssonawan  07/13/07 - bug-6020455: add comments on user$ table

REM   achoi     04/20/07 - add i_obj5

REM   sfeinste  04/09/07 - fix comments for type# column of obj$

REM   wechen    01/22/07 - fix comments for type# column of obj$

REM   krajaman  03/01/07 - add objerror$

REM   achoi     11/07/06 - obj$.spare3 stores base user#

REM   jaeblee   10/26/06 - moved edition$ creation from denv.bsq

REM   jiyang    09/07/06 - add comments for audit vault trigger

REM   akruglik  09/01/06 - replace CMV$ with EV$, CMVCOL$ with EVCOL$ +

REM                        rename app_edition# with edition_obj#

REM   wechen    07/31/06 - add comments for type# column of obj$

REM   akruglik  04/07/06 - add EV$ and EVCOL$

REM   suelee    02/16/06 - bug 4956995 - moved objauth$ et al from dsec.bsq

REM   achoi     12/15/05 - tab$.trigflag 0x200000 indicates read-only table

REM   vmarwah   11/08/05 - Versioning Enabled flag in tab$

REM   jklein    08/01/05 - creation

create tablespace SYSTEM datafile "D_DBFN"

  "D_DSTG" online

/

create rollback segment SYSTEM tablespace SYSTEM

  storage (initial 50K next 50K)

/

create cluster c_obj# (obj# number)

  pctfree 5 size 800                           /* don't waste too much space */

  /* A table of 32 cols, 2 index, 2 col per index requires about 2K.

   * A table of 10 cols, 2 index, 2 col per index requires about 750.

   */

  storage (initial 130K next 200k maxextents unlimited pctincrease 0)

  /* avoid space management during IOR I */

/

create index i_obj# on cluster c_obj#

/

REM NOTE

REM Logminer/Streams uses contents of this table.

REM Please do not reuse any flags without verifying the impact of your

REM changes on inter-op. 

create table tab$                                             /* table table */

( obj#          number not null,                            /* object number */

  /* DO NOT CREATE INDEX ON DATAOBJ#  AS IT WILL BE UPDATED IN A SPACE

   * TRANSACTION DURING TRUNCATE */

  dataobj#      number,                          /* data layer object number */

  ts#           number not null,                        /* tablespace number */

  file#         number not null,               /* segment header file number */

  block#        number not null,              /* segment header block number */

  bobj#         number,                /* base object number (cluster / iot) */

/create table obj

...skipping

REM Please do not reuse any flags without verifying the impact of your

REM changes on inter-op. 

create table obj$                                            /* object table */

( obj#          number not null,                            /* object number */

  dataobj#      number,                          /* data layer object number */

  owner#        number not null,                        /* owner user number */

  name          varchar2("M_IDEN") not null,                  /* object name */

  namespace     number not null,         /* namespace of object (see KQD.H): */

 /* 1 = TABLE/PROCEDURE/TYPE, 2 = BODY, 3 = TRIGGER, 4 = INDEX, 5 = CLUSTER, */

                                                  /* 8 = LOB, 9 = DIRECTORY, */

  /* 10 = QUEUE, 11 = REPLICATION OBJECT GROUP, 12 = REPLICATION PROPAGATOR, */

                                     /* 13 = JAVA SOURCE, 14 = JAVA RESOURCE */

                                                 /* 58 = (Data Mining) MODEL */

  subname       varchar2("M_IDEN"),               /* subordinate to the name */

  type#         number not null,                 /* object type (see KQD.H): */

  /* 1 = INDEX, 2 = TABLE, 3 = CLUSTER, 4 = VIEW, 5 = SYNONYM, 6 = SEQUENCE, */

             /* 7 = PROCEDURE, 8 = FUNCTION, 9 = PACKAGE, 10 = NON-EXISTENT, */

              /* 11 = PACKAGE BODY, 12 = TRIGGER, 13 = TYPE, 14 = TYPE BODY, */

      /* 19 = TABLE PARTITION, 20 = INDEX PARTITION, 21 = LOB, 22 = LIBRARY, */

                                             /* 23 = DIRECTORY , 24 = QUEUE, */

    /* 25 = IOT, 26 = REPLICATION OBJECT GROUP, 27 = REPLICATION PROPAGATOR, */

    /* 28 = JAVA SOURCE, 29 = JAVA CLASS, 30 = JAVA RESOURCE, 31 = JAVA JAR, */

                 /* 32 = INDEXTYPE, 33 = OPERATOR , 34 = TABLE SUBPARTITION, */

                                                  /* 35 = INDEX SUBPARTITION */

                                                 /* 82 = (Data Mining) MODEL */

                                /* 92 = OLAP CUBE DIMENSION,  93 = OLAP CUBE */

                   /* 94 = OLAP MEASURE FOLDER, 95 = OLAP CUBE BUILD PROCESS */

  ctime         date not null,                       /* object creation time */

  mtime         date not null,                      /* DDL modification time */

  stime         date not null,          /* specification timestamp (version) */

  status        number not null,            /* status of object (see KQD.H): */

                                     /* 1 = VALID/AUTHORIZED WITHOUT ERRORS, */

                          /* 2 = VALID/AUTHORIZED WITH AUTHORIZATION ERRORS, */

                            /* 3 = VALID/AUTHORIZED WITH COMPILATION ERRORS, */

                         /* 4 = VALID/UNAUTHORIZED, 5 = INVALID/UNAUTHORIZED */

  remoteowner   varchar2("M_IDEN"),     /* remote owner name (remote object) */

  linkname      varchar2("M_XDBI"),             /* link name (remote object) */

  flags         number,               /* 0x01 = extent map checking required */

                                      /* 0x02 = temporary object             */

                                      /* 0x04 = system generated object      */

                                      /* 0x08 = unbound (invoker's rights)   */

                                      /* 0x10 = secondary object             */

                                      /* 0x20 = in-memory temp table         */

                                      /* 0x80 = dropped table (RecycleBin)   */

                                      /* 0x100 = synonym VPD policies        */

                                      /* 0x200 = synonym VPD groups          */

                                      /* 0x400 = synonym VPD context         */

                                      /* 0x4000 = nested table partition     */

  oid$          raw(16),        /* OID for typed table, typed view, and type */

  spare1        number,                      /* sql version flag: see kpul.h */

  spare2        number,                             /* object version number */

  spare3        number,                                        /* base user# */

  spare4        varchar2(1000),

  spare5        varchar2(1000),

  spare6        date

)

  storage (initial 10k next 100k maxextents unlimited pctincrease 0)

/

 

3資料字典檢視

靜態資料字典中的檢視分為三類,它們分別由三個字首夠成:user_* all_* dba_*

user_*:該檢視儲存了關於當前使用者所擁有的物件的資訊。(即所有在該使用者模式下的物件)

all_*:該試圖儲存了當前使用者能夠訪問的物件的資訊, 而不是當前使用者擁有的物件。(與user_*相比,all_* 並不需要擁有該物件,只需要具有訪問該物件的許可權即可)

dba_*:該檢視儲存了資料庫中所有物件的資訊。(前提是當前使用者具有訪問這些資料庫的許可權,一般來說必須具有管理員許可權)

這些檢視由SYS使用者建立的,所以使用需要加上SYS,為了方便, Oracle為每個資料字典表的檢視頭建立了同名字的公共同義詞(public synonyms). 這樣簡單的處理就省去了寫sys.的麻煩。

除了靜態資料字典中三類檢視,其他的字典檢視中主要的是V$檢視,之所以這樣叫是因為他們都是以V$GV$開頭的。這些檢視會不斷的進行更新,從而提供了關於記憶體和磁碟的執行情況,所以我們只能對其進行只讀訪問而不能修改它們。

Throughout its operation, Oracle Database maintains a set of virtual tables that record current database activity. These views are calleddynamic performance views because they are continuously updated while a database is open and in use. The views, also sometimes calledV$ views

註釋查詢:

可以透過官方文件查詢

4動態效能(V$)檢視

V$檢視是基於X$虛擬檢視的。V$檢視是SYS使用者所擁有的,在預設狀況下,只有SYS使用者和擁有DBA系統許可權的使用者可以看到所有的檢視,沒有DBA許可權的使用者可以看到USER_ALL_檢視,但不能看到DBA_檢視。與DBA_,ALL,USER_檢視中面向資料庫資訊相反,這些檢視可視的給出了面向例項的資訊。

動態效能表用於記錄當前資料庫的活動,只存於資料庫執行期間,實際的資訊都取自記憶體和控制檔案。 DBA可以使用動態檢視來監視和調節資料。

註釋查詢:

可以透過官方文件查詢

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30496894/viewspace-1874476/,如需轉載,請註明出處,否則將追究法律責任。

相關文章