- ORACLE 11g權威指南
- 谷長勇 王彬 單永紅 陳杰等編著
- 9963字
- 2018-12-29 19:36:42
第4章 Oracle數據庫結構
本章將介紹Oracle數據庫的體系結構、服務器結構、Oracle數據庫文件及后臺進程。
4.1 Oracle體系結構
數據庫的體系結構是從某一個角度來分析和考察數據庫的組成、工作過程與原理,以及數據在數據庫中的組織與管理機制。Oracle數據庫是一個邏輯概念,而不是一個運行數據庫服務的計算機系統或一臺WINSERVER/UNIX的Oracle服務器。
4.1.1 基本術語
初學者往往混淆Oracle實例、Oracle數據庫和Oracle服務器等名次,下面分別對這些術語進行解釋。
1.Oracle實例/ Oracle數據庫
一般Oracle數據庫(Oracle Database)可以分為兩部分。
(1)實例(Instance)
實例是一個非固定的、基于內存的基本進程與內存結構。當服務器關閉后,實例也就不存在了。
(2)數據庫(Database)
數據庫指的是固定的、基于磁盤的數據文件、控制文件、日志文件、參數文件和歸檔日志文件等。一般情況下,Oracle數據庫都是一個數據庫包含一個實例,如圖4-1所示。

圖4-1 數據庫中包含一個實例
2.數據庫服務器
數據庫服務器(Database Server)一般指的是數據庫各軟件部件(如sqlplus,OEM,EXP/IMP等)和實例及數據庫3個主要部分,是由安裝在服務器上的所有軟件(包括各種類型的文件)及啟動成功后的實例組成的。
4.1.2 體系結構圖解
Oracle數據庫的總體體系結構如圖4-2所示。從圖中可以看出,SQL命令從客戶端發出后,由Oracle的服務器進程進行響應,在內存區域中進行語法分析、編譯、執行,將修改后的數據寫入數據庫文件,數據庫的修改信息寫入日志文件,再將SQL的執行結果返回給客戶端。

圖4-2 總體體系結構
4.1.3 表空間與數據文件
在Oracle系統中,表空間和數據文件是Oracle數據庫結構的基本要素。下面分別介紹表空間和數據文件。
1.表空間
在Oracle數據庫系統中,用于存放數據庫表、索引、回滾段等對象的磁盤邏輯空間叫表空間(tablespace),如圖4-3所示。

圖4-3 表空間
一般在完成Oracle系統的安裝并創建Oracle實例后,Oracle系統自動建立多個表空間。下面是Oracle 11g版本默認創建的主要表空間。
(1)SYSTEM表空間
SYSTEM表空間用于存放Oracle系統內部表和數據字典的數據,如表名、列名、用戶名等。不贊成將用戶創建的表、索引等存放在SYSTEM表空間中。SYSTEM表空間對應的數據文件是system01.dbf,如果表空間對應的數據文件比較小,也可以追加另外一個新的數據文件,如圖4-4所示的SYSTEM表空間對應system01.dbf和system02.dfb兩個數據文件。
(2)SYSAUX表空間
SYSAUX表空間是Oracle 11g新增加的表空間,主要用于存放Oracle系統內部的常用樣例用戶的對象,如存放CRM用戶的表和索引等。SYSAUX表空間一般不存儲用戶的數據,由Oracle系統內部自動維護。該表空間對應的數據文件為sysaux01.dbf。
(3)撤銷表空間
撤銷表空間(Undo Tablesapce)用于存儲撤銷信息的表空間。當我們對數據庫表進行修改(包括INSERT,UPDATE,DELETE操作)時,Oracle系統自動使用撤銷表空間來臨時存放修改前的數據(Before Image)。當所做的修改操作完成并提交(Commit)后,Oracle系統可根據需要保留修改前數據時間長短來釋放撤銷表空間的部分空間。一般在創建Oracle實例后,Oracle系統自動創建一個名字為UNDOTBS1的撤銷表空間,撤銷表空間對應的數據文件為UNDOTBS01.DBF。
(4)USERS表空間
USER是Oracle建議用戶使用的表空間,可以在這個表空間上創建各種對象,如創建表、索引等。Oracle的基本樣例用戶SCOTT的對象就存放在USERS表空間中。一般在創建Oracle實例完成后,USERS表空間對應的數據文件是USERS01.DBF。
除了Oracle系統默認創建的表空間外,用戶可根據應用系統的規模及其所要存放的對象類型創建多個表空間,以區分用戶數據與系統數據、索引和數據。此外,不同應用的數據應將不同表空間的文件放在不同的盤上,減少I/O沖突。
2.數據文件
數據文件(Datafile)是用于保存用戶應用數據和Oracle系統內部數據的文件。Oracle數據庫由表空間組成,每個表空間可以包含一個或者多個數據文件,如圖4-4所示。

