1. 程式人生 > >Oracle 資料庫後臺程序 簡介

Oracle 資料庫後臺程序 簡介

LGWR,DBWR,SMON,PMON,CKPT 是必需的五個後臺程序。ARCH 是最重要的可選後臺程序。

最重要的六個程序:

1.LGWR
重做日誌寫程序,LOG write 負責將重做日誌緩衝區記錄順序寫入重做日誌檔案。LGWR在下列情況下將重做日誌緩衝區記錄(記憶體)順序寫入重做日誌檔案(外存)中5種情況:

某個事務被提交時,重做日誌緩衝區中變化記錄超過1M,當重做日誌緩衝區中所存記錄已經超過緩衝區容量的三分之一時,在DBWR將資料庫高速緩衝區中修改過的資料塊寫到資料檔案之前;每3秒。

在ORACLE 11G中:LGWR寫日誌條件變為三個:COMMIT,達到緩衝區三分之一,DBWR寫之前.

11G 實驗步驟是:在一個會話SQLPLUS中開啟時間提示,做插入:insert into test values(9,999888); 另一個會話做:strings /u01/oradata/bys3/redo03.log| grep 999888

可以照這思路多做幾次,能發現LGWR不是3秒超時就寫日誌的。 但是用DTRACE來跟蹤LGWR程序,會發現LGWR確實是每3秒sleep,喚醒這樣的。

2.DBWR/DBWn
資料庫寫程序,DBWR/DBWn,負責將資料庫高速緩衝區中資料寫到資料檔案上。

DBWR 在下列情況下將資料庫高速緩衝區中的資料寫到資料檔案:8種情況
當髒緩衝區的數量超過所設定的限額;所設定的時間間隔已到;當有程序需要資料庫高速緩衝區卻找不到空閒緩衝區時;校驗點發生時;某個表被刪除或截斷時;某個被表空間被設定為只讀狀態時;對某表空間進行聯機備份時;某個臨時表空間被設定為只離線狀態或正常狀態等。

3.SMON
系統監管程序,如系統崩潰、斷電後重新開啟時,SMON將自己執行恢復工作。步驟為:

執行前滾,ROLL FORWARD,將寫入重做日誌檔案但未寫入資料檔案中的提交資料寫到資料檔案中(SCN)
前滾完成後立即開啟資料庫,此時可以登入並使用資料庫,這時資料檔案中可能有未提交資料,回滾沒提交的事務(資料)。
SMON還進行回收或組合資料檔案中相連的空閒區,釋放臨時段等磁碟空間維護工作。

4.PMON
程序監督程序,當某個程序崩潰時,如未正常退出SQLPLUS等,PMON負責如下清理工作:

回滾使用者當前的事務,釋放使用者所加的所有表一級和行一 級的鎖,釋放使用者所有其它資源。
同時負責:動態註冊監聽,清除使用者程序、伺服器程序

5.CKPT
檢查點程序,checkpoint 檢查點,檢查點事件是當DBWR程序把在SGA中所有已經改變的資料庫調整緩衝中的資料(包括提交和未提交資料)寫到資料檔案上時產生。 檢查點可提高效率。因為所有到檢查點為止的變化的資料都已經寫入資料檔案中,在例項恢復時檢查點之前的重做日誌記錄就不再需要,例項的恢復速度就加快了。一般的檢查點間隔在半小時以上。

6.ARCH/ARCn
歸檔日誌程序,最重要的可選後臺程序,因為如資料庫資料檔案丟失或損壞,一般資料庫要進行完全恢復,ORACLE資料庫將執行在歸檔模式。


其它程序:

7.MMAN
記憶體管理程序,負責記憶體的動態管理,分配和收回。Oracle 10g 提供了一個新的初始化引數:sga_target 來啟動 ASMM,該引數定義了整個 SGA 的總容量。
同時,初始化引數 statistics_level 必須設定為typical或all才能啟動 ASMM,如果設定為 basic,則關閉 ASMM。
ASMM只能自動調整5個記憶體池的大小,它們是:
shared pool、buffer cache、large pool、java pool 和 stream pool。我們不再需要設定這五個初始化引數。
而其他的記憶體池,比如 log buffer、keep buffer cache 等仍然需要DBA手工進行調整。

8.CJQ0 job
任務協調程序,負責資料庫中 JOB 的自動執行。

9.J001
job 具體執行程序,接受 CJQ0 分發的job任務。

10.VKTM
這個程序用於提供一個數據庫的時鐘,每秒更新;或者作為參考時間計數器,這種方式每20毫秒更新一次,僅在高優先順序時可用。通過 VKTM 程序,資料庫可以降低和作業系統的互動.

11.DIAG
主要用來捕獲例項中失敗程序的診斷資訊,並生成相應的 TRACE 檔案。該程序自動啟動不需要進行調整,如果該程序失效則自動重新啟動。

12.DBRM
Oracle資源管理器(Oracle Database Resource Manager,以下簡稱DBRM)管理資料庫資源,為不同的會話分配不同的資料庫資源。DBRM管理的資源主要包括CPU時間。

