【RMAN】當表空間處於備份狀態時發生了什麼

恩強Boy發表於2021-02-01

對於比較老的資料庫版本,如果要執行線上(熱)備份,我們必須將表空間設定為begin backup 模式,然後複製資料檔案,後將表空間設定為 end backup 模式。現在的熱備基本都是透過 RMAN 工具來實現的,不過原理是一樣的。當然要確保資料庫處於 archivelog 模式。

示例1 : 執行一個簡單的備份

SQL> alter tablespace system begin backup;

-- 作業系統層面複製資料檔案

$ copy system01.dbf /backup/

SQL> alter tablespace system end backup;

示例2 : 備份整個資料庫

SQL> alter database begin backup;

$ copy all datafiles /backup/

SQL> alter database end backup;

線上備份可能會導致一個塊內的資料不一致。例如,我們正在備份資料檔案system01.dbf 中的 block 100 。另外, copy 命令正在讀取整個塊,而 DBWR 正在更新資料塊。在這種情況,複製命令可以在塊的上半部分讀取舊資料,在塊的下半部分讀取新資料。結果稱為“破裂塊”,這就意味著對於一個給定的 SCN ,該資料塊中包含的資料不一致。

針對以上記憶體,Oracle 的解決辦法如下:

1.  當資料檔案處於熱備份模式時,當資料塊被修改時,資料塊被更改的部分會被寫入redo log 中。在這種情況下,我們可能會遇到複製資料檔案的程式和 DBWR 程式同時在一個資料塊上工作。

比如,作業系統一次從磁碟讀取512 位元組,備份程式去讀取一個 8k 的資料塊,同時 DBWR 請求重寫這個塊。此時備份程式得到的是一個斷裂的資料塊,頭部和尾部處於兩個時間點。

2.  當資料檔案處於熱備份模式時,不會更新最新完成檢查點SCN 的資料檔案頭。這樣可以讓恢復程式知道,完全恢復該資料檔案可能需要哪些 archive redo log 。為了限制這種額外日誌記錄的影響,我們應該確保一次只將一個表空間置於備份模式中,並在對錶空間進行備份後立即將其從備份模式中取出。這種方式將盡可能地減少記錄的塊的數量。

儘量在資料庫的負載最少的情況下進行線上熱備份,這樣生成的redo log 會更少。

 

 

---- end ----


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

相關文章