圖4-4 表空間可以包含一個或者多個數據文件
一般來說,可以在創建表空間時創建一個或多個數據文件,也可以對已存在的表空間追加新的數據文件。數據文件可以存放下面兩種類型的數據。
(1)系統數據
管理用戶數據和Oracle系統本身的數據,如用戶建立的表的名字、列的名字及字段類型等屬于用戶數據,這些數據自動被存放在系統表空間對應的system01.dbf文件中;而Oracle系統內部的數據字典、表,如DBA_USERS,DBA_DATA_FILES等所存放的數據屬于Oracle系統的內部數據,這些數據也存放在系統表空間對應的system01.dbf文件中。
(2)用戶數據
用戶數據是指用戶應用系統的數據,包括與應用系統有關的所有相關信息,如某市勞動局的醫療保險系統中參保單位信息、參保職工信息、醫療支付信息等。
示例1:查詢當前數據庫的所有表空間及其對應的數據文件。
SQL> col file_name for a50; SQL> set linesize 140; SQL> select file_name, tablespace_name, bytes from dba_data_files; FILE_NAME TABLESPACE_NAME BYTES ---------------------------- -------------------- ------------------------------------ /oratest/app/Oracle/oradata/orcl/users01.dbf USERS 5242880 /oratest/app/Oracle/oradata/orcl/undotbs01.dbf UNDOTBS1 131072000 /oratest/app/Oracle/oradata/orcl/sysaux01.dbf SYSAUX 672399360 /oratest/app/Oracle/oradata/orcl/system01.dbf SYSTEM 734003200 /oratest/app/Oracle/oradata/orcl/example01.dbf EXAMPLE 104857600 SQL>
從上面給出的圖示和查詢結果可以看出,表空間和數據文件是一對不可分離的數據庫實體,具有以下特點:
◎ 表空間是一個數據庫的邏輯區;
◎ 每個表空間由一個或多個數據文件組成;
◎ 一個數據文件只能屬于一個表空間。
4.1.4 臨時表空間與臨時文件
臨時表空間(Temporary Tablespace)是Oracle系統用于存放與排序有關的特殊表空間,臨時表空間相當于數據庫系統的一塊白板。當操作中需要進行排序時,Oracle系統就將排序的數據臨時存放在該表空間內,排序處理完成后即可釋放排序數據所占的空間,因此稱之為臨時表空間。與一般的永久表空間一樣,臨時表空間也對應一個或者多個臨時文件(Tempfile)。從Oracle 9i以后,Oracle將臨時表空間所對應的臨時數據文件與一般數據文件分開,要了解數據庫實例當前的臨時表空間和臨時數據文件的信息,可以從DBA_TEMP_FILES數據字典中查詢。
示例2:從DBA_TEMP_FILES數據字典中查詢臨時表空間信息。
SQL> select tablespace_name ,file_name from dba_temp_files; TABLESPACE_NAME FILE_NAME ------------------- ------------------------------------------------------------------- TEMP /oratest/app/Oracle/oradata/orcl/temp01.dbf SQL>
4.1.5 Oracle存儲結構介紹
無論是普通的表空間還是臨時表空間,當我們創建表空間時至少需要創建一個以上的數據文件,Oracle創建數據文件時,實際上是將磁盤的操作系統塊重新格式化成Oracle數據塊,并且每個Oracle數據塊都有唯一的標識。一般Oracle數據塊是操作系統塊的倍數,如操作系統塊大小為2048B,而Oracle數據塊大小為8192B(DB_BLOCK_SIZE=8192),則表示Oracle數據塊由4個操作系統塊構成。如圖4-5所示。

