程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle系統管理員基礎:Oracle數據字典

Oracle系統管理員基礎:Oracle數據字典

編輯:Oracle數據庫基礎

對於Oracle系統管理員而言,Oracle數據字典就像是一個寶庫:它是Oracle數據庫的重要組成部分,提供了諸如數據庫結構、數據庫對象空間分配和數據庫用戶等等有關數據庫的信息。本文試圖從數據庫管理系統的若干基本概念出發,具體介紹從ORACLE數據字典來了解Oracle的方法。

不同的操作系統、不同版本的ORACLE數據字典有所差異,本文均以UNIX操作系統、Oracle 7為例加以說明。

數據庫系統實例和數據庫標識

ORACLE數據庫系統包含兩個方面,即ORACLE數據庫和ORACLE實例,用戶是通過ORACLE實例來訪問Oracle數據庫的。

1.數據庫(DATABASE)

數據庫是作為整體看待的數據集合,通常在安裝Oracle軟件的最後階段創建,用數據庫名加以標識(允許1~8個字符),數據庫名在創建數據庫時確認,且保存在控制文件中。

2.實例(INSTANCE,也譯作例程)

實例是存取和控制數據庫的軟件機制。它由系統全局區(System Global Area,即SGA)和Oracle進程兩部分組成,和數據庫名一樣,實例也要唯一標識,並且在安裝Oracle軟件時確認。

我們可以采用下述方法來了解實例標識。

有的系統管理員有意無意地將數據庫名和實例標識取相同的標識符,當然是可以的,有時甚至會帶來某些方便,但筆者認為,還是取不同標識符為宜。

數據庫的初始化參數文件

在數據庫的建立和運行中,都要閱讀一個初始化參數文件,它是個文本文件,可以用一般的編輯程序編輯。

每一個數據庫至少有一個初始化參數文件,一般命名為INIT.ORA,在UNIX系統下,按照缺省規定,其初始化參數文件名的命名原則為INIT後緊跟實例的標識,再加ORA後綴,例如,某實例標識為TEST,其初始化參數文件名為INITTEST.ORA。

數據庫的初始化參數有100多個,前面提到的DB_NAME即是其中之一。此外,還有許多其他參數,如

CONTROL-FILES 控制文件名

ROLLBACK-SEGMENTS 分配給實例的回滾段名

INIT-SQL-FILES 數據庫建立時執行的命令文件

PROCESSES 多進程系統中最大進程數

數據庫的物理結構

數據庫的物理結構是面向操作系統的,它描述數據庫中的數據的存儲形式。在物理上OA

CLE數據庫文件包括數據文件、日志文件和控制文件。

1.數據文件(DATA FILES)

Oracle數據庫中的數據,邏輯上存放在表空間裡,但物理上卻是存放在數據文件裡的,數據文件有如下特點,即每一個數據文件只與一個數據庫相聯系,數據庫文件一旦建立,就不能改變大小,一個表空間可以包含一個或多個數據文件等。

我們可以用下述方法來了解數據庫的全部數據文件。

(1)SQLDBA>SELECT*FROM DBA-DATA-FILES;結果中,列名FILE-NAME即為數據文件名。

(2)SQLDBA>SELECT*FROM V$DATAFILE;結果中,列名NAME即為數據文件名。

(3)SQLDBA>SELECT*FROM V$DBFILE;結果中,列名NAME即為數據文件名。

2.日志文件(REDO LOG FILES)

日志文件用於記錄數據庫所做的全部變更,以便在系統發生故障時進行恢復。每一個數據庫至少有兩個日志文件。

3.控制文件(CONTROL FILES)

控制文件雖然是一個較小的二進制文件,但很重要。如果控制文件一旦被破壞,則無法對數據庫進行操作。為防止控制文件被破壞,一般一個數據庫應至少有二個控制文件,且分別放在不同的磁盤上,控制文件的名字是記錄在參數CONTROL_FILES中的。

數據庫的邏輯結構

數據庫的邏輯結構是面向用戶的,數據庫的邏輯結構包含表空間、段、范圍、數據塊和模式對象。從邏輯上看數據庫有以下特點。

一個數據庫(DATABASE)由一個或多個表空間所組成。

一個表空間(TABLESPACE)由段組成,作為SYSTEM表空間,它由自舉段、回滾段、數據段、臨時段等多個段組成,而作為非SYSTEM表空間,則因用途而異由不同段組成。

一個段(SEGMENT)由一組范圍組成。一個范圍(EXTENT)由一組連續的數據塊組成。一個數據塊(DATABASE BLOCK)對應磁盤上的一個或多個物理塊。

在數據庫的邏輯結構中,表空間和回滾段比較重要,下面分別加以介紹。

1.表空間

每一個數據庫都必須包含一個名為SYSTEM的表空間。該表空間在創建數據庫時由系統自動創建,為了保證數據庫能正常運行,SYSTEM表空間必須處於在線狀態。

