20、關於backup mode

yyycxhtx發表於2007-08-06

將資料庫置於backup mode時,依然要寫資料檔案,只是不改變datafile header block.這是做的備份是不一致備份(inconsisitent backup)

[@more@]

1、為什麼要將表空間置於熱備狀態?

這是因為OS在Copy Block時的無序性,也就是說在Copy資料檔案的時候並不能保證
最先Copy 出來的Block是Datafile header Block(因為Datafile header Block中記錄著
datafile 的SCN,恢復的時候就是從這個Block中記錄的SCN開始)。
例如:
OS Copy 開始時Block 1 的時間為t1,Copy 過程中Block 1 可能被別的程式修改,Copy 完成之時的時間為t2,
而此時開始Copy datafile Header block,時間為t3,這樣在恢復的時候是從t3 開始恢復的,也就是說此時Block 1 將丟失t1到t3這段時間內的資料。所以說不置於熱備狀態是不可取的。

另外當表空間置於熱備狀態時,會產生一個Checkpoint,這個Checkpoint 的SCN會記錄在datafile header,恢復的時候就是從這個SCN開始,還有就是在熱備狀態下Oracle會鎖定Datafile header,這個時候對資料檔案的修改將不會修改Datafile header的SCN,但是Checkpoint cnt是增加的。

最後,Oracle 建議Copy 資料檔案是用Oralce 提供的Ocopy命令而不是OS 的Copy。



2、熱備過程中為什麼要將備份模式下在對Data block更新時,將這個Block的映象寫到Redo log中?

這是由於Oralce Block 和OS Block的差異造成的,Oracle的最小儲存單位是Block,通常是8K,而OS最小的最小儲存單位是Sector,通常是512B。這種情況下一個Oracle Block是由16個OS的Block組成。這樣的話,就會有這樣一種情況:

在Copy 一個Oracle Bock的時候,可能在Copy 這個Oracle Block 當中的一些OS Block的同時,
有些程式在對這個Oracle Block中的另外的OS Block進行修改,這樣就造成了這個Oralce Block
的不一致。

所以在熱備過程中,對備份塊修改之前,先將這個塊的映象Copy 一份到Redo log,恢復的時候,遇到不一致的塊的時候,就先從Redo log中將這個Block映象Copy 回去,再應用以後的Redo
log 進行恢復。


3、備份過程中寫不寫資料檔案?

寫不寫資料檔案是由DBWn決定的,只要符合DBWn寫資料檔案的條件,寫資料檔案是肯定。

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

相關文章