【體系結構】SCN與checkpoint(檢查點)

恩強Boy發表於2021-02-01

1.  什麼是system change number(SCN)?

SCN 是一個戳,它定義了資料庫在某一時刻的提交版本。 Oracle 為每一個提交的事務分配一個 SCN SCN 的值是對資料庫進行更改的邏輯時間點,也可以理解為 SCN 是時間點的另一種表達方式。 Oracle 利用這個數字來記錄對資料庫所做的更改。

SCN 是一個 6Byte 48bit )的數字,它由兩部分表示: SCN_BASE SCN_WRAP SCN_BASE 是一個 4Byte 32bit )的數字, SCN_WRAP 是一個 2Byte 16bit )的數字。當 SCN_BASE 達到其最大值( 2 32 次方 = 4294967296 ),SCN_WRAP 將增加 1 SCN_BASE 同時將被重置為 0. 這將一直持續到 SCN_WRAP 達到其最大值,及 2 16 次方 =65536

SCN = (SCN_WRAP * 4294967296) + SCN_BASE

12.2 版本開始,相容性為 12.2 SCN 是一個 8Byte 的數字, SCN 的最大值可以高達 2 63 次方。

SCN 隨著每個事務的提交完成而增加。提交不會寫資料檔案,也不會更新控制檔案。

當前的SCN 可以透過以下查詢獲得

SQL> select dbms_flashback.get_system_change_number scn from dual;

SQL> select current_scn from v$database;

2.  什麼是Checkpoint (檢查點) ?

檢查點是將修改的處於快取的資料塊重新整理到磁碟的行為。通常,當我們對一個資料塊進行修改時,該塊的修改是在記憶體中完成的。當我們提交(commit )時,它不會寫入資料檔案,而是被寫入 redolog 。所以我們可以在例項失敗時“重演”事務。最後,系統將對磁碟上的資料檔案的修改設定檢查點。

檢查點號是將所有髒緩衝區寫入磁碟的SCN 號。在物件、表空間、資料檔案、資料庫級別都可以有檢查點。檢查點保證檢查點 SCN 之前的資料庫更改都已記錄在資料檔案中。因此,在例項恢復期間,只需要應用檢查點之後所做的那些更改進行例項恢復。檢查點的目標就是將髒緩衝區安全地從 SGA 寫入到磁碟上。

有以下幾種可能會導致檢查點發生:

- Oracle SGA 中的所有髒緩衝區都被 DBWR 寫入到資料檔案時

- redolog 發生切換時

- 當達到 LOG_CHECKPOINT_TIMEOUT 引數設定時間時

- 透過發出指令“ alter system switch logfile ”或“ alter system checkpoint

當執行檢查點時,檢查點程式會更新控制檔案。需要注意的是,檢查點操作將所有更改的髒塊寫入磁碟,透過在控制檔案中記錄這一個過程。Oracle 知道在例項失敗時需要應用哪些 redolog 。要從例項失敗中恢復, Oracle 需要應用控制檔案中記錄的最後一個檢查點之後生成的所有 redolog

commit 的時候不會觸發 DBWR 將髒塊從快取寫進磁碟上, commit 只會觸發 LGWR 。日誌切換會導致 checkpoint checkpoint 不會導致日誌切換。

當日志緩衝區滿足以下內容之一時都會觸發redo write: 滿 1MB ,滿 1/3 ,每 3 秒或每次提交。

最後DBWR LGWR checkpoint commit 的對應關係為

DBWR <---> checkpoint

LGWR <---> commit

 

 

---- end ----

 


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

相關文章