為了增強對數據庫的控制和維護,一般一個數據庫都包含多個表空間。使用多個表空間有許多優點,例如可以使用戶數據與數據字典相分離,可以在不同的磁盤上存儲不同表空間的數據文件,從而減少I/O沖突,還可以使一些表空間在線,而使另一些表空間離線等等。

2.回滾段

每一個表空間是都由段組成。Oracle數據庫中的段有數據段、索引段、臨時段、回滾段和自舉段。比較重要的是回滾段,它記錄數據庫的變更信息,以實現數據庫的讀一致性及恢復工作。

在SYSTEM表空間裡有一個SYSTEM回滾段,是在創建數據庫時隨之產生的。如果使用多個表空間,至少還應有一個另外的回滾段。回滾段分專用和公用兩種,要使用專用回滾段,需要在初始化參數文件的ROLLBACK-SEGMENTS參數上寫上專用回滾段的段名並且重新啟動數據庫,或者通過回滾段在線命令使它在線。

數據庫的用戶

ORACLE數據庫是個多用戶系統。為了保證數據庫系統的安全,ORACLE數據庫管理系統配制了良好的安全機制。例如,每一個Oracle數據庫都有一個用戶表,它記載著每一個用戶的有關信息,一旦用戶進入系統,ORACLE系統會通過這張表來檢查用戶的合法性。又如,ORACLE系統通過合理分配用戶的權限來管理用戶。通常,Oracle將用戶分為三類,即DBA、RESOUCE和CONNECT三類角色,使不同的用戶的權限各不相同。

在創建數據庫時,系統自動建立了兩個用戶,即SYS和SYSTEM用戶,且授給這兩個用戶DB權限,由於DBA具有最高權限,建議將它們的口令及時修改,以免個別用戶以DBA角色進入系統,有意無意地給系統造成損害。

除了SYS、SYSTEM用戶外,其余用戶都要一一建立,建立用戶的方法如下:

假設要建的用戶名為RSXT,口令為RSPASS;默認的表空間為USER,臨時表空間為TEMP,表空間限額為3M,其余默認,則可用下面方法創建新用戶:

  1. SQLDBA>CREATE USER RSXT IDENTIFIED BY RSPASS  
  2. DEFAULT TABLESPACE USER 
  3. TEMPORARY TABLESPACE TEMP 
  4. QUOTA 3M ON USER;  

請注意,該用戶建立後,還要及時授權,否則像上述剛剛建成的用戶,則一無所為,甚至都不能連接數據庫。對一般用戶,通常授予CONNECT和RESOURCE角色權限,命令如下:

SQLDBA>GRANT CONNECT,RESOURCE TO RSXT;

對於一個有著許多用戶的數據庫系統,我們可以通過下述方法來了解數據庫的用戶情況。

1.對於非DBA用戶

對於非DBA用戶,有兩條命令,即:

(1)SQL>SELECT*FROM ALL-USERS;

(2)SQL>SELECT*FROM USER-USERS;

其中,從USER-USERS表中,可以了解到該用戶的默認表空間和臨時表空間等信息。

2.對於DBA用戶

對於DBA用戶,有三條命令,即:

(1)SQLDBA>SELECT*FROM ALL-USERS;

(2)SQLDBA>SELECT*FROM USER-USERS;

(3)SQLDBA>SELECT*FROM DBA-USERS;

其中,從DBA-USERS中,可以了解到所有用戶的詳細信息,因而該命令對於數據庫管理員來說是很有用的。

關於非DBA用戶的信息

由於DBA用戶具有最高權限,為安全起見,只有Oracle系統管理員才授予DBA權限,大多數用戶均為非DBA用戶。盡管相應的權限少了,但是從Oracle數據字典中,還是可以得到 很多關於非DBA用戶的有用信息。

我們可以采用下述方法來了解有關非DBA用戶的信息。

1.SQL>SELECT*FROM USER-USERS;

可以查看該用戶的默認表空間,臨時表空間和用戶創建時間。

2.SQL>SELECT*FROM USER-TABLES;

可以查看該用戶創建的所有表的詳細信息,由於列名較多,一屏看不了幾個表。

如果僅僅想查看用戶所建表的表名,可以用下面的命令:

SQL>SELECT TABLE-NAME FROM USER-TABLES;

3.SQL〉SELECT*FROM USER-VIEWS;

可以查看該用戶所創建的視圖,包括創建視圖的文本。

同樣,如果僅僅想查看用戶所建視圖的視圖名,可以用下面的命令:

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;

可以查看該用戶的系統權限及能否再授予其它用戶的權限。

9.SQL>SELECT *FROM USER-TAB-PRIVS-RECD;

可以查看該用戶能訪問其它用戶的表、視圖等的對象權限。

10.SQL>SELECT *FROM USER-TAB-PRIVS-MADE;

可以查看該用戶授予其它用戶的表、視圖等的對象權限。

有關用戶的信息還有很多,這裡不再一一列舉,請Oracle系統管理員們自行查看Oracle數據字典。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved