Oracle梳理

jerryhui發表於2009-04-09

Oracle伺服器包括:Oracle例程和Oracle資料庫。

Oracle例程包括:SGA(系統全域性區)和後臺程式。

系統全域性區:資料庫高速緩衝區(db_cache_size),重做日誌緩衝區(log_buffer),共享池(shared_pool_size).

後臺程式:DBWR,LGWR,PMON,SMON,CKPT.

使用者在客戶端通過應用程式或者Oracle客戶端提交SQL語句,客戶端為其分配使用者程式,伺服器端為其分配伺服器程式,使用者的SQL操作都是伺服器程式處理的。

共享池用於存放最近執行的SQL語句和資料字典資訊;資料庫高速緩衝區用於存放最近訪問的資料塊資訊。可以使用DB_nk_CACHE_SIZE定義非標準資料快取記憶體。

重做日誌緩衝區:用於記載例程變化,其尺寸由初始化引數LOG_BUFFER定義。

重做日誌用於記載資料庫變化,當執行例程恢復或介質恢復時需要使用重做日誌。當執行DDL和DML操作時,事物變化會被寫入到重做日誌緩衝區,而在特定時刻LGWR會將重做日誌緩衝區的內容寫入重做日誌。每個操作執行緒至少要包含兩個重做日誌組,並且這些重做日誌組是迴圈使用的。當一組日誌寫滿後,Oracle會自動進行日誌切換,並LGWR會將事務變化寫入到下一日誌組。

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

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

1.提交事務(COMMIT)

2.每隔三秒鐘

3.當重做資訊超過1M時

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

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

當Oracle處於ARCHIVELOG模式時,當後臺程式LGWR進行日誌切換時,那麼後臺程式ARCH會自動將重做日誌內容複製到歸檔日誌中。

當重做日誌寫完之後,資料庫開始寫資料檔案。

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

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

1.系統發出檢查點(checkpoint)

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

3.刪除或截斷表

4.使表空間正常離線(Alter Table....Offline Normal)

5.開始表空間備份(Alter Tablespace....Begin Backup)

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

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

1.日誌切換

2.關閉例程(Shutdown Abort例外)

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

4.由初始化引數Fast_start_mttr_target強制發出檢查點

 

 

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

相關文章