Oracle系統(tǒng)管理員基礎(chǔ):Oracle數(shù)據(jù)字典
對(duì)于Oracle系統(tǒng)管理員而言,Oracle數(shù)據(jù)字典就像是一個(gè)寶庫(kù):它是ORACLE數(shù)據(jù)庫(kù)的重要組成部分,提供了諸如數(shù)據(jù)庫(kù)結(jié)構(gòu)、數(shù)據(jù)庫(kù)對(duì)象空間分配和數(shù)據(jù)庫(kù)用戶等等有關(guān)數(shù)據(jù)庫(kù)的信息。本文試圖從數(shù)據(jù)庫(kù)管理系統(tǒng)的若干基本概念出發(fā),具體介紹從ORACLE數(shù)據(jù)字典來(lái)了解ORACLE的方法。
不同的操作系統(tǒng)、不同版本的ORACLE數(shù)據(jù)字典有所差異,本文均以UNIX操作系統(tǒng)、ORACLE 7為例加以說(shuō)明。
數(shù)據(jù)庫(kù)系統(tǒng)實(shí)例和數(shù)據(jù)庫(kù)標(biāo)識(shí)
ORACLE數(shù)據(jù)庫(kù)系統(tǒng)包含兩個(gè)方面,即ORACLE數(shù)據(jù)庫(kù)和ORACLE實(shí)例,用戶是通過(guò)ORACLE實(shí)例來(lái)訪問(wèn)ORACLE數(shù)據(jù)庫(kù)的。
1.數(shù)據(jù)庫(kù)(DATABASE)
數(shù)據(jù)庫(kù)是作為整體看待的數(shù)據(jù)集合,通常在安裝ORACLE軟件的最后階段創(chuàng)建,用數(shù)據(jù)庫(kù)名加以標(biāo)識(shí)(允許1~8個(gè)字符),數(shù)據(jù)庫(kù)名在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)確認(rèn),且保存在控制文件中。
2.實(shí)例(INSTANCE,也譯作例程)
實(shí)例是存取和控制數(shù)據(jù)庫(kù)的軟件機(jī)制。它由系統(tǒng)全局區(qū)(System Global Area,即SGA)和ORACLE進(jìn)程兩部分組成,和數(shù)據(jù)庫(kù)名一樣,實(shí)例也要唯一標(biāo)識(shí),并且在安裝ORACLE軟件時(shí)確認(rèn)。
我們可以采用下述方法來(lái)了解實(shí)例標(biāo)識(shí)。
有的系統(tǒng)管理員有意無(wú)意地將數(shù)據(jù)庫(kù)名和實(shí)例標(biāo)識(shí)取相同的標(biāo)識(shí)符,當(dāng)然是可以的,有時(shí)甚至?xí)?lái)某些方便,但筆者認(rèn)為,還是取不同標(biāo)識(shí)符為宜。
數(shù)據(jù)庫(kù)的初始化參數(shù)文件
在數(shù)據(jù)庫(kù)的建立和運(yùn)行中,都要閱讀一個(gè)初始化參數(shù)文件,它是個(gè)文本文件,可以用一般的編輯程序編輯。
每一個(gè)數(shù)據(jù)庫(kù)至少有一個(gè)初始化參數(shù)文件,一般命名為INIT.ORA,在UNIX系統(tǒng)下,按照缺省規(guī)定,其初始化參數(shù)文件名的命名原則為INIT后緊跟實(shí)例的標(biāo)識(shí),再加ORA后綴,例如,某實(shí)例標(biāo)識(shí)為TEST,其初始化參數(shù)文件名為INITTEST.ORA。
數(shù)據(jù)庫(kù)的初始化參數(shù)有100多個(gè),前面提到的DB_NAME即是其中之一。此外,還有許多其他參數(shù),如
CONTROL-FILES 控制文件名
ROLLBACK-SEGMENTS 分配給實(shí)例的回滾段名
INIT-SQL-FILES 數(shù)據(jù)庫(kù)建立時(shí)執(zhí)行的命令文件
PROCESSES 多進(jìn)程系統(tǒng)中最大進(jìn)程數(shù)
數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)
數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)是面向操作系統(tǒng)的,它描述數(shù)據(jù)庫(kù)中的數(shù)據(jù)的存儲(chǔ)形式。在物理上OA
CLE數(shù)據(jù)庫(kù)文件包括數(shù)據(jù)文件、日志文件和控制文件。
1.數(shù)據(jù)文件(DATA FILES)
ORACLE數(shù)據(jù)庫(kù)中的數(shù)據(jù),邏輯上存放在表空間里,但物理上卻是存放在數(shù)據(jù)文件里的,數(shù)據(jù)文件有如下特點(diǎn),即每一個(gè)數(shù)據(jù)文件只與一個(gè)數(shù)據(jù)庫(kù)相聯(lián)系,數(shù)據(jù)庫(kù)文件一旦建立,就不能改變大小,一個(gè)表空間可以包含一個(gè)或多個(gè)數(shù)據(jù)文件等。
我們可以用下述方法來(lái)了解數(shù)據(jù)庫(kù)的全部數(shù)據(jù)文件。
(1)SQLDBA>SELECT*FROM DBA-DATA-FILES;結(jié)果中,列名FILE-NAME即為數(shù)據(jù)文件名。
(2)SQLDBA>SELECT*FROM V$DATAFILE;結(jié)果中,列名NAME即為數(shù)據(jù)文件名。
(3)SQLDBA>SELECT*FROM V$DBFILE;結(jié)果中,列名NAME即為數(shù)據(jù)文件名。
2.日志文件(REDO LOG FILES)
日志文件用于記錄數(shù)據(jù)庫(kù)所做的全部變更,以便在系統(tǒng)發(fā)生故障時(shí)進(jìn)行恢復(fù)。每一個(gè)數(shù)據(jù)庫(kù)至少有兩個(gè)日志文件。
3.控制文件(CONTROL FILES)
控制文件雖然是一個(gè)較小的二進(jìn)制文件,但很重要。如果控制文件一旦被破壞,則無(wú)法對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。為防止控制文件被破壞,一般一個(gè)數(shù)據(jù)庫(kù)應(yīng)至少有二個(gè)控制文件,且分別放在不同的磁盤上,控制文件的名字是記錄在參數(shù)CONTROL_FILES中的。
數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)
數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)是面向用戶的,數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)包含表空間、段、范圍、數(shù)據(jù)塊和模式對(duì)象。從邏輯上看數(shù)據(jù)庫(kù)有以下特點(diǎn)。
一個(gè)數(shù)據(jù)庫(kù)(DATABASE)由一個(gè)或多個(gè)表空間所組成。
一個(gè)表空間(TABLESPACE)由段組成,作為SYSTEM表空間,它由自舉段、回滾段、數(shù)據(jù)段、臨時(shí)段等多個(gè)段組成,而作為非SYSTEM表空間,則因用途而異由不同段組成。
一個(gè)段(SEGMENT)由一組范圍組成。一個(gè)范圍(EXTENT)由一組連續(xù)的數(shù)據(jù)塊組成。一個(gè)數(shù)據(jù)塊(DATABASE BLOCK)對(duì)應(yīng)磁盤上的一個(gè)或多個(gè)物理塊。
在數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)中,表空間和回滾段比較重要,下面分別加以介紹。
1.表空間
每一個(gè)數(shù)據(jù)庫(kù)都必須包含一個(gè)名為SYSTEM的表空間。該表空間在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)由系統(tǒng)自動(dòng)創(chuàng)建,為了保證數(shù)據(jù)庫(kù)能正常運(yùn)行,SYSTEM表空間必須處于在線狀態(tài)。
為了增強(qiáng)對(duì)數(shù)據(jù)庫(kù)的控制和維護(hù),一般一個(gè)數(shù)據(jù)庫(kù)都包含多個(gè)表空間。使用多個(gè)表空間有許多優(yōu)點(diǎn),例如可以使用戶數(shù)據(jù)與數(shù)據(jù)字典相分離,可以在不同的磁盤上存儲(chǔ)不同表空間的數(shù)據(jù)文件,從而減少I/O沖突,還可以使一些表空間在線,而使另一些表空間離線等等。
2.回滾段
每一個(gè)表空間是都由段組成。ORACLE數(shù)據(jù)庫(kù)中的段有數(shù)據(jù)段、索引段、臨時(shí)段、回滾段和自舉段。比較重要的是回滾段,它記錄數(shù)據(jù)庫(kù)的變更信息,以實(shí)現(xiàn)數(shù)據(jù)庫(kù)的讀一致性及恢復(fù)工作。
在SYSTEM表空間里有一個(gè)SYSTEM回滾段,是在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)隨之產(chǎn)生的。如果使用多個(gè)表空間,至少還應(yīng)有一個(gè)另外的回滾段?;貪L段分專用和公用兩種,要使用專用回滾段,需要在初始化參數(shù)文件的ROLLBACK-SEGMENTS參數(shù)上寫上專用回滾段的段名并且重新啟動(dòng)數(shù)據(jù)庫(kù),或者通過(guò)回滾段在線命令使它在線。
數(shù)據(jù)庫(kù)的用戶
ORACLE數(shù)據(jù)庫(kù)是個(gè)多用戶系統(tǒng)。為了保證數(shù)據(jù)庫(kù)系統(tǒng)的安全,ORACLE數(shù)據(jù)庫(kù)管理系統(tǒng)配制了良好的安全機(jī)制。例如,每一個(gè)ORACLE數(shù)據(jù)庫(kù)都有一個(gè)用戶表,它記載著每一個(gè)用戶的有關(guān)信息,一旦用戶進(jìn)入系統(tǒng),ORACLE系統(tǒng)會(huì)通過(guò)這張表來(lái)檢查用戶的合法性。又如,ORACLE系統(tǒng)通過(guò)合理分配用戶的權(quán)限來(lái)管理用戶。通常,ORACLE將用戶分為三類,即DBA、RESOUCE和CONNECT三類角色,使不同的用戶的權(quán)限各不相同。
在創(chuàng)建數(shù)據(jù)庫(kù)時(shí),系統(tǒng)自動(dòng)建立了兩個(gè)用戶,即SYS和SYSTEM用戶,且授給這兩個(gè)用戶DB權(quán)限,由于DBA具有最高權(quán)限,建議將它們的口令及時(shí)修改,以免個(gè)別用戶以DBA角色進(jìn)入系統(tǒng),有意無(wú)意地給系統(tǒng)造成損害。
除了SYS、SYSTEM用戶外,其余用戶都要一一建立,建立用戶的方法如下:
假設(shè)要建的用戶名為RSXT,口令為RSPASS;默認(rèn)的表空間為USER,臨時(shí)表空間為TEMP,表空間限額為3M,其余默認(rèn),則可用下面方法創(chuàng)建新用戶:
- SQLDBA>CREATE USER RSXT IDENTIFIED BY RSPASS
- DEFAULT TABLESPACE USER
- TEMPORARY TABLESPACE TEMP
- QUOTA 3M ON USER;
請(qǐng)注意,該用戶建立后,還要及時(shí)授權(quán),否則像上述剛剛建成的用戶,則一無(wú)所為,甚至都不能連接數(shù)據(jù)庫(kù)。對(duì)一般用戶,通常授予CONNECT和RESOURCE角色權(quán)限,命令如下:
SQLDBA>GRANT CONNECT,RESOURCE TO RSXT;
對(duì)于一個(gè)有著許多用戶的數(shù)據(jù)庫(kù)系統(tǒng),我們可以通過(guò)下述方法來(lái)了解數(shù)據(jù)庫(kù)的用戶情況。
1.對(duì)于非DBA用戶
對(duì)于非DBA用戶,有兩條命令,即:
(1)SQL>SELECT*FROM ALL-USERS;
(2)SQL>SELECT*FROM USER-USERS;
其中,從USER-USERS表中,可以了解到該用戶的默認(rèn)表空間和臨時(shí)表空間等信息。
2.對(duì)于DBA用戶
對(duì)于DBA用戶,有三條命令,即:
(1)SQLDBA>SELECT*FROM ALL-USERS;
(2)SQLDBA>SELECT*FROM USER-USERS;
(3)SQLDBA>SELECT*FROM DBA-USERS;
其中,從DBA-USERS中,可以了解到所有用戶的詳細(xì)信息,因而該命令對(duì)于數(shù)據(jù)庫(kù)管理員來(lái)說(shuō)是很有用的。
關(guān)于非DBA用戶的信息
由于DBA用戶具有最高權(quán)限,為安全起見(jiàn),只有Oracle系統(tǒng)管理員才授予DBA權(quán)限,大多數(shù)用戶均為非DBA用戶。盡管相應(yīng)的權(quán)限少了,但是從ORACLE數(shù)據(jù)字典中,還是可以得到 很多關(guān)于非DBA用戶的有用信息。
我們可以采用下述方法來(lái)了解有關(guān)非DBA用戶的信息。
1.SQL>SELECT*FROM USER-USERS;
可以查看該用戶的默認(rèn)表空間,臨時(shí)表空間和用戶創(chuàng)建時(shí)間。
2.SQL>SELECT*FROM USER-TABLES;
可以查看該用戶創(chuàng)建的所有表的詳細(xì)信息,由于列名較多,一屏看不了幾個(gè)表。
如果僅僅想查看用戶所建表的表名,可以用下面的命令:
SQL>SELECT TABLE-NAME FROM USER-TABLES;
3.SQL〉SELECT*FROM USER-VIEWS;
可以查看該用戶所創(chuàng)建的視圖,包括創(chuàng)建視圖的文本。
同樣,如果僅僅想查看用戶所建視圖的視圖名,可以用下面的命令:
SQL>SELECT VIEW-NAME FROM USER-VIEWS;
4.SQL>SELECT*FROM USER-TABLESPACES;
可以查看該用戶可存取的表空間的信息。
5.SQL>SELECT TABLESPACE-NAME,SUM(BYTES),SUM(BLOCKS)
FROM USER-FREE-SPACE GROUP BY TABLESPACE-NAME;
可以查看該用戶可存取的表空間的剩余空間。
6.SQL>SELECT *FROM USER-TS-QUOTAS;
可以查看該用戶的表空間的份額。
7.SQL>SELECT *FROM USER-ROLE-PRIVS;
可以查看該用戶被授予的角色。
8.SQL>SELECT *FROM USER-SYS-PRIVS;
可以查看該用戶的系統(tǒng)權(quán)限及能否再授予其它用戶的權(quán)限。
9.SQL>SELECT *FROM USER-TAB-PRIVS-RECD;
可以查看該用戶能訪問(wèn)其它用戶的表、視圖等的對(duì)象權(quán)限。
10.SQL>SELECT *FROM USER-TAB-PRIVS-MADE;
可以查看該用戶授予其它用戶的表、視圖等的對(duì)象權(quán)限。
有關(guān)用戶的信息還有很多,這里不再一一列舉,請(qǐng)Oracle系統(tǒng)管理員們自行查看ORACLE數(shù)據(jù)字典。
【編輯推薦】