後台進程(Background process)---V$BGPROCESS ,後台進程是Oracle的程式,用來管理資料庫的讀寫,恢複和監視等工作。Server Process主要是通過他和user process進行聯絡和溝通,並由他和user process進行資料的交換。在Unix機器上,Oracle後台進程相對於作業系統進程,也就是說,一個Oracle後台進程將啟動一個作業系統進程;在Windows機器上, Oracle後台進程相對於作業系統線程,開啟工作管理員,我們只能看到一個ORACLE.EXE的進程,但是通過另外的工具,就可以看到包含在這裡進程中的線程。
在Unix上可以通過如下方法查看後台進程:
ps–ef|grep ora_
Oracle系統有5 個基本進程:
- DBWR(資料檔案寫入進程)
- LGWR(記錄檔寫入進程)
- SMON(系統監護進程)
- PMON(使用者進程監護進程)
- CKPT(檢查點進程,同步資料檔案, 記錄檔,控制檔案)
a、DBWR
將修改過的資料緩衝區的資料寫入對應資料檔案
維護系統內的空緩衝區
這裡指出幾個容易錯誤的概念:
當一個更新提交後,DBWR把資料寫到磁碟並返回給使用者提交完成.
DBWR會觸發CKPT 後台進程
DBWR不會觸發LGWR 進程
上面的概念都是錯誤的.
DBWR是一個很底層的背景工作處理序,他批量的把緩衝區的資料寫入磁碟。和任何前台用
戶的進程幾乎沒有什麼關係,也不受他們的控制。
DBWR工作的觸發條件:
a)DBWR逾時3秒;
b)系統中沒有多的空緩衝區用來存放資料;
c)CKPT進程觸發DBWR 等。
Oracle允許允許同時運行多個DBWn進程,以分擔繁瑣的寫負載,這就是DBWn中n的來曆,資料庫中最多可以使用20個DBWn進程。
b、LGWR
將重做日誌緩衝區的資料寫入重做記錄檔,LGWR是一個必須和前台使用者進程通訊的進程。當資料被修改的時候,系統會產生一個重做日誌並記錄在重做日誌緩衝區內。這個重做日誌可以類似的認為是以下的一個結構:
SCN=000000001000
資料區塊ID
對象ID=0801
資料行=02
修改後的資料=0011
提交的時候,LGWR必須將被修改的資料的重做日誌緩衝區內資料寫入日誌資料檔案,然後再通知前台進程提交成功,並由前台進程通知使用者。從這點可以看出LGWR承擔了維護系統資料完整性的任務。
LGWR工作觸發條件:
a)使用者提交;
b)有1/3 重做日誌緩衝區未被寫入磁碟;
c)有大於1M 重做日誌緩衝區未被寫入磁碟;
d)3秒逾時;
e)DBWR需要寫入的資料的SCN號大於LGWR 記錄的SCN號,DBWR 觸發LGWR寫入。
LGWR將重做條目寫入聯機記錄檔的情況分兩種:
後台寫(background write)和同步寫(sync write)。
觸發後台寫的條件有四個:
1)每隔三秒鐘,LGWR啟動一次;
2)在DBWR啟動時,如果發現髒資料區塊所對應的重做條目還沒有寫入聯機記錄檔,則DBWR觸發LGWR進程並等待LRWR寫完以後才會繼續;
3)重做條目的數量達到整個日誌緩衝區的1/3時,觸發LGWR;
4)重做條目的數量達到1MB時,觸發LGWR。
而觸發同步寫的條件就一個:
當使用者提交(commit)時,觸發LGWR。
日誌緩衝區是一個迴圈緩衝區。當LGWR將日誌緩衝區的日誌項寫入記錄檔後,伺服器處理序可將新的日誌項寫入到該日誌緩衝區。LGWR 通常寫得很快,可確保日誌緩衝區總有空間可寫入新的日誌項。
注意:有時候當需要更多的日誌緩衝區時,LWGR在一個事務提交前就將日誌項寫出,而這些日誌項僅當在以後事務提交後才永久化。
ORACLE使用快速提交機制,當使用者發出COMMIT語句時,一個COMMIT記錄立即放入日誌緩衝區,但相應的資料緩衝區改變是被延遲,直到在更有效時才將它們寫入資料檔案。當一事務提交時,被賦給一個系統修改號(SCN),它同交易記錄項一起記錄在日誌中。由於SCN記錄在日誌中,以致在並行伺服器選項配置情況下,恢複操作可以同步。
c、SMON
工作主要包含:
清除臨時空間;
在系統啟動時,完成系統執行個體恢複;
聚結空閑空間;
從停用檔案中恢複事務的活動;
OPS中失敗節點的執行個體恢複;
清除OBJ$表;
縮減復原段;
使復原段離線;
d、PMON
主要用於清除失效的使用者進程,釋放使用者進程所用的資源。如PMON將復原未提交的
工作,釋放鎖,釋放分配給失敗進程的SGA資源。
e、CKPT
同步資料檔案,記錄檔和控制檔案,由於DBWR/LGWR的工作原理,造成了資料文
件,記錄檔,控制檔案的不一至,這就需要CKPT進程來同步。
CKPT會更新資料檔案/控制檔案的頭資訊。
CKPT工作觸發條件:
在日誌切換的時候;
a)資料庫用immediate ,transaction , normal 選項shutdown 資料庫的時候;
b)根據初始話檔案LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_IO_TARGET 的設定的數值來確定;
c)使用者觸發。
以下進程的啟動需要手工配置
a、ARCH
當資料庫以歸檔方式啟動並執行時候,Oracle會啟動ARCH進程,當重做記錄檔被寫滿時,記錄檔進行切換,舊的重做記錄檔就被ARCH進程複製到一個/多個特定的目錄/遠程機器。這些被複製的重做記錄檔被叫做歸檔記錄檔。
b、RECO
負責解決分布事物中的故障。Oracle可以串連遠端多個資料庫,當由於網路問題,有些事物處於懸而未決的狀態。RECO進程試圖建立與遠程伺服器的通訊,當故障消除後,RECO進程自動解決所有懸而未決的會話。
c、LCKn
是在具有並行伺服器選件環境下使用,可多至10個進程(LCK0,LCK1……,LCK9),
用於執行個體間的封鎖。
d、服務進程Server Process
服務進程的分類
專用服務進程(Dedicated Server Process) :一個服務進程對應一個使用者進程
共用服務進程(MultiTreaded Server Process) :一個服務進程對應多個使用者進程,輪流為使用者進程服務。