Oracle使用者管理熱備份原理
Oracle在歸檔模式下,可以使用使用者管理的熱備份。
執行begin backup之後,oracle會把將要備份的資料檔案都標記為hot-backup-in-progress,鎖定所要備份的datafile header的scn,例如此時scn=100,同時redolog中會記住這個scn,其他資料檔案正常使用,scn會繼續增長。之後在備份所要備份的資料檔案過程中,資料檔案是允許寫入和checkpoint,而且可能不止一次checkpoint,而這個過程中的所有操作和checkpoint也會正常記錄到redolog與archivelog中。
oracle系統資料檔案最小儲存單元是資料塊,比如8192bytes,而作業系統的最小儲存單元os快為固定的512bytes,這樣問題就產生了。
在oracle執行begin backup之後進行copy操作,這個copy操作底層屬於作業系統的命令,每次只能copy一個os block,假如oracle資料庫的block單位為8192bytes,那麼這個oracle block就由16個os block組成,這裡為了方便理解,我們把他們標記為1--16個os block。copy命令對於資料塊的複製時沒有順序的,也就是說第一次可能copy 1號block,而第二次可能就會copy 16號block。而在這個copy過程中,對於oracle熱備份機制來說對oracle整個的block是允許讀寫,這樣就會產生如下的問題,例如:執行begin backup,oracle鎖定datafile header的scn,假設此時oracle block中儲存的資料室10,敲copy進行復制,系統就會將這個oracle block中的16個os block一個一個地複製到備份目錄,假如複製到第五個os block時候,如果有資料寫入,例如需要將這個資料塊中的資料update為20,oracle就會呼叫dbwr程式對這個資料塊進行資料修改,同樣dbwr程式也是不順序地將資料寫入這16個os block,所以他就有可能從已經複製完的那五個os塊中開始寫資料,也有可能從剩下的11個os block中開始寫資料。如果從剩下的11個os block中開始寫入的話,就會帶來一個嚴重的後果,熱備份copy正在進行,而剩下的11個block其中的幾個有可能資料已經改變,這樣copy出來的備份檔案肯定會不一致,copy出來的備份檔案對於這個oracle block來說前5個block是原來儲存資料10的資訊,而後來copy的11個block就有可能儲存的是update之後的資料20的資訊,這樣是絕對不允許的。
因此,oracle做了這樣的一個機制,在copy過程中如果需要有資料update,dbwr程式告訴oracle我要update,這時候oracle就會通知備份系統,先把所要寫入的那個oracle block完全映象到redo中,redo記錄的是整個資料塊的映象,而不是一條資訊。之後dbwr在開始向這個oracle block中的16個os block隨機寫入資料。這樣,在資料恢復的時候,oracle檢查是從被鎖定的那個scn時刻起開始恢復,如果檢查到那個時間點上的某個oracle block出現上述所說的那種“損壞的block”,他就會將redo中的映象在完全copy到這個oracle block,這樣,這個資料塊就是begin backup的那個時間點時候的完整的資料塊了,之後redo就可以從這個scn進行向後的恢復工作。
這個過程也就解釋了為什麼在熱備過程中有時候redo會急劇增加的現象。
結束熱備份end backup之後,oracle解鎖備份的datafile header的scn,自動同系統當前的scn同步,例如此時的scn已經變為1000,那麼備份檔案的scn會與系統自動同步到1000。
因為在備份過程中資料檔案及redo是允許寫入的,因此備份的資料檔案不僅包含scn=100以前的資料,而且還包含scn在100和1000之間的所有運算元據。這就是我上述所說的“損壞的block”。
在資料恢復的時候,將備份的資料檔案複製到oracle系統之後,因為備份檔案的scn是在執行alter database begin backup時候的時間點,也就是scn=100,oracle會在redolog中查詢這個scn,如果這個scn時間點有“損壞的block”,redo先把以前映象好的block完全複製回去,然後自動執行scn大於100之後的所有操作及資料,寫入當前資料檔案。而從備份檔案恢復到當前的資料檔案中scn在100和1000之間的資料將會被redo操作覆蓋。
原文地址:
http://blog.chinaunix.net/uid-182041-id-84238.html
個人理解
首先,需要開啟歸檔模式。
髒塊寫入資料檔案的時候,同時寫入redo log
作業系統複製資料檔案的同時,Oracle還在不斷寫入髒塊,所以資料檔案本身是不一致的
begin backup凍結資料檔案頭的SCN,恢復應該從此SCN開始,應用redo log,遇到損壞的塊,則從redo log中查詢
end backup結束備份之後,則解凍資料檔案頭的SCN資訊。
執行begin backup之後,oracle會把將要備份的資料檔案都標記為hot-backup-in-progress,鎖定所要備份的datafile header的scn,例如此時scn=100,同時redolog中會記住這個scn,其他資料檔案正常使用,scn會繼續增長。之後在備份所要備份的資料檔案過程中,資料檔案是允許寫入和checkpoint,而且可能不止一次checkpoint,而這個過程中的所有操作和checkpoint也會正常記錄到redolog與archivelog中。
oracle系統資料檔案最小儲存單元是資料塊,比如8192bytes,而作業系統的最小儲存單元os快為固定的512bytes,這樣問題就產生了。
在oracle執行begin backup之後進行copy操作,這個copy操作底層屬於作業系統的命令,每次只能copy一個os block,假如oracle資料庫的block單位為8192bytes,那麼這個oracle block就由16個os block組成,這裡為了方便理解,我們把他們標記為1--16個os block。copy命令對於資料塊的複製時沒有順序的,也就是說第一次可能copy 1號block,而第二次可能就會copy 16號block。而在這個copy過程中,對於oracle熱備份機制來說對oracle整個的block是允許讀寫,這樣就會產生如下的問題,例如:執行begin backup,oracle鎖定datafile header的scn,假設此時oracle block中儲存的資料室10,敲copy進行復制,系統就會將這個oracle block中的16個os block一個一個地複製到備份目錄,假如複製到第五個os block時候,如果有資料寫入,例如需要將這個資料塊中的資料update為20,oracle就會呼叫dbwr程式對這個資料塊進行資料修改,同樣dbwr程式也是不順序地將資料寫入這16個os block,所以他就有可能從已經複製完的那五個os塊中開始寫資料,也有可能從剩下的11個os block中開始寫資料。如果從剩下的11個os block中開始寫入的話,就會帶來一個嚴重的後果,熱備份copy正在進行,而剩下的11個block其中的幾個有可能資料已經改變,這樣copy出來的備份檔案肯定會不一致,copy出來的備份檔案對於這個oracle block來說前5個block是原來儲存資料10的資訊,而後來copy的11個block就有可能儲存的是update之後的資料20的資訊,這樣是絕對不允許的。
因此,oracle做了這樣的一個機制,在copy過程中如果需要有資料update,dbwr程式告訴oracle我要update,這時候oracle就會通知備份系統,先把所要寫入的那個oracle block完全映象到redo中,redo記錄的是整個資料塊的映象,而不是一條資訊。之後dbwr在開始向這個oracle block中的16個os block隨機寫入資料。這樣,在資料恢復的時候,oracle檢查是從被鎖定的那個scn時刻起開始恢復,如果檢查到那個時間點上的某個oracle block出現上述所說的那種“損壞的block”,他就會將redo中的映象在完全copy到這個oracle block,這樣,這個資料塊就是begin backup的那個時間點時候的完整的資料塊了,之後redo就可以從這個scn進行向後的恢復工作。
這個過程也就解釋了為什麼在熱備過程中有時候redo會急劇增加的現象。
結束熱備份end backup之後,oracle解鎖備份的datafile header的scn,自動同系統當前的scn同步,例如此時的scn已經變為1000,那麼備份檔案的scn會與系統自動同步到1000。
因為在備份過程中資料檔案及redo是允許寫入的,因此備份的資料檔案不僅包含scn=100以前的資料,而且還包含scn在100和1000之間的所有運算元據。這就是我上述所說的“損壞的block”。
在資料恢復的時候,將備份的資料檔案複製到oracle系統之後,因為備份檔案的scn是在執行alter database begin backup時候的時間點,也就是scn=100,oracle會在redolog中查詢這個scn,如果這個scn時間點有“損壞的block”,redo先把以前映象好的block完全複製回去,然後自動執行scn大於100之後的所有操作及資料,寫入當前資料檔案。而從備份檔案恢復到當前的資料檔案中scn在100和1000之間的資料將會被redo操作覆蓋。
原文地址:
http://blog.chinaunix.net/uid-182041-id-84238.html
個人理解
首先,需要開啟歸檔模式。
髒塊寫入資料檔案的時候,同時寫入redo log
作業系統複製資料檔案的同時,Oracle還在不斷寫入髒塊,所以資料檔案本身是不一致的
begin backup凍結資料檔案頭的SCN,恢復應該從此SCN開始,應用redo log,遇到損壞的塊,則從redo log中查詢
end backup結束備份之後,則解凍資料檔案頭的SCN資訊。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1133556/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle熱備份原理分析Oracle
- oracle聯機熱備份的原理,及rman增量備份原理Oracle
- Oracle聯機熱備份的原理及rman增量備份原理Oracle
- 熱備份原理
- oracle聯機熱備份的原理及rman增量備份原理(zt)Oracle
- oracle聯機熱備份的原理(轉)Oracle
- oracle聯機熱備份的原理(1)Oracle
- oracle聯機熱備份的原理(2)Oracle
- Oracle 熱備份Oracle
- oracle的熱備份和冷備份Oracle
- 怎麼進行Oracle使用者管理的熱備份,詳細步驟Oracle
- Oracle OCP(62):熱備份Oracle
- oracle雙機熱備份Oracle
- Oracle冷備份和熱備份的處理Oracle
- Oracle 熱備份和冷備份的區別Oracle
- 揭祕ORACLE備份之--熱備份(也叫聯機備份)Oracle
- 使用者管理的熱備份方式複製資料庫資料庫
- oracle雙機熱備份方法Oracle
- Oracle學習系列—資料庫備份—熱備份Oracle資料庫
- Oracle資料庫冷備份與熱備份操作梳理Oracle資料庫
- Oracle物理熱備份指令碼(ZT)Oracle指令碼
- Oracle資料庫備份與恢復之三:OS備份/使用者管理的備份與恢復Oracle資料庫
- linux下oracle熱備份指令碼LinuxOracle指令碼
- oracle備份恢復的大致原理!Oracle
- mysql的冷備份與熱備份MySql
- Oracle備份恢復之熱備份恢復及異機恢復Oracle
- Oracle RMAN備份以及壓縮原理分析Oracle
- RMAN備份原理
- Oracle資料庫備份與恢復之匯出/匯入(EXP/IMP)、熱備份和冷備份Oracle資料庫
- oracle備份--離線備份Oracle
- 生成熱備份指令碼指令碼
- 初探MySQL資料備份及備份原理MySql
- XtraBackup完整備份與增量備份的原理
- MySQL · 物理備份 · Percona XtraBackup 備份原理MySql
- oracle實驗記錄 (恢復-關於熱備份)Oracle
- MySQL的冷備份和熱備份概念理解(轉)MySql
- RMAN的備份原理
- 【Mysql】xtrabacupk備份原理MySql