Oracle數據庫的體系結構主要包括:物理存儲結構、邏輯存儲結構、內存結構和實例進程結構。了解了Oracle的體系結構,就可以對Oracle數據庫有一個整體認識,這樣有利于后續Oracle的學習。下面我們分別來了解邏輯存儲結構、物理存儲結構、內存結構和實例集成結構。
一、邏輯存儲結構
邏輯存儲結構是Oracle數據庫存儲結構的核心內容,對Oracle的所有操作都會涉及邏輯存儲結構。邏輯存儲結構是從邏輯的角度分析數據庫的構成,是對數據庫存儲結構在邏輯概念上的劃分。Oracle數據庫(Database)從邏輯存儲結構上講,主要包括表空間(Tablespace)、段(Segment)、區(Extent)和數據塊(Block)。這四者存在關系為:多個數據塊組成一個區;多區組成一個段;多個段組成一個表空間。一個Oracle數據庫(數據庫本身也屬于邏輯結構)由多個表空間組成,Oracle數據庫的邏輯存儲結構可以表示為下圖:
圖1
1、表空間(Tablespace)
在Oracle數據庫中,最大的邏輯存儲結構是表空間(Tablespace),表空間與物理上的數據文件相對應,一個表空間可以對應多個數據文件,但是一個數據文件只能對應一個表空間。一個表空間的大小等于構成該表空間的所有數據文件大小的綜和。我們在數據庫中創建的所有內容都存儲在表空間中,如果我們沒有指定表空間,那么我們在數據庫中創建的內容將會存儲在默認的表空間中。
我們創建數據庫時,系統會自動創建一些表空間,這些表空間說明如下:
SYSTEM:系統表空間,包含數據字典(描述數據庫自身結構、所有對象、用戶及角色的的表)。SYSTEM表空間是數據庫中數據字典所處的位置。如果沒有SYSTEM表空間,那么數據庫就無法運作 。創建數據庫后,需要創建存儲數據的其他表空間。
SYSAUX:輔助系統表空間,用于減少系統表空間的負荷,提高系統的作業效率。
TEMP:臨時表空間,用于存儲臨時臨時數據。
EXAMPLE:實例表空間,存放實例數據庫模式對象信息及其培訓資料等。
UNIDOTBSI:重做表空間,存放數據庫中有關重做的相關信息和數據,當用戶對數據庫表進行修改,包括INSERT、UPDATE和DELETE操作時,Oracle系統自動使用重做表空間,來臨時存放修改前的數據?當所做的修改完成,并提交之后,系統會根據需要保留修改前數據的時間長短,來釋放重做表空間的部分空間。
USERS:用戶表空間,存放永久性用戶對象的數據和私有信息,因此,也稱為數據表空間,每個數據庫都應該有一個用戶表空間,以便在創建用戶的時候,將其分配給用戶。除了Oracle系統默認創建表空間,用戶可以根據應用系統的規模,及其所要存放對象的情況,創建多個表空間,以區分用戶數據和系統數據。?
通過sql語句可以查看表空間,如下圖:
select * from dba_tablespaces;
圖2
2、段(Segment)
在Oracle數據庫中,段是一組盤區,這個盤區組成了被Oracle視為一個單位的數據庫對象,一個段存儲了一個數據庫對象(比如一張表,一個索引都屬于一個數據庫對象。對于數據量大的表可能進行分區處理,當段的區滿時,系統會分配另一個區,因此,段的數據區在磁盤上可能是不連續的,一個也可能會由多個段組成)。所以,段一般是數據庫終端用戶將處理的最小存儲單位。
按照段中存儲存儲數據的特征,可以將段分為5種類型:數據段、索引段、臨時段、LOB段和回退段。
通過sql語句可以查看數據段類型情況,如下圖:
select distinct(segment_type) from dba_segments;
圖3
數據段:用于存儲表中的數據,在Oracle中,如果用戶在表空間創建一個表,那么系統會自動在該表空間中創建一個數據段,而且數據段的名稱和表的名稱相同。如果創建的是分區表,系統會為每個分區分配一個數據段。
索引段:用于存儲表中的索引信息。在Oracle中,如果用戶創建了一個索引,則系統會為該索引創建一個索引段,并且索引段的名稱與索引的名稱相同。如果創建的是分區索引,那么系統會為每個分區索引創建一個索引段。
臨時段:用于存儲臨時數據,在Oracle中,排序或者匯總時產生的臨時數據都存儲在臨時段中,該段由系統在用戶的臨時表空間中自動創建,并在排序或匯總結束時自動消除。
LOB段:用于存儲表中大型數據對象。在Oracle中,大型數據對象類型主要有CLOB和BLOB。
回退段:用于存儲用戶數據被修改之前的值。在Oracle中,如果需要對用戶的數據進行回退操作,也就是恢復操作,就要使用回退段。每個Oracle數據庫都應該至少有一個回退段,供數據恢復使用。
3、區(Extent)
在Oracle中,區(Extent)是磁盤空間分配的最小單位。區由一個或者多個數據塊組成,而一個或多個區又組成一個段。
段的增大是通過增加區的個數來實現的,但是在一個數據段中,區的個數并不是無限制的。在創建時可以使用MIN_EXTENTS和MAX_EXTENTS來定義區的個數,其中參數MIN_EXTENTS表示段中最少可分配的區的個數,MAX_EXTENTS參數表示一段中最多可以分配的區的個數。
通過數據字典DBA_TABLESPACES可以了解表空間信息,以及表空間的最大與最小區個數。
select min_extents,max_extents,tablespace_name from dba_tablespaces;
圖4
4.塊(Block)
塊(Block)是用來管理存儲空間的基本單位,也是最小的邏輯存儲單位。Oracle數據庫是以塊為單位進行邏輯讀寫(I/O)操作的。
在創建數據庫時,初始化參數DB_BLOCK_SIZE用來指定一個數據塊的大小。數據庫創建之后,將不能修改數據塊的大小。
可以通過sql/plus使用如下sql語句查看塊的大小。
show parameter db_block_size
在數據庫塊中可以存儲的數據有表數據、索引數據和簇數據等。雖然數據塊可以存儲不同類型的數據,但是,每個數據庫的結構相同。結構如下圖所示:
塊頭部 |
表目錄 |
行目錄 |
空閑空間 |
行空間 |
圖5
由上圖可知,一個數據庫主要由:塊頭部、表目錄、行目錄、空閑空間和行空間五部分組成。
塊頭部:包含塊中的一般屬性信息,例如數據塊的物理地址、所屬段的類型等。
表目錄:如果數據塊中存儲的是某個表的數據(表中一行或多行記錄),則關于該表的信息將存放在表目錄中。
行目錄:用于存儲數據塊中有效的行信息。
空閑空間:數據塊中還沒有使用的存儲空間。
行空間:表或者索引的數據存儲在行空間中,所以行空間是數據塊中已經使用的存儲空間。
塊頭部、表目錄和行目錄3者共同組成數據塊的頭部信息區。塊頭部信息區中并沒有存儲實際的數據庫數據,只是用來引導Oracle系統讀取數據的,如果頭部信息區受損,則該數據塊將消失,快中存儲的數據也將丟失。由于塊頭部、表目錄和行目錄所組成的頭部信息區并不存儲實際數據,所以一個數據塊的容量實際上是空閑空間和行空間容量的總和。
二、物理結構
Oracle數據庫在物理上是由存儲在磁盤中的操作系統文件所組成的,這些文件就是Oracle的物理存儲結構。Oracle數據庫在物理上主要由數據文件(*.dbf)、控制文件(*.ctl)和重做日志文件(*.log)組成,參數文件(SPFILE.ORA)、密碼文件(PWD.ORA)等與Oracle有關,但從技術上說不屬于數據庫的附屬文件。
下面介紹說明這些文件:
1、數據文件(Date File)
指存儲數據庫數據的文件。例如,表中的記錄和索引等都存在數據文件中。在讀取數據時,如果用戶要讀取的數據不在內存的數據緩沖區中,那么Oracle就從數據文件中把數據讀取出來,放到內存的緩沖區中去,供用戶查詢;存儲數據時,用戶修改或添加的數據會先保存在內存的數據緩沖區中,然后由Oracle的后臺進程DBWn將數據寫入數據文件。
數據文件一般有以下幾個特點:
(1)一個表空間(數據庫存儲的邏輯單位)由一個或多個數據文件組成。
(2)一個數據文件僅與一個數據庫聯系,而一個數據庫通常包含多個數據文件。
(3)可以為數據文件設置某些特性以便它們在數據庫運行空間不足時能夠自動擴展。
通過查詢數據字典DBA_DATA_FILES和V$DATAFILE來了解數據文件的信息和結構。
desc dba_data_files;
圖6
通過數據字典DBA_DATA_FILES,可以了解數據文件的名稱、大小以及標識等信息。如上圖所示,其中部分字段解釋如下:
FILE_NAME:數據文件的名稱以及存放路徑。
FILE_ID:數據文件在數據庫中的ID號。
TABLESPACE_NAME:數據文件對應的表空間名稱。
BYTES:數據文件的大小。
BLOCKS:數據文件所占用的數據塊數。
STATUS:數據文件的狀態。
AUTOEXTENSIBLE:數據文件是否可擴展。
通過數據字典V$DATAFILE可以了解記錄的數據文件動態信息,通過該數據字典可以了解數據文件的同步信息。如下:
圖7
上述圖7可以看出,FILE#為數據文件編號;NAME為數據文件名稱;CHECKPOINT_CHANGE#為數據文件的同步號,同步號隨著系統的運行自動修改,以維持所有數據文件的同步。
2、控制文件(Control File)
是一個很小的二進制文件,用于描述數據庫的物理結構。在Oracle數據庫中,控制文件相當重要,它存放著數據庫中數據文件和日志文件的信息。一個Oracle數據庫通常包括對個控制文件,在數據庫使用過程中,數據庫需不斷更新控制文件,一旦控制文件受損,那么數據庫將無法正常工作。通常,在安裝Oracle數據庫時會自動創建控制文件。
通過數據字典V$CONTROLFILE可以了解控制文件的信息,如下圖:
select name from v$controfile;
圖8
Oracle數據系統一般會默認創建3個包含相同信息的控制文件,目的為了當其中一個控制文件受損時,可以調用其他控制文件繼續工作。
3.重做日志文件(Redo Log File)
簡稱日志文件,是記錄數據庫中所有修改信息的文件。借助日志文件,我們可以保證數據的安全性,也可以實現數據庫的備份與恢復。
為了確保日志文件的安全,在實際應用中,應允許日志文件進行鏡像。一個日志文件和它的所有鏡像文件構成一個日志文件組,它們具有相同的信息。同一組的日志文件最好保存到不同的磁盤中,以避免物理損壞帶來的麻煩。
在日志文件組中,日志文件的鏡像個數受參數MAXLOGMEMBERS限制,最多可以有5個。
通過數據字典V$LOG可以了解系統當前正在使用哪個日志文件組,如下圖:
select group#,members,status from v$log;
圖9
通過上圖我們可以看到status狀態字段為cunrrent表示是系統當前使用的日志文件組,當1日志文件組的空間被占用完后,Oracle數據庫會自動轉換到另一個日志文件組,不過我們可以使用alter system命令進行手工日志切換,語句如下:
alter system switch logfile;
Oracle數據庫中的日志文件組是循環使用的,當所有日志文件組的空間都使用完后,系統會自動切換到第一個日志文件組。第一個日志文件組中已經有的信息將會被覆蓋,這取決于數據庫的運行模式。
4、其他文件
除數據文件、控制文件和重做日志文件外,還有參數文件、備份文件、歸檔重做日志文件,以及警告、跟蹤日志文件等。
參數文件:用于記錄Oracle數據庫的基本參數信息,主要包括數據庫名和控制文件所在的路徑等。分為文本參數文件(Parameter File,PFLIE)和服務器參數文件(Server Parameter File,SPFILE)。
備份文件:文件受損時,可借助備份文件對受損文件進行恢復。
歸檔重做日志文件:用于對寫滿的日志文件進行復制并保存,具體功能由歸檔進程ARCn實現,該進程負責將寫滿的重做日志文件復制到歸檔日志目標中。
警告、跟蹤日志文件:當一個進程發現了一個內部錯誤時,它可以將關于錯誤的信息存儲到它的跟蹤文件中。而警告文件則是一種特使的跟蹤文件,它包含錯誤的時間說明,而隨之產生的跟蹤文件則記錄該錯誤的詳細信息。
?三、進程結構
系統全局區(System Global Area,SGA)與Oracle進程組合成為Oracle數據庫實例。其中,SGA是由Oracle為一個實例分配的一組共享內存區域,而Oracle進程則在系統啟動后異步地為所有數據庫用戶執行不同的任務。
1、集成結構概述
我們經常說數據庫實例,實例其實就是指的是數據庫的內存結構和進程結構。我們安裝數據庫軟件大量的是在安裝其內存和進程組件結構。Oracle數據庫啟動時,首先啟動Oracle數據庫實例,系統將自動分配SGA,并啟動多個后臺進程。
Oracle數據庫實例的進程分類:
1)用戶進程
是連接到Oracle DB 的應用程序或工具
2)數據庫進程
服務器進程:連接到Oracle實例,在用戶建立會話時啟動
后臺進程:在啟動Oracle實例時啟動
3)?守護程序/應用程序進程
網絡監聽程序
? Gridinfrastructure 守護程序
從進程角度一般可以把服務器模式分為兩種:
專用服務器:對于每個會話,專用服務器進程提供服務;
共享服務器:不必為每個連接都提供一個專用服務器進程。分派程序會將多個傳入網絡會話請求定向到共享服務器進程池。共享服務器進程為所有客戶機請求提供服務。一般生產庫中都是共享模式;
2.oracle11g進程結構圖
系統中運行的后臺進程數量眾多,用戶可以通過V$BGPROCESS 視圖查詢關于后臺進程的信息。
3.后臺進程分類
(1)oracle實例的后臺進程主要有以下幾種:
??數據庫寫進程(DBWn)
? 日志寫進程(LGWR)
? 檢查點進程(CKPT)
? 系統監視器進程(SMON)
? 進程監視器進程(PMON)
? 歸檔進程(ARCn)
? 恢復器進程(RECO)
? 封鎖進程(LCKn)
? 調度進程(Dnnn)
? 快照進程(SNPn)
? 作業隊列協調程序(CJQ0)
? 作業從屬進程(Jnnn)
? 隊列監視器進程(QMNn)
(2)各個進程說明
? 1>?DBWn?進程(Database Writer):
? 負責將數據庫緩沖區高速緩存中經過修改的緩沖區(灰數據緩沖區)寫入磁盤。
在一個數據庫實例中,DBWn進程最多可以啟動36個,進程名分別為DBWn0、DBWn1、DBWn2、...DBWnj.
了解DBWn之前我們先了解幾個概念:
LRU(Least Recently Used,最近最少使用):數據緩沖的一種管理機制,只保留最近數據,不保留舊數據。
DIRTY:表示“臟列”或者“弄臟了的數據”,實際上就是指被修改但是還沒有寫入數據文件的數據。
DBWn進程工作過程:
當一個用戶進程產生后,服務器進程查找內存緩沖區是否存在用戶進程所需的數據。
如果內存中沒有需要的數據,則服務器進程從數據文件中讀取數據。這時,服務器進程從數據文件中讀取數據。這時,服務器進程會首先從LRU中查找是否有存放數據的空閑塊。
如果LRU中沒有空閑塊,則將LRU中的DIRTY數據塊移入DIRTY LIST(弄臟表)。
如果DIRTY LIST超長,則服務器進程通知DBWn進程將數據寫入磁盤,刷新緩沖區。
當LRU中有空閑塊后,服務器進程從磁盤的數據文件中讀取數據并存放到數據緩沖區中。
注:
需要DBWn進程將修改修改后的緩沖區數據寫入磁盤數據文件的情況,并不只有DIRTY LIST一種,還有如下幾種:
當一個服務器進程將緩沖區數據移入DIRTY LIST,而DIRTY LIST超長時,服務器進程通知DBWn進程將數據寫入磁盤。
當一個服務器進程在LRU中查找DB_LOCK_MAX_SCAN_CNT緩沖區時,如果沒有找到空閑的緩沖區,則停止查找并通知DBWn進程將數據寫入磁盤
出現超時(每次3秒)。此時DBWn進程對LRU表查找指定數目的緩沖區,將所有找到的弄臟緩沖區寫入磁盤
當出現檢查點時,LGWR進程指定修改緩沖區數據,通知DBWn進程將其寫入磁盤中。
DBWn進程作用:
管理數據緩沖區,以便用戶進程總能找到空閑的緩沖區
將所有修改后的緩沖區數據寫入數據文件
使LRU算法將最近使用過的塊保留在內存中
通過延遲寫來優化磁盤I/O讀寫
DBWn進程個數:
DB_WRITER_PROCESSES 初始化參數指定了DBWn?進程的數量。DBWn?進程的最大數量為36。如果用戶在啟動過程中未指定該進程數,Oracle DB 將根據CPU 和處理器組的數量來決定如何設置DB_WRITER_PROCESSES。注意n代表可以有多個此類進程,但是如果是單處理器服務器,則配置n是沒用的。
通過show parameter db_writer_processes;命令可以來了解參數信息:
DBWn進程最多可以啟動20個,所以DB_WRITER_PROCESSES參數的取值范圍是1-36.
?2>LGWR日志寫入進程(Log Writer):
負責管理日志緩沖區的一個后臺進程,用于將日志緩沖區中的日志數據寫入磁盤的日志文件中。
在數據庫運行時,對數據庫的修改操作將被記錄到日志信息中,這些日志信息首先保存在日志緩沖區,當日志信息達到一定量時,由LGWR進程將日志數據寫入日志文件。
需要LGWR進程將緩沖區數據中的日志數據寫入磁盤的主要情況有如下幾種:
用戶進程提交事務
日志緩沖區池已滿1/3
出現超時
DBWn進程為檢查點清除緩沖區塊
一個實例只有一個日志寫入進程
事務被寫入日志文件,并確認提交
日志緩沖區是一個循環緩沖區,當LGER進程將日志緩沖區中的日志寫入磁盤日志文件后,服務器進程又可以將新的日志數據保存到日志緩沖區。如果系統需要清除日志緩沖區,則LGWR進程在一個事務提交前就將日志信息寫出,然后在用戶發出commit命令提交事務時將日志信息寫入日志緩沖區。該相應的數據緩沖區改變是延遲的,直到更改有效時才將日志數據寫入數據文件。
LGWR進程將日志信息同步地寫入在線日志文件組的多個日志成員文件中,如果日志文件組的某個成員文件被刪除或者不可用,則LGWR進程可以將日志信息寫入該組的其他文件中,從而不影響數據庫的正常使用。
?3>CKPT檢查點進程(Check Point):
一般在發生日志切換時產生。在系統運行過程中,當需要將修改后的數據寫回數據文件并且產生日志切換時就會產生檢查點。檢查點保證所有修改過的數據庫緩沖區中的數據都被寫入磁盤數據文件中。
在Oracle數據庫中,提供了兩個參數控制檢查點的產生:一個是LOG_CHECKPOINT_TIMEOUT,用來設置檢查點產生的時間間隔;另一個是LOG_CHECKPOINT_INTERVAL,用來設置一個檢查點需要填充的日志文件塊的數目也就是每產生多少個日志數據,自動產生一個檢查點。
通過以下命令我們可以了解log_checkpoint_timeout參數信息:
show parameter log_checkpoint_timeout;
? log_checkpoint_timeout參數默認值為1800,單位為秒。
通過以下命令我們可以了解log_checkpoint_interval 參數值:
show parameter log_checkpoint_interval;
log_checkpoint_interval參數值默認為0.
4>SMON系統監視器進程(System Monitor):
在實例啟動時執行實例恢復,并負責清理不再使用的臨時段。在具有并行服務器選項的環境下,SMON進程對有故障的CPU或者實例進行實例恢復。SMON進程被有規律的喚醒,檢查是否需要使用,其他進程需要時也可以調用次進程。5>PMON進程監視器進程(Process Monitor):
用于在用戶進程出現故障時執行進程恢復操作,并負責清理內存存儲區和釋放該進程所用的資源。改進程周期性的檢查調度進程和服務器進程的狀態,如果發現進程已死,則重新啟動它。PMON進程被有規律的喚醒,檢查是否需要使用,其他進程需要使用時也可以調用此進程。6>ARCn歸檔進程(Archive Process):
用于將寫滿的日志文件復制到歸檔日志文件中,防止日志文件組的循環使用將已有的日志數據覆蓋。
在一個數據庫實例中,ARCn進程最多可以啟動10個,進程名分別為:ARC0、ARC1、...ARC9.
oracle數據有歸檔(Archivelog)和非歸檔(Noarchivelog)兩種方式。只有在歸檔方式下才存在ARCn進程。當ARCn進程在對一個日志文件進程歸檔操作時,其他任何進程都不可以訪問這個日志文件。
允許啟動的ARCn進程個數由LOG_ARCHIVE_MAX_PROCESSES決定,我們可以通過下面的命令來了解該參數的具體信息。
show parameter log_archive_max_processes;
從上面查詢結果可知,目前最多可以啟動的ARCn進程個數為4,該參數的取值范圍為1-10.
7>RECO恢復器進程(Recovery):
存在于分布式數據庫系統中,用于自動解決在分布式數據庫中出現的事務故障。當一個節點的RECO進程自動地連接到包含有相應數據的分布式事務的其他數據庫中時,RECO進程自動維持分布式數據庫環境中的數據的一致性,任何在當前已經處理而其他數據庫中還未處理的事務將從每一個數據庫的事務表中刪除。
當一個數據庫服務器的RECO進程視圖與一個遠程服務器建立通信時,如果遠程服務器不可用或者無法建立網絡鏈接,則RECO進程將自動在一個時間間隔之后再次鏈接。
8>LCKn封鎖進程(Lock):
該進程存在于并行服務器中,用于實現多個實例間的封鎖。在一個數據庫實例中,最多可以啟動10個LCKn進程,進程名分別為:LCK0、LCK1...LCK9.
9>Dnnn調度進程(Dispatchers):
存在于多線程服務器體系結構中,用于將用戶進程連接到服務器進程。在一個數據庫實例中,Dnnn進程可以啟動多個,進程名分別為D001、D002、...Dnnn。
該進程允許用戶進程共享有限的服務器進程,當沒有調度進程時,每個用戶進程需要一個專用的服務器進程。在一個數據庫實例中,對每種網絡協議至少建立一個調度進程。數據庫管理員根據操作系統中每個進程可連接數目的限制,決定需要啟動的調度進程的數目,在實例運行時可以增加或刪除調度進程。
在實例啟動時,調度進程為用戶連接到Oracle建立一個通信路徑,然后每一個調度進程把連接請求的調度進程的地址給予其他用戶。當一個用戶進程有連接請求時,網絡接收器進程分析請求并決定該用戶是否可以使用一個調度進程。如果可以,則網絡接收器進程返回該調度進程的地址,將用戶進程連接到該調度進程,然后由調度進程將用戶連接到服務器進程。
10>SNPn快照進程(Snapshot Process):
該進程用于處理數據庫快照的自動刷新,并通過DBMS_JOB程序包自動運行預定的數據庫存儲過程、SQL和PL\SQL程序等。
在oracle數據庫中我們可以通過參數JOB_QUEUE_PROCESS設置快照進程的個數。通過以下命令我們可以了解JOB_QUEUE_PROCESS的參數信息:
show parameter job_queue_process;
?11>CJQ0作業隊列協調進程(Job Queue Processes):
一般由兩類進程組成:
作業隊列協調進程coordinator job queue process (CJQn),起到對作業隊列的監控作用。
執行作業的隊列進程job queue processes (Jnnn),由CJQn完成調度產生。
作業隊列進程用于批處理,執行用戶job,可以將它們看做一個調度服務,用于調度Oracle實例上如PL/SQL語句或存儲過程的job。提供開始的時間和調度的時間間隔,作業隊列進程可以根據這個配置,自動地周期性地執行。
?????????作業隊列進程可以被動態地管理。可以允許作業隊列客戶端根據需要使用多個作業隊列進程,當一個作業隊列進程進入空閑狀態(idle)后,其使用的資源將被釋放。
?????????動態的作業隊列進程可以按指定的時間間隔運行大量的作業。用戶的作業是由 CJQ 進程交給作業隊列進程執行的。具體步驟如下:
1. 名為 CJQ0?的協調進程(coordinator process)定期地從系統JOB$表中選擇需要運行的job。被選出的作業將按照時間排序。
2. CJQ0進程動態地產生job隊列的slave進程來運行這些job,編號從J000-J999。
3. 作業隊列進程執行一個由 CJQ 進程選出的作業。每個進程每次只能執行一個job。
4. 當一個工作隊列進程執行完一個作業后,就能夠接受下一個作業。如果此時系統中已經沒有需要被調度的作業了,此進程將進入休眠狀態(sleep state);此進程還會定期地蘇醒(wake up)等待分配其他作業。如果在預設的時間內沒有新的作業,此進程將終止。
初始化參數JOB_QUEUE_PROCESSES表示實例中可以并行執行的最大作業隊列進程數。但是,客戶端不應該假設所有的作業隊列進程都用于執行job。
注意:
如果初始化參數JOB_QUEUE_PROCESSES被設置為?0,協調進程(CJQ )將不會被啟動。
12>其他進程
Oracle 數據庫中還可能運行其他后臺進程。包括:
Memory Monitor Light (MMNL)進程負責執行輕量級的且頻率較高的和可管理性相關的后臺任務,例如捕獲會話歷史信息,測量值計算等。它與AWR一起起作用,將需要的buffer統計信息寫入磁盤。
MMAN進程負責執行數據庫系統的內部任務。
在使用了自動存儲管理(Automatic Storage Management)的實例中,RBAL 進程負責協調磁盤組間的負載平衡工作。她可以使多個實例同時訪問一個 ASM 磁盤(global open)。最終由 ORBn 進程實際執行數據擴展的負載均衡。實例中可以運行多個 ORBn 進程,分別為ORB0,ORB1,以此類推。
當數據庫實例使用 ASM 磁盤組時,還要啟動 OSMB 進程。此進程負責和 ASM 實例(Automatic Storage Management instance)通信。
LMS(Global Cache Service)進程,在RAC環境中存在,該進程管理資源,并提供實例資源交互控制。
Change Tracking Writer (CTWR)進程,是10g中的新進程,用于對最近的改變的塊進行跟蹤,讓RMAN可以更快地進行增量備份。