圖4-5 Oracle存儲結構
從圖4-5中可以看出,我們可以在Oracle實例上創建多個表空間,每個表空間由一個或多個數據文件(物理文件)組成;而數據文件由多個操作系統塊構成(圖4-5右側)。
一般地,我們在設計數據庫結構時需要將表、索引或簇(Cluster)存儲到一個已存在的表空間上,而表、索引或簇都是占用空間的對象,Oracle把占空間的對象統一稱為段(Segment)。段是由多個區間(Extent)構成;而區間是由多個連續(塊的編號地址相鄰)的Oracle數據塊構成。所以,在Oracle系統中,數據塊是一個基本的處理單位。
4.1.6 控制文件
控制文件是一個存儲Oracle實例信息、數據文件和日志文件信息的內部二進制文件。控制文件一般在Oracle系統安裝時自動創建,控制文件所存放的路徑由服務器參數文件SPFILEsid.ora的control_files參數值來確定。
由于控制文件存放有數據文件、日志文件等信息,因此,Oracle實例在啟動時必須訪問控制文件。實際上,當Oracle實例在正常啟動時,系統首先要訪問的是初始化參數文件SPFILE;然后,Oracle為系統全局區(SGA)分配內存,這時,Oracle實例處于安裝狀態,控制文件處于打開狀態;接下來,Oracle會自動讀出控制文件中的所有數據文件和日志文件信息,并打開所有數據文件及所有日志文件信息以便用戶訪問。
控制文件內部除了存放Oracle實例及創建日期、數據文件、日志文件外,在系統運行過程中,還存放有系統更改號、檢查點信息及歸檔的當前狀態等信息。如果在Oracle環境啟用RMAN備份,控制文件中會存放RMAN的備份信息。
Oracle數據庫系統出于安全考慮,在安裝Oracle數據庫或者創建實例時,系統會自動創建2個或3個控制文件,每個控制文件記錄相同的信息。這樣可確保在數據庫運行時,如果某個控制文件損壞,Oracle會自動使用另外一個控制文件,當所有控制文件都損壞時,系統將不能工作。
為了Oracle系統的安全,建議在系統安裝時指定多個控制文件,并將它們存放在不同的磁盤路徑上。如果一個數據庫實例的控制文件太少,建議數據庫管理員創建新的控制文件。下面的例子是查詢數據庫實例所包含的控制文件路徑信息。
示例3:從V$CONTROLFILE數據字典中查詢控制文件信息。
1.首先查詢該視圖的結構
SQL> desc v$controlfile; Name Null? Type --------------------------------------------- ------ -------------------------------- STATUS VARCHAR2(7) NAME VARCHAR2(513) IS_RECOVERY_DEST_FILE VARCHAR2(3) BLOCK_SIZE NUMBER FILE_SIZE_BLKS NUMBER
2.查詢控制文件的信息
SQL> set linesize 120; SQL> col name for a100; SQL> select name ,status from v$controlfile; NAME STATUS ------------------------------------------------------------------------------ /oratest/app/Oracle/oradata/orcl/control01.ctl /oratest/app/Oracle/oradata/orcl/control02.ctl /oratest/app/Oracle/oradata/orcl/control03.ctl SQL>
4.1.7 日志文件
Oracle日志文件分為重做日志文件(Redo Log File)和歸檔日志文件,它們是Oracle系統的主要文件之一,特別是重做日志文件,是Oracle數據庫系統正常提供服務所不可或缺的。下面簡單介紹這兩種文件。
1.日志文件
重做日志文件也叫聯機重做日志文件(Online Redo Log File),用來記錄數據庫所有發生過的交易(Transaction)的信息及由Oracle內部行為而引起的數據庫變化信息。在數據庫恢復時,可以從該日志文件讀出原來交易的數據。在數據庫運行期間,當用戶發出COMMIT命令時,數據庫會將每筆交易記錄到日志文件中,寫入日志文件成功后,才把完成信息傳給用戶程序,所以,在日志文件上可以隨時讀出信息以恢復某些交易數據。
對表或者整個表空間設定NOLOGGING屬性時,基于表或表空間中所有表的DML操作都不會生成日志信息,當然也就減少了日志信息的產生。
為了確保數據庫系統的安全,每個Oracle實例用一個日志線程(Thread)來記錄數據庫的變化。日志線程由若干日志組構成,日志組又由一個或者多個日志成員(MEMBER)構成(當然一個日志組也可只包括一個成員)。
可以用下面的實例查詢數據庫實例所包含的日志文件。
示例4:從V$LOGFILE數據字典中查詢臨時表空間信息。
SQL> COL MEMBER FOR A50; SQL> select GROUP#, STATUS, MEMBER from v$logfile; GROUP# STATUS MEMBER ---------- ------- -------------------------------------------------- 3 /oratest/app/Oracle/oradata/orcl/redo03.log 2 /oratest/app/Oracle/oradata/orcl/redo02.log 1 /oratest/app/Oracle/oradata/orcl/redo01.log SQL>
Oracle實例在運行中產生日志信息,首先被記錄在SGA的日志緩沖區中,當發出COMMIT命令(或者日志緩沖區信息滿1/3或者3秒過去)時,LGWR進程將日志信息從日志緩沖區讀出并寫到日志文件組序列號小的文件中,一個日志組寫滿后接著寫另外一組。當LGWR進程將所有能用的日志文件都使用過一次后,它將再次轉向第一個日志組重新覆寫,如圖4-6所示。Oracle用日志文件序列號來跟蹤不同的日志文件。當LGWR進程寫滿一個日志組而轉向寫另外一組時,稱之為日志切換。當日志組發生切換時,Oracle會警告日志文件(alter_sid.log)記錄相應的信息,以幫助用戶觀察各日志組的使用情況。

