SCN, Checkpoint 與 oracle資料庫恢復的關係(final)

tolywang發表於2011-03-14


SCN 與 CHECKPOINT

checkpoint發生時,將當時的checkpoint SCN 寫入資料檔案頭(稱之為start scn)和
控制檔案 (存放系統checkpoint SCN), 同時通知DBWR程式將cache中dirty block寫到
資料檔案。

CKPT程式也會在控制檔案中記錄RBA(redo block address), 以標誌Recovery需要從日誌
中哪個地方開始。與checkpoint相關的SCN號有四個,其中三個存在控制檔案中,一個存
放在資料檔案頭中。這四個分別是:

 

1).System Checkpoint SCN
當checkpoint完成後,ORACLE將System Checkpoint SCN號存放在控制檔案中。我們可以
透過下面SQL語句查詢:
select checkpoint_change# from v$database;


2).Datafile Checkpoint SCN
當一個檢查點動作完成之後,Oracle就把每個資料檔案的scn單獨存放在控制檔案中.
我們可以透過下面SQL語句查詢所有資料檔案的Datafile Checkpoinnt SCN號。
select name,checkpoint_change# from v$datafile;


3).Start SCN (啟動SCN)
checkpoint完成後,將產生的checkpoint SCN 寫入資料檔案頭(稱之為start scn).
這個SCN用於檢查資料庫啟動過程是否需要做media recovery.
我們可以透過以下SQL語句查詢:
select name,checkpoint_change# from v$datafile_header;

注意:     資料檔案頭中的檢查點SCN(start SCN) 與控制檔案中記錄的資料檔案檢查點SCN號含義是一樣的。 也就是說,一旦發生全域性範圍以及檔案級別的檢查點時,不僅會將這時的檢查點SCN號記錄到控制檔案,還會記錄在檢查點作用的資料檔案頭部。 


4).End SCN號(stop scn, 終止SCN)
這個SCN號用於檢查資料庫啟動過程是否需要做instance recovery.
我們可以透過以下SQL語句查詢:
select name,last_change# from v$datafile;
在正常的資料庫操作過程中,所有正處於聯機讀寫模式下的資料檔案的終止scn都為null.

 

SCN的值不會為0,除非重建資料庫,一般SCN值也是不重複的。
SCN不連續原因可能如下:
1.當發生日誌組切換的時候
2.當符合LOG_CHECKPOINT_TIMEOUT,LOG_CHECKPOINT_INTERVAL,fast_start_io_target,
fast_start_mttr_target引數設定的時候
3.當執行ALTER SYSTEM SWITCH LOGFILE的時候
4.當執行ALTER SYSTEM CHECKPOINT的時候
5.當執行alter tablespace XXX begin backup,end backup的時候
6.當執行alter tablespace ,datafile offline的時候;

 


---------------------------------------------------

--- 在資料庫執行期間的scn值

在資料庫開啟並執行之後,控制檔案中的系統檢查點、控制檔案中的資料檔案檢查點scn
和每個資料檔案頭中的啟動scn都是相同的。控制檔案中的每個資料檔案的終止scn都為null.

在安全關閉資料庫的過程中,系統會執行一個檢查點動作,這時所有資料檔案的終止scn
都會設定成資料檔案頭中的那個啟動scn的值。 在資料庫重新啟動的時候, Oracle將檔案
頭中的那個啟動scn與資料庫檔案檢查點scn(控制檔案中)進行比較,如果這兩個值相互匹
配,那麼不需要Media Recovery, oracle接下來還要比較資料檔案頭中的啟動scn和控制
檔案中資料檔案的終止scn, 如果這兩個值也一致,就意味著所有對資料庫的修改都沒有在
關閉資料庫的過程中丟失,因此這次啟動資料庫的過程也不需要任何恢復操作(即不需要實
例恢復),此時資料庫就可以開啟了。當所有的資料庫都開啟之後,儲存在控制檔案中的數
據檔案終止scn的值再次被更改為null,這表示資料檔案已經開啟並能夠正常使用了。

---------------------------------------------------

 

還需要注意的是  :      在資料庫重新啟動的時候,   Oracle首先比較(每個)檔案
頭中的那個啟動scn (start SCN) 與控制檔案中記錄的 (每個) 資料庫檔案檢查點scn, 如果他們都相互匹配, 那麼不需要Media Recovery. 

 但是如果只是控制檔案中記錄的資料檔案檢查點(多個資料檔案,對應多個SCN) ,  與 (對應的)  資料檔案頭中的啟動SCN (start scn) 相同 ,     而在每個線上的可讀可寫的資料檔案“之間”,他們的檢查點SCN不相同, 那麼也要求Media Recovery . 

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

相關文章