1. 首页
  2. IT资讯

数据字典

SQL> select * from v$version where rownum<2;

BANNER
——————————————————————————–
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production

SQL> !cat /etc/issue
Enterprise Linux Enterprise Linux Server release 5.5 (Carthage)
Kernel r on an m

学习oracle过程中,通过数据字典我们可以获取管理数据库的信息。
通常数据字典由4部分组成:内部X$表(是oracle数据库的核心,这些表用于跟踪记录了数据库内部的信息,oracle不允许sysdba之外的用户直接访问,显示授权也不允许),数据字典表(用以存储表,索引,约束以及其他数据库信息,这些对象通常以$结尾),动态性能视图(记录了数据库运行时信息和统计的数据信息),静态数据字典视图(oracle提供了静态数据字典视图提供来给用户对于数据字典的访问,但是这部分内容相对稳定,不能直接修改,故称作静态数据字典视图)。

X$表:随着对oracle学习研究的深入,我们会接触到这类表,现阶段对这类底层表不作过多的说明。X$KSPPI,X$KSPPCV,X$BH,X$KSMSP,X$KVIT这几类是我们比较熟知的X$类表。
数据字典表:如果读者阅读过之前文章,应该会对sql.bsq文件不陌生,这个文件里是数据字典表的定义以及注释说明。具体位置$ORACLE_HOME/RDBMS/admin
在创建数据库时,通过调用sql.bsq脚本来创建数据字典表,例如OBJ$,TAB$等。
对bootstrap$应该很熟悉,记录了一些数据库系统基本对象的创建语句,通过bootstrap$进行引导,进一步创建相关重要的对象。
SQL> desc bootstrap$;
 名称                                                                                                                                                                        是否为空? 类型
 —————————————————————————————————————————————————————————– ——– ——————————————————————————————————————–
 LINE#                                                                                NOT NULL NUMBER
 OBJ#                                                                                 NOT NULL NUMBER
 SQL_TEXT                                                                             NOT NULL VARCHAR2(4000)

SQL> select * from bootstrap$ where rownum<5;

     LINE#       OBJ#
———- ———-
SQL_TEXT
————————————————————————————————————————————————————————————————————————————————————————————————————
        -1         -1
8.0.0.0.0

         0          0
CREATE ROLLBACK SEGMENT SYSTEM STORAGE (  INITIAL 112K NEXT 56K MINEXTENTS 1 MAXEXTENTS 32765 OBJNO 0 EXTENTS (FILE 1 BLOCK 128))

        20         20
CREATE TABLE ICOL$(“OBJ#” NUMBER NOT NULL,”BO#” NUMBER NOT NULL,”COL#” NUMBER NOT NULL,”POS#” NUMBER NOT NULL,”SEGCOL#” NUMBER NOT NULL,”SEGCOLLENGTH” NUMBER NOT NULL,”OFFSET” NUMBER NOT NULL,”INTCOL#” NUMBER NOT NULL,”SPARE1″ NUMBER,”SPARE2″ NUMBER,”SPARE3″ NUMBER,”SPARE4″ VARCHAR2(1000),”SPARE5″ V
ARCHAR2(1000),”SPARE6″ DATE) STORAGE (  OBJNO 20 TABNO 4) CLUSTER C_OBJ#(BO#)

        42         42
