概述
Oracle 的進程分為用戶進程、服務器進程和後臺進程。下面主要還是介紹下後臺進程,這個對於我們進一步瞭解oracle體系結構還是很有幫助的。
![詳解oracle進程結構——瞭解oracle體系必備](http://p2.ttnews.xyz/loading.gif)
oracle rdbms架構圖
用戶進程與服務器進程
平時我們寫sql然後提交執行的時候,客戶端(sqlplus或者plsql)會產生一個進程,這個進程就是用戶進程了。當用戶需要連接到 Oracle 服務器時,在 Oracle 服務器上會啟動一個與用戶進程對應的進程來為用戶進程服務,這個進程稱為服務進程。
![詳解oracle進程結構——瞭解oracle體系必備](http://p2.ttnews.xyz/loading.gif)
數據庫訪問
如果一個客戶進程對應一個服務進程,則該連接為專有(Dedicated)服務器連接,
如果多個客戶進程對應一個服務器進程,則該連接為共享(Shared)服務器連接。
後臺進程結構(重點)
一個 Oracle 實例中可以包含多種後臺進程,這些進程不一定全部出現在實例中。系統
中運行的後臺進程數量眾多,大家可以通過 V$BGPROCESS 視圖查詢關於後臺進程的信
息。
下面介紹一些常見的數據庫後臺進程:
● 系統監控進程(SMON),主要任務是實例啟動時執行恢復性工作。
● 進程監控進程(PMON),主要任務用於恢復失敗的用戶進程。
● 數據庫寫入進程(DBWn),將修改後的數據塊內容寫回數據文件。
● 日誌寫入進程(LGWR),將內存中的日誌內容寫入日誌文件。
● 檢查點進程(CKPT),啟動檢查點,用於減少數據庫實例恢復所需要的時間。
● 歸檔進程(ARCn),當數據庫服務器以歸檔方式運行時調用該進程完成日誌歸檔。
● 恢復進程(RECO),用於分佈式數據庫中的失敗處理。
● 鎖進程(LCKn),在並行服務器模式下確保數據的一致性。
● 調度進程(Dnnn),負責把用戶進程分配到可用的服務進程進行處理。
1、LGWR 日誌寫入進程(Log Writer)
LGWR 日誌寫入進程負責將重做日誌緩衝區的日誌條目寫入磁盤上的聯機日誌文件。
當運行 DML 或 DDL 語句時,服務器進程首先要將事務的變化記載到重做日誌緩衝區,然後才會寫入數據高速緩衝區,並且重做日誌緩衝區的內容將會被寫入聯機重做日誌文件。
出現以下情況時 LGWR 會開始工作:
● 在 DWBR 進程將髒緩衝區寫入數據文件之前。
● 在重做日誌記錄達到緩衝區的三分之一。
● 日誌緩衝區記錄的日誌多於 1M。
● 每隔 3 秒鐘。
● 提交事務(執行 Commit)。
2、DBWn 數據庫寫入進程(Database Writer)
數據庫寫入進程負責將數據庫高速緩衝區(髒緩衝區)的內容寫入到數據文件。
當數據庫高速緩衝區的塊被修改,它被標記為髒緩衝區並添加到以 SCN為順序的 LRUW(LRUWriter)列表。同時,這個順序與重做日誌緩衝區的順序一致。
在出現以下情況時 DBWn 進程會開始工作:
● 系統發出檢查點指令。
● 髒緩衝區個數達到指定閥值。
● 服務進程搜索一定數目的數據塊後,不能找到自由緩衝區。
● 數據寫入計時時間到。
● 表空間脫機或進入只讀狀態。
● 執行刪除或截斷表操作。
● 執行 ALTER TABLESPACE … BEGIN BACKUP 命令
3、CKPT 檢查點進程(Checkpoint)
CKPT 檢查點進程的作用是執行一個“檢查點”,同步數據庫的所有數據文件、控制文
件和重做日誌文件。當執行檢查點時,系統促使 DBWn 將數據緩衝區中數據的變化寫入數
據文件,同時完成對數據文件和控制文件的更新,記錄下當前數據庫的結構和狀態。
進程 CKPT 在以下情況下會開始工作:
● 發生日誌切換。
● 關閉實例(SHUTDOWN ABORT 除外)。
● 手工執行檢查點操作。
● 由初始化參數 LOG_CHECKPOINT_INTERVAL 和LOG_CHECKPOINT_TIMEOUT 強制發出。
4、SMON 系統監控進程(System Monitor)
SMON 系統監控進程主要作用是強制對數據庫進行恢復操作。在實例啟動時,如果上
一次數據庫是非正常關閉,並且重做日誌文件和控制文件的 SCN 值是不同的,Oracle 將自
動在重新打開數據庫之前,通過執行重做日誌文件的記錄,來同步所有數據文件、控制文件
和重做日誌文件,確保所有數據庫文件的一致性,然後才打開數據庫。
SMON進程的工作歸納如下:
● 進行實例恢復
● 合併數據文件的自由空間
● 釋放數據文件的臨時段
5、PMON 進程監控進程(Process Monitor)
PMON 進程監控進程負責對失敗的用戶進程或服務進程進行恢復。當用戶進程連接到Oracle 服務器時,Oracle 將在服務器端分配相應的服務進程。這時由 PMON 進程來監視用戶進程的執行情況。當進程發生崩潰、掛起或異常終止現象時,該進程負責清除服務進程所佔用的資源,回滾沒有完成的事務。
當 PMON 檢測到用戶進程失敗時,進行的工作歸納如下:
● 回滾當前用戶的事務
● 釋放當前用戶加的表或行級鎖
● 釋放用戶的其他資源
● 重新啟動死掉的調度進程
6、ARCn 歸檔進程(Archive)
ARCn 歸檔進程完成日誌的歸檔備份,是一個可選後臺進程。
當數據庫運行於歸檔日誌模式(ARCHIVELOG)下時,負責將已寫滿的重做日誌文件複製到歸檔日誌目標文件中,這樣可以保留所有的重做記錄。
Oracle 服務器默認的是非歸檔模式,通過修改初始化參數文件中的參數可以改變歸檔模式。生產環境大家還是老老實實設置歸檔模式吧~
7、RECO 恢復進程(Recover)
RECO 恢復進程負責在分佈式數據庫(Distributed Database)環境下,自動恢復失敗的
分佈式事務。
當某個分佈式事務由於網絡連接故障或者其他原因失敗時,RECO 進程將會嘗試與該事物相關的所有數據庫進行聯繫,已完成對失敗事物的處理工作。
8、Dnnnn 調度進程
Dnnnn 調度進程是多線程服務器體系結構的一部分,調度進程接受用戶進程的請求,
將他們放入到請求隊列中,然後為請求隊列中的用戶進程分配一個服務進程。
總結:
用戶連接進程是連接用戶和Oracle Instance的橋樑。服務器進程用於處理Database User和Oracle Server之間的連接。 後臺進程主要是完成數據庫管理任務 ,後臺進程是Oracle Instance和Oracle Database的聯繫紐帶。
後面會分享更多關於devops和DBA方面的內容,感興趣的朋友可以關注下!
閱讀更多 波波說運維 的文章