13.RECO
分散式資料庫恢復:基於2PC分散式協議,允許多個不同的修改實現原子提交,但是在真正提交前,出現網路失敗等錯誤,事務成為一個可疑的分散式事務.此時就需要RECO來負責聯絡事務協調器來發現協調的結果。在這之前事務會保持未提交狀態.當恢復網路或者錯誤解決後,RECO可能會提交事務,也可能將事務回滾

14.QMNC
高階佇列程序:QMNC會監視高階佇列.並告訴從佇列中刪除等待訊息的"出隊程序":已經有一個訊息變為可用.它們還要負責佇列傳播

15.SMCO
空間管理協調器程序:協調資料庫的主動空間管理。

16.PSP0
程序生成器程序:它主要負責生成各個後臺程序.

17.DIA0
另一個數據庫診斷程序,負責檢測Oracle資料庫中的掛起(hang)和死鎖的處理。

18.W000
命名為W000,W001,W002…,由smcO動態產生執行上述相關任務。

19.MMON
manageability monitor,與oracle10g的新特性--診斷功能相關,負責管理一些後臺任務,比收集最近修改過的 SQL 物件的統計資訊

20.MMNL
與oracle10g的新特性--診斷功能相關,會根據排程從SGA將統計結果--如會話的歷史資訊,重新整理輸出至資料庫表。

21.VKRM

Virtual Scheduler for Resource Manager Process

22.GEN0

Performs required tasks including SQL and DML

查詢後臺程序:

LINUX 系統中:

[[email protected] ~]$ ps -ef|grep ora_
oracle 21393 1 0 09:27 ? 00:00:07 ora_pmon_bys1
oracle 21397 1 0 09:27 ? 00:02:59 ora_vktm_bys1
oracle 21403 1 0 09:27 ? 00:00:03 ora_gen0_bys1
oracle 21407 1 0 09:27 ? 00:00:03 ora_diag_bys1
oracle 21411 1 0 09:27 ? 00:00:03 ora_dbrm_bys1
oracle 21415 1 0 09:27 ? 00:00:06 ora_psp0_bys1
oracle 21419 1 0 09:27 ? 00:00:11 ora_dia0_bys1
oracle 21423 1 0 09:27 ? 00:00:03 ora_mman_bys1
oracle 21427 1 0 09:27 ? 00:00:06 ora_dbw0_bys1
oracle 21431 1 0 09:27 ? 00:00:06 ora_lgwr_bys1
oracle 21435 1 0 09:27 ? 00:00:12 ora_ckpt_bys1
oracle 21439 1 0 09:27 ? 00:00:04 ora_smon_bys1
oracle 21443 1 0 09:27 ? 00:00:01 ora_reco_bys1
oracle 21447 1 0 09:27 ? 00:00:09 ora_mmon_bys1
oracle 21451 1 0 09:27 ? 00:00:12 ora_mmnl_bys1
oracle 21455 1 0 09:27 ? 00:00:01 ora_d000_bys1
oracle 21459 1 0 09:27 ? 00:00:01 ora_s000_bys1
oracle 21478 1 0 09:27 ? 00:00:02 ora_arc0_bys1
oracle 21482 1 0 09:27 ? 00:00:02 ora_arc1_bys1
oracle 21486 1 0 09:27 ? 00:00:01 ora_arc2_bys1
oracle 21490 1 0 09:27 ? 00:00:01 ora_arc3_bys1
oracle 21494 1 0 09:27 ? 00:00:01 ora_qmnc_bys1
oracle 21522 1 0 09:27 ? 00:00:10 ora_cjq0_bys1
oracle 21526 1 0 09:27 ? 00:02:16 ora_vkrm_bys1
oracle 21546 1 0 09:27 ? 00:00:01 ora_q000_bys1
oracle 21550 1 0 09:27 ? 00:00:02 ora_q001_bys1
oracle 21596 1 0 09:32 ? 00:00:03 ora_smco_bys1
oracle 26119 1 0 16:12 ? 00:00:00 ora_w000_bys1
oracle 26306 1 0 16:29 ? 00:00:00 ora_j000_bys1
oracle 26310 1 0 16:29 ? 00:00:00 ora_j001_bys1

WINDOWS 下需要在資料庫中查詢:

SQL> select program from v$session where program like ‘ORACLE.EXE%’;

PROGRAM


ORACLE.EXE (PMON
ORACLE.EXE (VKTM)
ORACLE.EXE (GEN0)
ORACLE.EXE (DIAG)
ORACLE.EXE (DBRM)
ORACLE.EXE (PSP0)
ORACLE.EXE (DIA0)
ORACLE.EXE (MMAN)
ORACLE.EXE (DBW0)
ORACLE.EXE (LGWR)
ORACLE.EXE (CKPT)
ORACLE.EXE (SMON)
ORACLE.EXE (RECO)
ORACLE.EXE (MMON)
ORACLE.EXE (MMNL)
ORACLE.EXE (Q000)
ORACLE.EXE (ARC0)
ORACLE.EXE (ARC1)
ORACLE.EXE (ARC2)
ORACLE.EXE (ARC3)
ORACLE.EXE (QMNC)
ORACLE.EXE (Q002)
ORACLE.EXE (SMCO)
ORACLE.EXE (CJQ0)
ORACLE.EXE (J001)
ORACLE.EXE (J000)
ORACLE.EXE (VKRM)
ORACLE.EXE (W000)