Oracle熱備份指在資料檔案正在使用的時候對其進行複製。複製的過程中,DBWR也在進行,因此備份可能得到一些“不一致”的備份:
系列文章:Oracle恢複內部原理 http://www.bkjia.com/search.aspx?where=nkey&keyword=19824
a.一些資料區塊可能比其他塊的時間要早
b.一些資料區塊的SCN可能比資料檔案頭部的SCN還要早
c.一些塊可能包含了一個重做記錄的部分更新,其他的部分可能在這個資料檔案上或者其他資料檔案上
d.一些資料區塊可能會被損壞,因為塊的頭部和尾部是在不同的時間複製的。
上面的這種複製方式得到的備份組在還原後和介質恢複的時候是沒有用的。介質恢複時會從資料檔案上的開始熱備SCN(見4.1中第二步)直至恢複過程結束(完整或不完整的恢複)。這樣資料檔案從事務上講是一致的。
熱備份一共有三個步驟:
a.執行命令:ALTER TABLESPACE ... BEGIN BACKUP.
b.叫用作業系統的複製工具複製該資料表空間下所有資料檔案。
c.執行命令:ALTER TABLESPACE ... END BACKUP
4.1 BEGIN BACKUP
BEGIN BACKUP命令實際對錶空間的所有資料檔案進行下列操作(不需要按順序):
1. 在每個資料檔案頭部設定了熱備份模糊標誌位,表明該資料檔案處於熱備份狀態。帶有這種標記的資料檔案頭表明這個備份是熱備份。標誌的目的是凍結這個資料檔案頭部的檢查點(停留在begin backup命令發出那一刻的SCN)。這個值作用在於當備份被還原時,介質恢複能從足夠早的SCN開始重新應用重做日誌。因為我們不能保證資料檔案頭首先被複製,因此熱備份期間要將資料檔案頭的檢查點凍結支援熱備份結束。這個標準也凍結了資料檔案的檢查點(以及在控制檔案中的記錄的檢查點),以免被線程檢查點更新。7.2版本後資料檔案頭新增了一個備份檢查點以接收原本屬於被凍結的檢查點該接收的更新。
2. 做了一個資料檔案檢查點操作,捕獲了開始熱備時候的檢查點資訊,包括開始熱備的SCN。當資料檔案被檢查點時,所有執行個體都要重新整理跟該資料檔案有關的髒資料。如果此時需要執行個體恢複,檢查點將等待恢複完成再繼續。在開始備份的時候對資料檔案進行檢查點操作保證了在熱備份期間,只有在發出熱備份命令之後的時間裡修改的塊可能會被寫到資料檔案上。
3. [跟平台有關,可選]:熱備份後開始資料區塊的前鏡像記錄。記錄過程中,所有執行個體將每個要修改塊的完整的塊而不是修改向量記錄到重做日誌中。這是為了防止恢複中遇到零碎的塊(不一致的塊),這多發生在資料區塊的大小比作業系統的塊要大的時候,更新資料區塊導致前一部分和後一部分分別在不同的時間被複製。在熱備份後恢複進程可以利用重做日誌中的記錄的完整前鏡像構建資料區塊。
4. 設定資料檔案頭部的檢查點跟開始熱備份時刻的檢查點一致,並凍結它直至發出“END BACKUP”命令。
5.清除了資料檔案的聯機模糊位標誌。在熱備份期間該狀態位一直是被清除的,直至發出“END BACKUP”命令。
4.2 複製檔案
複製是由作業系統的工具來完成。管理員必須保證複製操作發生在“BENGIN BACKUP”和“END BACKUP”之間或者檔案沒有使用的時候。