圖4-6 日志切換
2.歸檔日志文件
Oracle系統運行有兩種模式——歸檔模式和非歸檔模式。非歸檔模式就是在系統運行期間,所產生的日志信息不斷地記錄到各日志文件組中,當所有重做日志組被寫滿后又重新從第一個日志組開始覆寫日志信息內容。
歸檔模式就是在各日志文件(成員)都寫滿而即將要被覆蓋前,先由歸檔進程(ARCH)將即將被覆蓋的日志文件中的日志信息讀出并寫到歸檔日志文件中,以便以后恢復操作時查找,如圖4-7所示。
在默認情況下,Oracle系統不采用歸檔模式運行,這主要是因為歸檔模式會給系統帶來一定的性能問題。下面是查看當前Oracle系統是否采用歸檔模式的語句。

圖4-7 歸檔模式
示例5:從V$DATABASE數據字典中查詢數據庫是否是歸檔模式。
SQL> select dbid,name,log_mode from v$database; DBID NAME LOG_MODE ---------- ---------- ---------------------------------------- 1163896126 ORCL NOARCHIVELOG
如果將數據庫系統設置為歸檔模式下運行,歸檔日志文件所在路徑由服務器參數文件SPFILE的log_archive_dest參數確定,可用下面的語句查詢歸檔日志文件所在路徑。
示例6:顯示歸檔文件所在路徑。
SQL> set pagesize 60; SQL> show parameter log_archive_dest; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_dest string log_archive_dest_1 string log_archive_dest_10 string log_archive_dest_2 string log_archive_dest_3 string log_archive_dest_4 string log_archive_dest_5 string log_archive_dest_6 string log_archive_dest_7 string log_archive_dest_8 string log_archive_dest_9 string log_archive_dest_state_1 string enable log_archive_dest_state_10 string enable log_archive_dest_state_2 string enable log_archive_dest_state_3 string enable log_archive_dest_state_4 string enable log_archive_dest_state_5 string enable log_archive_dest_state_6 string enable log_archive_dest_state_7 string enable log_archive_dest_state_8 string enable log_archive_dest_state_9 string enable
4.1.8 服務器參數文件
服務器參數文件SPFILE(Server Parameter File)是二進制文件,用來記錄Oracle實例的基本參數信息,包括數據庫實例名(db_name)、控制文件(control_files)所在路徑、進程(process)等。服務器參數文件在Oracle系統安裝時以默認的方式創建,文件命名為SPFILEsid.ora,其中,sid為數據庫實例名。
與舊版的初始化參數文件INITsid.ora不同的是,SPFILE中的參數由Oracle系統自動維護,如果要對某些參數進行修改,則不能直接多SPFILE進行編輯,而只能通過企業管理器(Oracle Enterprise Manager)或ALTER SYSTEM命令來修改,所修改過的參數自動寫到SPFILE中。
SPFILE中某些參數可以通過調整來改善數據庫的性能,但有些參數必須在Oracle公司全球支持人員的指導下進行。
另外需要指出的是:SPFILEsid.ora文件也可以用編輯器修改,前提是要確保其格式不被破壞,所以建議不要用編輯器直接修改以免造成文件的不可用。
4.1.9 密碼文件/跟蹤文件/警告日志
Oracle系統運行時,除了必須的數據文件、臨時文件、控制文件、日志文件、歸檔日志文件及服務器參數文件外,還有一些輔助文件,下面進行簡單的介紹。
1.密碼文件
密碼文件(或稱口令文件)是Oracle系統用于驗證sysdba權限的二進制文件。當遠程用戶以sysdba或sysoper連接到數據庫時,一般要用口令文件驗證。值得注意的是,remote_login_passwordfile應設置為NONE或SHARED。NONE表示只要通過操作系統驗證,就不用通過Oracle口令文件的驗證;SHARED表示采用口令文件驗證(SHARED與EXCLUSIVE一樣)。
密碼文件的創建一般要在操作系統下用orapwd命令來完成
示例7:創建一個密碼文件,其SYS口令是change_on_install_new。
$orapwd file=$Oracle_home/Oracle/intra.passwd Password=change_on_install_new entries=30
2.警告日志文件
警告日志文件是一個存儲在Oracle系統目錄下的文本文件,用來在數據庫系統運行期間記錄例行的信息與錯誤信息。例行的信息一般包括Oracle實例打開與關閉、建立表空間、增加數據文件等;錯誤信息包括空間擴展失敗、各種錯誤等。閱讀警告日志文件信息時,數據庫管理員應注意Oracle實例出現過的錯誤、異常環境及一些永久性操作等。
一般當Oracle安裝完成后,Oracle實例日常運行的基本信息都會記錄到警告日志文件中。警告日志文件的文件名為alert_sid.log,其中sid是數據庫實例的名字。警告日志文件的路徑可由Oracle系統的BACKGROUND_DUMP_DEST參數查到。
示例8:查詢當前數據庫實例的警告日志文件的路徑。
SQL> Select value from v$parameter where name='background_dump_dest'; VALUE -------------------------------------------------------------------------------------- /oratest/app/Oracle/diag/rdbms/orcl/orcl/trace SQL>
3.后臺跟蹤文件和用戶跟蹤文件
跟蹤文件是Oracle實例在系統出現異常時,由Oracle系統自動創建的文本文件,與警告文件一起構成完整的故障信息描述體系。警告日志包括錯誤事件的說明,而隨之產生的跟蹤文件記錄了該錯誤的詳細信息。
要得到解決Oracle實例錯誤的方法,除了要閱讀警告日志文件的錯誤信息外,還要認真分析相關的跟蹤文件所記錄的內容。建議Oracle管理員掌握閱讀警告日志文件的錯誤信息和跟蹤文件錯誤信息的方法。
跟蹤文件的路徑由服務器參數文件SPFILEsid.ora的USER_DUMP_DEST參數指定。如果系統在安裝時遵循Oracle的OFA目錄結構,那么在UNIX環境下,當Oracle系統發生錯誤時,跟蹤文件會被記錄在$ORACLE_BASE/admin/SID/udump目錄下。這里,SID是Oracle的實例名。
示例9:查詢當前數據庫實例用戶跟蹤文件的路徑。
SQL> Select value from v$parameter where name='user_dump_dest'; VALUE -------------------------------------------------------------------------------------- /oratest/app/Oracle/diag/rdbms/orcl/orcl/trace SQL>
4.2 Oracle服務器結構
前面介紹了與Oracle系統有關的各種文件的概念,從管理角度來看,有必要明白Oracle服務器和Oracle實例的關系。
4.2.1 Oracle服務器與Oracle實例
Oracle服務器(Oracle Server)包含所有必要的文件、進程及內存結構。進程包括必需的和可選的兩種,可選的進程在需要時才啟用,如歸檔進程ARCH。Oracle服務器由Oracle實例和Oracle數據庫組成,如圖4-2所示。Oracle服務器至少包含一個或者幾個實例。
Oracle實例(Oracle instance)由SGA和后臺進程組成,每一個Oracle實例都有自己的SGA和獨立的Oracle進程集。圖4-2顯示了Oracle數據庫與各文件的關系。
從圖4-2可以看出,參數文件(Parameter file)、口令文件(Password file)及歸檔日志文件(Archive log files)是一般文件;而數據文件(Data files)、控制文件(Control files)、聯機重做日志文件(Redo Log files)是必需文件。這三種文件是通過DBWR和LGWR等后臺進程來操作的,也就是說,使用Oracle數據庫(Database)時,只能通過發出SQL語句來實現對Oracle數據庫的操作。
4.2.2 物理結構與邏輯結構的關系
從管理角度來說,數據文件的管理是最關鍵和最重要的。將數據文件看成是物理文件,而對應的表空間看成是邏輯存儲,如圖4-8所示。

