資料字典
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的訪問則需要相關許可權才可以。
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
通常資料字典由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
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- InnoDB資料字典--字典表載入
- ThinkCMF資料字典
- MySQL資料字典MySql
- 資料流圖 和 資料字典
- 檢視資料字典
- oracle資料庫資料字典應用Oracle資料庫
- 2.12 資料庫資料字典檢視資料庫
- Python資料結構:字典Python資料結構
- MySQL 8.0 之資料字典MySql
- 資料結構-字典樹資料結構
- navicat生成mysql資料字典MySql
- 將json資料轉換為Python字典將json資料轉換為Python字典JSONPython
- js資料結構--字典(map)JS資料結構
- lavavel 自動生成資料字典
- 06-資料型別——字典資料型別
- 2.8.3 資料庫服務的資料字典檢視資料庫
- 資料庫升級-物理重新整理資料字典資料庫
- python-資料型別之字典Python資料型別
- Oracle相關資料字典檢視Oracle
- 使用 Python 字典向 SQLite 插入資料PythonSQLite
- 2.1.3.4 資料字典儲存在CDB中
- 2.1.3.1 資料字典分離的目的
- 什麼是Oracle的資料字典?Oracle
- SQL Server 2014 匯出資料字典SQLServer
- python字典和結構化資料Python
- 用python字典統計CSV資料Python
- python 資料處理(字串擷取、()\[]\{}資料型別、{}字典資料取值)Python字串資料型別
- 易優cms網站CMS資料字典資料庫-Eyoucms網站資料庫
- 如何利用showdoc自動生成資料字典
- 1.1.4 python基本資料型別之字典Python資料型別
- 系統表和資料字典檢視
- mssql生成資料庫字典指令碼-MarkDownSQL資料庫指令碼
- 2.1.3 CDB中的資料字典結構
- swift基本資料型別使用-字典使用Swift資料型別
- 內建資料結構集合和字典資料結構
- InnoDB資料字典詳解-系統表
- Python - 基礎資料型別 dict 字典Python資料型別
- pythoon字典資料{}知識及總結
- 資料字典和固定表統計資訊更新