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