From: http://blog.163.com/myy10146@126/blog/static/11355718620104109121965/
但是通過另外的工具,就可以看到包含在這裏進程中
- 後臺進程是Oracle的程序,用來管理數據庫的讀寫,恢復和監視等工作。Server Process主要是通過他和user process進行聯繫和溝通,並由他和user process進行數據的交換。在Unix機器上,Oracle後臺進程相對於操作系統進程,也就是說,一個Oracle後臺進程將啓動一個操作系統進程;在Windows機器上,Oracle後臺進程相對於操作系統線程,打開任務管理器,我們只能看到一個ORACLE.EXE的進程,但是通過另外的工具,就可以看到包含在這裏進程中的線程。
- 在Unix上可以通過如下方法查看後臺進程:
- ps –ef | grep ora_
- # ps -ef | grep ora_ | grep XCLUAT
- oracle 29431 1 0 Sep 02 ? 2:02 ora_dbwr_SID
- oracle 29444 1 0 Sep 02 ? 0:03 ora_ckpt_SID
- oracle 29448 1 0 Sep 02 ? 2:42 ora_smon_SID
- oracle 29442 1 0 Sep 02 ? 3:25 ora_lgwr_SID
- oracle 29427 1 0 Sep 02 ? 0:01 ora_pmon_SID
- a、Oracle系統有5 個基本進程他們是
- DBWR(數據文件寫入進程)
- LGWR(日誌文件寫入進程)
- SMON(系統監護進程)
- PMON(用戶進程監護進程)
- CKPT(檢查點進程,同步數據文件, 日誌文件,控制文件)
- b、DBWR
- 將修改過的數據緩衝區的數據寫入對應數據文件,維護系統內的空緩衝區。
- 這裏指出幾個容易錯誤的概念:
- --當一個更新提交後,DBWR把數據寫到磁盤並返回給用戶提交完成.
- --DBWR會觸發CKPT 後臺進程
- --DBWR不會觸發LGWR 進程
- 上面的概念都是錯誤的.
- DBWR是一個很底層的工作進程,他批量的把緩衝區的數據寫入磁盤。和任何前臺用戶的進程幾乎沒有什麼關係,也不受他們的控制。至於DBWR會不會觸發LGWR和CKPT進程,我們將在下面幾節裏討論。
- DBWR工作的主要條件如下:
- --DBWR 超時
- --系統中沒有多的空緩衝區用來存放數據
- --CKPT 進程觸發DBWR 等
- c、LGWR
- 將重做日誌緩衝區的數據寫入重做日誌文件,LGWR是一個必須和前臺用戶進程通信的進程。當數據被修改的時候,系統會產生一個重做日誌並記錄在重做日誌緩衝區內。這個重做日誌可以類似的認爲是以下的一個結構:
- SCN=000000001000
- 數據塊ID
- 對象ID=0801
- 數據行=02
- 修改後的數據=0011
- 提交的時候,LGWR必須將被修改的數據的重做日誌緩衝區內數據寫入日誌數據文件,然後再通知前臺進程提交成功,並由前臺進程通知用戶。從這點可以看出LGWR承擔了維護系統數據完整性的任務。
- LGWR 工作的主要條件如下:
- --用戶提交
- --有1/3 重做日誌緩衝區未被寫入磁盤
- --有大於1M 重做日誌緩衝區未被寫入磁盤
- --超時
- --DBWR需要寫入的數據的SCN號大於LGWR 記錄的SCN號,DBWR 觸發LGWR寫入
- d、SMON
- 工作主要包含:
- --清除臨時空間
- --在系統啓動時,完成系統實例恢復
- --聚結空閒空間
- --從不可用的文件中恢復事務的活動
- --OPS中失敗節點的實例恢復
- --清除OBJ$表
- --縮減回滾段
- --使回滾段脫機
- e、PMON
- 主要用於清除失效的用戶進程,釋放用戶進程所用的資源。如PMON將回滾未提交的工作,釋放鎖,釋放分配給失敗進程的SGA資源。
- f、CKPT
- 同步數據文件,日誌文件和控制文件,由於DBWR/LGWR的工作原理,造成了數據文件,日誌文件,控制文件的不一至,這就需要CKPT進程來同步。CKPT會更新數據文件/控制文件的頭信息。
- CKPT工作的主要條件如下:
- --在日誌切換的時候
- --數據庫用immediate ,transaction , normal 選項shutdown 數據庫的時候
- --根據初始話文件LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_IO_TARGET 的設置的數值來確定
- --用戶觸發
- 以下進程的啓動需要手工配置
- g、ARCH
- 當數據庫以歸檔方式運行的時候,Oracle會啓動ARCH進程,當重做日誌文件被寫滿時,日誌文件進行切換,舊的重做日誌文件就被ARCH進程複製到一個/多個特定的目錄/遠程機器。這些被複制的重做日誌文件被叫做歸檔日誌文件。
- h、RECO
- 負責解決分佈事物中的故障。Oracle可以連接遠程的多個數據庫,當由於網絡問題,有些事物處於懸而未決的狀態。RECO進程試圖建立與遠程服務器的通信,當故障消除後,RECO進程自動解決所有懸而未決的會話。
- i、服務進程Server Process
- 服務進程的分類
- --專用服務進程(Dedicated Server Process)
- 一個服務進程對應一個用戶進程
- --共享服務進程(MultiTreaded Server Process)
- 一個服務進程對應多個用戶進程,輪流爲用戶進程服務。
- PGA & UGA
- PGA = Process Global Area
- UGA = User Global Area
- 他保存了用戶的變量、權限、堆棧、排序空間等用戶信息,對於專用服務器進程,UGA在PGA中分配。對於多線程進程,UGA在Large pool中分配。
- j、用戶進程User Process
- 在客戶端,將用戶的SQL 語句傳遞給服務進程
的線程。