圖4-8 物理結構與邏輯結構關系
從物理上看,多個數據文件(和控制文件及日志文件一起)組成數據庫(Database);數據庫(Database)通過實例(Instance)來管理。從圖4-8中右半部分可以看出,表空間至少包含一個以上的數據文件;表空間用于存放表、索引、Cluster等對象,這些占空間的對象在Oracle系統標為段(Segment);而段(如一個具體的表)在表空間中實際上是由很多擴展(Extent或叫區間)構成的;而擴展則是由多個Oracle塊組成的。可以這樣理解:
◎ Oracle塊是最小處理單位(在安裝時選擇)。
◎ Oracle塊可存放段的多個數據,如存放表的多個行。
◎ 一個占空間的對象稱為段,段根據需要而每次占用多個塊,叫做擴展(Extent)。
◎ 占空間的對象(如表)每次的擴展累加在一起叫做段。
◎ 段在Oracle里是占用表空間的具體對象(可從DBA_SEGMENS字典中查)。
4.2.3 系統全局區(SGA)
系統全局區(System Global Area)主要由三部分構成,分別是數據緩沖區、日志緩沖區與共享池。下面分別進行解釋。
1.數據高速緩沖區(Data Buffer Cache)
數據高速緩沖區中存放著Oracle系統最近使用過的數據塊(即用戶的高速緩沖區),當把數據寫入數據庫時,它以數據塊為單位進行讀寫;當數據高速緩沖區填滿時,會自動去掉一些不常被訪問的數據。如果用戶要查的數據不在數據高速緩沖區,Oracle會自動從硬盤中讀取。數據高速緩沖區有3種類型。
◎ 臟區(Dirty Buffers):包含已經改變過并需要寫回數據文件的數據塊。
◎ 自由區(Free Buffers):不包含任何數據,并且可以被再次寫入的區,Oracle可以將從數據文件中讀出的數據塊存放在該區。
◎ 保留區(Pinned Buffers):此區包含正在處理的或明確保留以作將來使用的區。
◎ Oracle將緩沖池分為3個區(使用多個緩沖池特性時)。
◎ KEEP緩沖池(Keep buffer pool):在內存中保留數據塊,而且這些數據塊在內存中不會被擠掉。
◎ RECYCLE緩沖池:循環使用的緩沖池,表示不再需要所清除的內存塊。
◎ DEFAULT緩沖池:包含已經分配的塊。
2.重做日志緩沖區(Redo Log Buffer)
Oracle數據庫系統在處理事務時會產生日志信息,這些日志信息在記錄到重做日志文件(恢復工作需要使用聯機重做日志)之前,必須首先放到重做日志緩沖區(Redo Log Buffer)中。然后,在檢查點發生或日志緩沖區達到一定的塊數量時,由日志寫入進程(LGWR)。最后將此緩沖區的內容寫入重做日志文件。
3.共享池(Shared Pool)
共享池是SGA保留的區,用于存儲SQL、PL/SQL存儲過程、包、數據字典、鎖、字符集、安全屬性等。共享池包含庫高速緩沖區(Library Cache)和字典高速緩沖區(Dictionary Cache)。
(1)庫高速緩沖區(Library Cache),是共享池的一部分,包括:
◎ 共享SQL區(Shared Pool Area)
◎ 私有SQL區(Private Pool Area)
◎ PL/SQL存儲過程及包(PL/SQL Procedure and Package)
◎ 控制結構
(2)字典高速緩沖區(Data Dictionary Cache),用于存放Oracle系統管理自身需要的所有信息,包括登錄的用戶名、用戶對象、權限等。
4.大池(Large Pool)
在SGA中,大池是一個可選的緩沖區,管理員可以根據需要對其進行配置。大池還可以提供一個大的區以供數據庫的備份與恢復之類的操作使用。
4.2.4 后臺進程
Oracle后臺進程是指運行于Oracle服務器端的后臺程序,是Oracle實例的一部分。它們是一組分工明確、分別完成不同功能的進程。一般情況下,Oracle有如下進程。
1.數據庫寫入器(DBWn)
數據庫寫入器(Database Writer)的任務是將修改后的(在內存)數據塊寫回到數據庫文件中。在某些比較繁忙的應用系統中,可以修改服務器參數文件SPFILE的DB_WRITER_PROCESSES參數,以允許使用多個DBWR進程,這樣的DBWR進程名字分別為DBW0,DBW1,DBW2等。
2.檢查點進程(CKPT)
檢查點進程是一個可選進程。在數據庫運行中當出現查找數據請求時,系統從數據庫中找出這些數據并存入內存區,用戶對數據的操作在內存中進行。當需要對修改的數據寫回數據文件而產生重做日志文件的切換(Switch)時就出現校驗點。DBA可以通過修改初始化參數文件SPFILE中的CHECKPOINT_PROCESS參數為TRUE來啟動檢查點進程。
3.日志寫入器(LGWR)
日志寫入器用于將SGA區中的日志信息寫入到日志文件。一般是用戶所做的修改先寫入日志文件,等到一定時間才真正將修改結果寫回到數據文件。
4.系統監控器(SMON)
系統監控器(System Monitor)是在數據庫系統啟動時執行恢復工作的強制性進程。比如,在并行服務器模式下(兩臺服務器共用一個磁盤組),SMON可以恢復另一臺處于失敗的數據庫,使系統切換到另外一臺正常的服務器上。
5.進程監控器(PMON)
進程監控器主要用于清除失效的用戶進程,釋放用戶進程所用的資源。如,PMON將回滾未提交的工作釋放鎖、釋放分配給失敗進程的SGA資源。
6.歸檔器(ARCH)
可選進程,當數據庫系統處于歸檔(ARCHIVELOG)模式時使用。當系統比較繁忙而導致LGWR進程處于等待ARCH進程時,可通過修改LOG_ARCHIVE_MAX_PROCESSES參數啟動多個歸檔進程,從而提高歸檔寫磁盤的速度。
7.鎖(LCKn)
可選進程,并行服務器模式下可出現多個鎖定進程以利于數據庫通信。
8.恢復器(RECO)
分布式數據庫(不同地點有不同機器和不同的Oracle系統)模式下使用的可選進程,用于數據不一致時進行恢復工作。在RECO解決恢復前,所做的修改數據的標識均標為“可疑”。
9.調度(Dnnn)
可選進程,在共享服務器模式下使用,可以啟動多個調度進程。一般在網絡環境具有多種協議下,每種協議至少創建一個調度進程,每個調度進程負責從所連接的用戶進程到可用服務器進程的路由請求,然后把響應返回給合適的用戶進程。
10.快照進程(SNPn)
快照進程處理數據庫快照的自動刷新,并通過DBMS_JOB包運行預定的數據庫存儲過程。一般情況下,快照進程可以啟動多個,在Oracle 11g版本里,可以直接在SQL>提示下用ALTER SYSTEM命令修改初始化參數JOB_QUEUE_PROCESS,動態啟動多個快照進程。
11.并行查詢進程(Pnnn)
可以根據數據庫的活動并行查詢選項的設置,Oracle服務器啟動或停止并行查詢進程,這些進程設計并行索引的創建、表的創建及查詢。啟動的數量與參數PARALLEL_MIN_SERVERS指定的數量相同,不能超出該參數指定的值。
Oracle不同版本的后臺進程也不同,Oracle 11g默認情況下啟動200多個后臺進程。
示例:從V$BGPROCESS數據字典中查詢當前實例進程信息。
SQL> set pagesize 50; SQL> select name,description from v$bgprocess; NAME DESCRIPTION ----- ---------------------------------------------------------------- PMON process cleanup VKTM Virtual Keeper of TiMe process DIAG diagnosibility process DBRM Resource Manager process RSMN Remote Slave Monitor PING interconnect latency measurement FMON File Mapping Monitor Process PSP0 process spawner 0 ACMS Atomic Controlfile to Memory Server DSKM slave DiSKMon process DIA0 diagnosibility process 0 DIA1 diagnosibility process 1 DIA2 diagnosibility process 2 DIA3 diagnosibility process 3 DIA4 diagnosibility process 4 DIA5 diagnosibility process 5 DIA6 diagnosibility process 6 DIA7 diagnosibility process 7
4.2.5 程序全局區PGA
Oracle在內存分配上除了SGA區外,還有程序全局區(PGA)、用戶全局區(UGA)及調用全局區。與SGA區不同的是,PGA不是一個共享全局區,而是一個私有區。
程序全局區可以理解為進程全局區(Process Global Area),也可以理解為程序全局區(Program Global Area)。其內存段在進程私有區(Process Private Memory)而不是在共享區(Shared Memory)中。PGA是一個全局區,意味著所有代碼、全局變量和數據結構都可存放在其中,但不被所有進程所共享。也就是說,每個Oracle的服務器進程都包含屬于自己的PGA,該私有的PGA只包含本進程的相關特定信息。此外,PGA中的結構不像SGA那樣需要由Oracle的鎖存器機制來保護。因為其他進程不能進入這里訪問,也就不會存放所存在的結構。
PGA區除了保存私有信息外,還包含正在使用的操作系統資源信息的有關進程及進程的狀態信息。如果這些進程出現失敗,則Oracle系統可將失敗進程所占用的資源清除或釋放掉,從而實現資源的高效利用。
示例:顯示數據庫實例的PGA信息。
SQL>set line 160 SQL> show parameter pga NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ pga_aggregate_target big integer 0 24M SQL>
4.3 數據字典
數據字典是存放整個數據庫實例重要信息的一組表,這些數據字典多數都歸于SYS用戶所有。要想對Oracle重要性有更深入的了解,建議首先了解Oracle的部分數據字典,特別是DBA_xxx和V$xxx數據字典。
4.3.1 Oracle數據字典的構成
Oracle數據字典名稱由前綴和后綴組成,使用下畫線“_”連接。其代表的含義如下。
◎ USER_:記錄用戶的對象信息。
◎ ALL_:記錄用戶的對象信息及被授權訪問的對象信息。
◎ DBA_:包含數據庫實例的所有對象信息。
◎ V$_:當前實例的動態視圖,包含系統管理和系統優化等所使用的視圖。
◎ GV_:分布式環境下所有實例的動態視圖,包含系統管理和系統優化使用的視圖,這里的GV表示Global v$。
4.3.2 Oracle常用的數據字典
Oracle數據字典是一個不斷發展、變化與淘汰的內部表,使用和參考相關資料時要注意所使用的Oracle RDBMS的版本與資料是否一致。
雖然Oracle提供了方便的企業管理器可閱讀數據字典的信息,但是,通過這些圖形界面來了解Oracle系統的內部結構和應用系統各對象的關系還存在一定的難度。為了使讀者能方便了解Oradle系統內部的對象結構和進行高層次的管理,下面給出最基本的數據字典及其說明。
1.基本的數據字典
表4-1是初學者要了解的基本數據字典。
表4-1 基本的數據字典列表
2.與數據庫組建相關的數據字典
Oracle數據庫管理員經常按照數據庫組建對數據庫進行管理,比如,了解表空間及數據文件的信息,查詢DBA_DATA_FILES和DBA_TABLESPACES數據字典等。表4-2是按照數據庫組建進行分類的數據字典。
表4-2 基本的數據字典列表
4.3.3 Oracle常用的動態性能視圖
動態性能視圖(以V$開頭的數據字典)對于鑒別實例級性能問題來說是非常有用的,所有帶V$的視圖都可以從V$FIXED_TABLE視圖中列出,而V$FIXED_TABLE視圖中以X$開頭的視圖是可以修改的內部數據結構。所以,這些表只是在實例處在NOMOUNT或MOUNT狀態時才有效。
Oracle動態性能視圖較多,表4-3是常見的動態性能視圖的列表說明。
表4-3 常見動態性能視圖
4.4 本章小結
Oracle數據庫結構是一個復雜的結構,了解Oracle系統結構對于管理很有幫助。下面是掌握Oracle數據庫結構的要點。
◎ 數據文件是存放實際數據的物理文件。
◎ 表空間是包括一個或多個數據文件的邏輯結構。
◎ 一個數據文件只能歸到一個表空間上。
◎ 數據文件可在創建表空間時創建,也可以增加的方式創建。
◎ 數據文件的大小一般與操作系統的限制有關。
◎ 控制文件是Oracle的重要文件,主要存放有關數據文件、日志文件及數據庫的基本信息,一般在數據打開時訪問。
◎ 日志文件是存放日志信息的文件,在Oracle數據庫活動時使用。
◎ 臨時表空間是用于存放排序的磁盤空間;臨時表空間由一個或多個臨時文件組成。
◎ 臨時文件(Oracle 8i中是數據文件)是屬于某個臨時表空間的數據文件。
◎ 歸檔日志文件是為了長期保存日志文件而由歸檔進程將聯機日志文件讀出并寫到一個路徑上的文件。
◎ Oracle實例由一組后臺進程和內存結構組成。
◎ Oracle實例的內存結構稱為系統全局區,簡稱SGA。
◎ SGA分為數據緩沖區、共享池和日志緩沖區。
◎ 后臺進程是一組在Oracle服務器上運行的程序,稱為后臺進程。
◎ 后臺進程是一組完成不同功能的程序,主要包括DBWR,LGWR,CKPT等。
◎ 數據字典是Oracle的重要部分,也是用于系統內部的一組表。
◎ 數據字典分為動態和靜態兩種,靜態數據字典主要是以DBA_開頭的數據字典,而動態數據字典則是以V$開頭的視圖。
◎ DBA_開頭的數據字典存放的字符信息都是大寫的,而V$_開頭的視圖存放的都是小寫的。
- 大規模數據分析和建模:基于Spark與R
- Google Visualization API Essentials
- Unity 5.x Game AI Programming Cookbook
- Java Data Science Cookbook
- Spark大數據分析實戰
- Access 2016數據庫技術及應用
- 跟老男孩學Linux運維:MySQL入門與提高實踐
- 數據中心數字孿生應用實踐
- Hadoop大數據開發案例教程與項目實戰(在線實驗+在線自測)
- 編寫有效用例
- 新手學會計(2013-2014實戰升級版)
- openGauss數據庫核心技術
- AndEngine for Android Game Development Cookbook
- 數據中臺實戰:手把手教你搭建數據中臺
- 數字化轉型方法論:落地路徑與數據中臺