oracle架構之後臺程式

jerryhui發表於2009-04-02

Oracle基礎架構整理二之後臺程式

後臺程式是指由Oracle伺服器隱含執行的程式。當啟動例程時,Oracle不僅會分配SGA,還會自動後臺程式;當關閉例程時,Oracle不僅會釋放SGA所佔用的記憶體空間,而且還會釋放後臺程式所佔用的CPU和記憶體資源。Oracle提供了許多後臺程式。

1.SMON(System Monitor)

用於執行例程恢復,假定在資料庫執行過程中出現例程失敗(斷電,記憶體故障,後臺程式例外等)。此時,SGA資訊尚未被完全寫入到磁碟(資料檔案,重做日誌)。當重新開啟資料庫時,後臺程式SMON會按照以下步驟自動執行例程恢復:

(1)REDO:重新應用那些被記載到重做日誌但尚未寫入資料檔案的資料。因為所有被提交的事務已經記載到了重做日誌,所以可以確保恢復事務資料。

(2)開啟資料庫。在開啟資料庫時,既包含了被提交的資料,也包含了未被提交的資料(加鎖)。

(3)UNDO:取消未提交資料。在開啟資料庫之後,Oracle會自動使用UNDO段回退未提交的資料。

2.PMON(Process Monitor)

PMON用於監視伺服器程式的執行,並且在伺服器程式失敗時清除該伺服器程式。當訪問Oracle Server時,Oracle會在伺服器端為使用者程式(應用程式對應的程式)分配伺服器程式。假定使用者程式因地址例外意外終止執行,PMON可以輪詢檢測該伺服器程式,並執行以下操作:

.回退使用者的當前事務

.釋放伺服器程式所佔有的表鎖和行鎖。

.釋放使用者所佔用的其他資源

3.DBWR(Database Writer)

DBWR用於將資料快取記憶體的髒緩衝區資料寫入到資料檔案中。當執行DML操作時,伺服器程式會修改緩衝區,並且將這些緩衝區標識為“髒緩衝區”,將來這些髒緩衝區資料會由後臺程式DBWR寫入到資料檔案中。

預設情況下只有一個DBW0程式,通過設定初始化引數db_writer_processes可以定義最多10個DBWR程式(DBW0-DBW9)。在出現以下情況時,DBWR程式會開始工作。

.系統發出檢查點(checkpoint)

.伺服器程式不能找到空閒緩衝區

.刪除或截斷表

.是表空間正常離線(Alter Table .....OFFLINE NORMAL)。

.開始表空間備份(Alter TableSpace.....BEGIN BACKUP).

4.LGWR(Log Writer)

LGWR用於將重做日誌緩衝區所記載的全部內容寫入到重做日誌。當執行DML或DDL語句時,伺服器程式首先將事務變化寫到重做日誌緩衝區,然後才會修改資料快取記憶體。注意,Oracle總是“先日誌後修改”(先記載變化後修改資料)。因此,在將髒緩衝區資料寫入到資料檔案之前,Oracle首先將事物變化寫入到重做日誌。也就是說,在DBWR工作之前,LGWR首先將事物變化寫入到重做日誌。

在以下情況中LGWR程式會開始工作:

提交事務(commit)

每隔三秒鐘

當重做資訊超過1M時

重做日誌緩衝區已有1/3填滿

在DBWR程式將髒緩衝區寫入到資料檔案之前

5.CKPT(Checkpoint Process)

CKPT用於發出檢查點(Checkpoint),並且檢查點會同步資料庫的資料檔案,控制檔案和重做日誌。當發出檢查點時,後臺程式CKPT會將檢查點時刻的SCN(System Change Number)寫入到控制檔案和資料檔案頭部,同時會促使後臺程式DBWR將所有髒緩衝區資料寫入到資料檔案中。

當發出檢查點時,不僅後臺程式CKPT和DBWR要開始工作,而且LGWR也會將重做日誌緩衝區寫入到重做日誌,從而確保了資料檔案,控制檔案和重做日誌的一致性。在以下情況中CKPT會開始工作:

日誌切換

關閉例程(Shutdown Abort除外)

手工檢查點操作(Alter System Checkpoint)

由初始化引數fast_start_mttr_target強制發出檢查點

(6)ARCH(Archive Process)

ARCH用於將重做日誌的事務變化複製到歸檔日誌中,該後臺程式只有在ARCHIVELOG 模式下才會被啟動。預設情況下只會啟動兩個歸檔程式(ARC0,ARC1),通過設定初始化引數log_archive_max_processes可以最多定義10個歸檔程式(ARC0-ARC9)。在ARCHIVELOG模式下,當進行日誌切換時會自動生成歸檔日誌。

在Oracle伺服器中,最多可以啟動100個後臺程式。但當啟動了例程之後,後臺程式SMON,PMON,CKPT,DBWR,LGWR一直處於啟動狀態。通過查詢動態效能檢視V$BGPROCESS,可以顯示所有後臺程式的資訊。下面以顯示當前例程所啟動的後臺程式為例說明使用V$BGPROCESS的方法。

Select name,description from v$bgprocess where paddr<>'00';

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12035968/viewspace-584364/,如需轉載,請註明出處,否則將追究法律責任。

相關文章