ORACLE有五大核心進程
1.DBWn進程:用來將buffer cache中的髒數據寫入到硬盤中數據文件中,可以有多個該進程,進行同時的併發寫入。
當sga中的數據緩衝區的數據塊被修改後,該數據塊就會被標記為髒塊,當數據緩衝區的空間不足時,就會觸發該進程把髒塊寫入到數據文件,
讀取髒塊時也是有lru規則,並不是將所有髒塊一次寫入數據文件中,當滿足下列條件是會觸發dbwr進程:
1)當有數據寫入緩衝區,發現空間不夠,就會觸發,按照lru規則寫入數據文件(分散寫)
2)執行檢查點(ckpt進程)
默認情況下,oracle只啓動一個dbwr進程,dbwr0,最大不超過20個,建議不要超過系統的cpu的數量和磁盤的數量
要修改dbwr進程數量,參數db_writer_processed,默認1,不支持動態修改,重啓後生效。
2.LGWr日誌寫入進程只有一個
當用户commit(提交事務)時觸發lgwr進程
當red log buffer空間的三分之一空間被使用完時會觸發lgwr進程
把髒數據寫入磁盤之前,該LGWR進程將日誌信息先寫入到日誌文件中,每隔3秒中執行這樣的動作。
LGWR進程不能有多個,因為日誌是順序是寫入的,不能做並行寫入,否則無法做數據恢復。
3.CKPT進程
當dbwr進程寫髒塊到數據文件時,必須要對控制文件和數據文件進行更新,建立檢查點後,oracle數據文件知道記錄到了什麼位置,當數據庫發生崩潰,可以根據重做日誌來重建崩潰前檢查所有數據文件和控制文件的頭部是否一致,是確保在數據緩衝區中所有修改過的數據塊都被寫入到數據文件中的一種機制,就是確保數據完整性的一種機制。但檢查點完成後,CKPT進程負責更新數據文件和控制文件的頭部信息,並保存檢查點信息,以保證數據庫日誌文件和數據文件的同步。其原理是在數據庫恢復時,只需找到CKPT保存的最後一次檢查點,就可以根據它確定在日誌文件中恢復數據的起始位置,重新執行之後的日誌信息即可。
4.SMON進程
該進程實例啓動時執行實例恢復,還負責清理不再使用的臨時段。在具有並行服務器選項的環境下,SMON對有故障CPU或實例進行實例恢復。SMON進程有規律地被呼醒,檢查是否需要,或者其它進程發現需要時可以被調用。
5.PMON進程
1)監控後台進程運行狀況
2)如果某些進程異常中斷,PMON去釋放會話資源以及佔用的鎖LOCK
3)更新事務表的標誌以及清除事務XID的標記
4)清除異常中斷會話在BUFFER CACHE佔用的緩存
5)PMON也負責定期把數據庫實例註冊到監聽器中