Oracle數據庫的后臺進程管理技術介紹
2024-08-29 13:41:49
供稿:網友
1、PMON (The PRocess Monitor) 進程監控器 主要負責連接非正常中斷后的清除工作,PMON負責釋放相應的資源。 PMON將回滾沒有提交的工作,釋放鎖,釋放分配給這個失敗進程的Free SGA資源。除了清理失敗的連接之外,PMON還負責監控所有其它的Oracle后臺進程,假如有需要的話,將重起這些后臺進程,比如一個 shared server或者一個dispatcher fail的話, PMON將跟進,重起另一個相應的進程。 2、SMON (The System Moniter) 系統監控器 主要負責其它進程不想處理的工作的進程,是數據庫的一種“垃圾回收站”,主要包括: 2.1、臨時空間的清除; 比如創建索引失敗時,SMON將負責清除在創建索引過程當中分配出來的Temporary extent. 2.2、崩潰恢復; 2.3、Coalescing free space; 這個是在字典治理的表空間才會有的,SMON將表空間中連續的空閑的extent,合并成一個大的free extent.這只能發生在字典治理的表空間,并且pctincrease 被設置成非零的時候。 2.4、Recovering transactions active against unavailable files; 2.5、OPS中失敗節點的實例恢復; 在OPS中,當一個節點Fail,其它節點將打開失敗節點的重做日志,對失敗節點執行恢復(注重:實例恢復和崩潰恢復的區別)。 2.6、清除OBJ$; 2.7、Shrinks 回滾段; 假如設置了Optimal,那么SMON將執行自動 Shrink 回滾段到Optimal 大小。 2.8、脫機 回滾段; 舉個例子,比如在切換回滾表空間的時候,由于可能之前的回滾表空間中有活動的事務,所以回滾表空間中的一些回滾段可能并不是真正的脫機,而只是標志為" Pending offline",要等到活動事務提交或回滾之后,相應的回滾段才算真正的脫機,而SMON則周期性的在后臺去真正的脫機回滾段,直到回滾段真正的脫機為止。 3、CKPT (Checkpoint Process) CKPT進程并不像它的名字暗示的那樣會進行一個checkpoint事件,它只是更新數據文件頭。Oracle 8.0之前,CKPT是一個可選進程,之后就總是開啟的了,更新數據文件頭在CKPT出現之前這是LGWR的任務,但是后來隨著文件數量增大,這個LGWR的附加任務變得太大而成為負擔。于是就出現了CKPT,由CKPT分擔著這部分任務。 4、DBWn (Database Block Writer) DBWn是一個負責將dirty blocks寫到磁盤的后臺進程,通常將dirty blocks寫到磁盤是為了騰空更多的空閑空間(為了其它數據的讀 而釋放緩沖區), 或者advance 一個檢查點事件(也就是在發生故障實例恢復時, 將聯機重做日志中Oracle開始讀取的位置 前移以節省實例恢復的時間)Log Switch 會觸發一個Checkpoint,Oracle 需要advance這個Checkpoint以至于在實例恢復時不需要這個剛被填滿的online redo log,假如在重用這個日志之前,不能完成這個advance Checkpoint的操作,則我們在alert將發現"Checkpoint not Compelete"信息,并且必須等待這個事件的完成。 5、LGWR (Log Writer) LGWR負責將Redo log buffer (位于SGA中)中的內容寫入到聯機日志文件。 下面幾種情況將會觸發LGWR寫log buffer: 5.1、每三秒; 5.2、當用戶commit時; 5.3、當重做日志緩沖區 1/3滿 或者包含1M 的緩沖數據時。 由于上面的原因,使用一個大于3M的重做日志緩沖區是不實際的——Oralce永遠無法完全使用它。與DBWn必須執行分散的I/O 不同,重做日志是以順序寫入的方式寫入的,這樣執行大量的批寫入更加有效率。 6、ARCn (Archive Process) ARCn是負責copy 已經寫滿的online redo log到另外一個地方。注重這里的redo log的copy不是文件級別的Copy,而是copy redo log里面的entries.這些歸檔日志可以用來處理Media Recovery.比如你的system01.dbf文件丟失,那么你可以利用你一周前的備份,Restore 該數據文件。 然后請求數據庫應用從備份開始后的所有的歸檔日志和在線日志文件,這樣的話,該數據文件就可以“追”上數據庫中的其它的數據文件,然后我們可以繼續processing,而不會丟失數據。中文翻譯 "catch up" that file with the reset of the datafiles in our database.中的"cacth up"翻譯為"彌補",我覺得翻譯成"追"更合適,因為這樣才能更好的理解日志其實是一種數據流。
實際上,備份是baseline,而日志是一種數據流,指向到系統crash的點,兩者共同使用才能回到當前點,其實中文就這個很模糊,所謂恢復是兩件事情,restore和recover . 7、RECO (Distributed Database Recovery)