CREATE INDEX I_ICOL1 ON ICOL$(OBJ#) PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE (  INITIAL 64K NEXT 1024K MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 OBJNO 42 EXTENTS (FILE 1 BLOCK 384))

关于这方面内容,参考之前文章(http://blog.itpub.net/29876893/viewspace-1603494/)

动态性能视图:在数据库启动的时,动态创建了X$表,在此基础上,oracle又创建了V$和GV$视图(GV$是为了OPS/RAC环境的需要,一般每个V$视图都有一个GV$视图与之对应)
除了GV$和V$,oracle建立了GV_$于V_$视图,然后又为这些视图创建了共有同义词,这些工作都是通过catalog.sql来实现的($ORACLE_HOME/rdbms/admin):
catalog.sql中给了注释说明,详细的过程可以查看该文本后面给出的具体调用文本:
@@cdstrt
@@cdfixed.sql
@@cdcore.sql

–CATCTL -M
@@cdplsql.sql
@@cdsqlddl.sql
@@cdmanage.sql
@@cdtxnspc.sql
@@cdenv.sql
@@cdrac.sql
@@cdsec.sql
@@cdobj.sql
@@cdjava.sql
@@cdpart.sql
@@cdrep.sql
@@cdaw.sql
@@cdsummgt.sql
@@cdtools.sql
@@cdexttab.sql
@@cddm.sql
@@catldr.sql

–CATCTL -S     Final scripts single process
@@cdoptim.sql
@@catsum.sql
@@catexp.sql
@@cddst.sql
@@cdend.sql

摘自部分cdcore.sql:

create or replace view ALL_LOG_GROUP_COLUMNS
   (OWNER, LOG_GROUP_NAME, TABLE_NAME, COLUMN_NAME, POSITION,LOGGING_PROPERTY)
as
select u.name, c.name, o.name,
       decode(ac.name, null, col.name, ac.name), cc.pos#,
       decode(cc.spare1, 1, ‘NO LOG’, ‘LOG’)
from sys.user$ u, sys.con$ c, sys.col$ col, sys.ccol$ cc, sys.cdef$ cd,
     sys.obj$ o, sys.attrcol$ ac
where c.owner# = u.user#
  and c.con# = cd.con#
  and cd.type# = 12
  and cd.con# = cc.con#
  and cc.obj# = col.obj#
  and cc.intcol# = col.intcol#
  and cc.obj# = o.obj#
  and (c.owner# = userenv(‘SCHEMAID’)
       or cd.obj# in (select obj#
                      from sys.objauth$
                      where grantee# in ( select kzsrorol
                                         from x$kzsro
                                       )
                     )
        or /* user has system privileges */
          exists (select null from v$enabledprivs
                  where priv_number in (-45 /* LOCK ANY TABLE */,
                                        -47 /* SELECT ANY TABLE */,
                                        -48 /* INSERT ANY TABLE */,
                                        -49 /* UPDATE ANY TABLE */,
                                        -50 /* DELETE ANY TABLE */)
                  )
      )
  and col.obj# = ac.obj#(+)
  and col.intcol# = ac.intcol#(+)
/
comment on table ALL_LOG_GROUP_COLUMNS is
‘Information about columns in log group definitions’
/
comment on column ALL_LOG_GROUP_COLUMNS.OWNER is
‘Owner of the log group definition’
/
comment on column ALL_LOG_GROUP_COLUMNS.LOG_GROUP_NAME is
‘Name associated with the log group definition’
/
comment on column ALL_LOG_GROUP_COLUMNS.TABLE_NAME is
‘Name associated with table with log group definition’
/
comment on column ALL_LOG_GROUP_COLUMNS.COLUMN_NAME is
‘Name associated with column or attribute of object column specified in the log group definition’
/
comment on column ALL_LOG_GROUP_COLUMNS.POSITION is
‘Original position of column or attribute in definition’
/
comment on column ALL_LOG_GROUP_COLUMNS.LOGGING_PROPERTY is
‘Whether the column or attribute would be supplementally logged’
/
grant select on ALL_LOG_GROUP_COLUMNS to public with grant option
/
V_$和GV_$是基于V$和GV_$视图创建的,然后基于V_$和GV_$视图的同义词被创建。通过V_$,oracle把V$视图和普通用户隔离,V_$的权限可以授予给其他用户,oracle不允许任何对于V$视图的直接授予,有关内容可以参考之前写过的文章(http://blog.itpub.net/29876893/viewspace-1688759/),所以大多数我们访问的V$对象,并不是视图,而是指向V_$视图的同义词,而V_$视图是基于真正的V$视图(这个视图是基于真正的X$表建立)创建,读者可以通过转储分析,也可以参考上述文章。oracle访问view优先然后是同义词。
静态数据字典视图:
通常分为三类:
数据字典
上面的三大类视图,在oracle中是为了实现权限的控制。schema是用户具有所有对象权限的集合,通过schema可以将不同用户区分开来,用户可以访问自己schema的对象,对于其他用户schema的访问则需要相关权限才可以。

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

主题测试文章,只做测试使用。发布者:℅傍ㄖ免沦陷dε鬼,转转请注明出处:http://www.cxybcw.com/191894.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code