Oracle

如何對不打亂正常備份週期的 Oracle 數據庫進行備份?

  • October 5, 2018

目標

我想將數據庫從伺服器 A 移動到伺服器 B。兩台伺服器具有相同的技術,因此一種方法是關閉源數據庫,將數據文件、控製文件、重做日誌、參數文件從 A 複製到 B,然後啟動數據庫在 B 上。但這需要很長時間,所以我將使用涉及存檔日誌的方法。例如,我可以使用 dataguard 在 SERVER B 上建構一個備用數據庫,並在遷移期間切換到該備用數據庫。但由於某些原因,我不想使用備用數據庫,也無法訪問 A 數據庫的備份以在 B 上恢復它。

方法

在 RMAN 之前,我通過以下方式執行此操作:

  1. 將A的數據庫設置為備份模式,並將所有數據文件複製到伺服器附加的磁碟中,並取消設置備份模式。
  2. 將此磁碟移動到 B 並將其附加到它。
  3. 現在不時將檔案運送到B並應用
  4. 在遷移期間,最後一個檔案被帶到 B 並應用,並複制數據庫。

當然,我也可以用 RMAN 試試這個。而不是複制所有檔案,我也可以使用增量備份。

所以我做了以下事情:

  1. 對連接到伺服器 A 的磁碟進行 0 級備份。
  2. 將磁碟移動到 B 並在伺服器 B 上恢復數據庫。
  3. 現在不時將檔案運送到B並應用
  4. 在遷移期間,最後一個檔案被帶到 B 並應用,並複制數據庫。

除了最後一個階段,我什至可以應用增量備份而不是存檔,但在這裡我對此不感興趣。

問題

我現在的問題是 A 上的數據庫使用增量備份進行備份: 1. 週日進行 0 級備份 2. 剩餘 6 天進行 1 級備份

我想在周三複製我的 0 級備份以進行遷移。但這會破壞正常備份。假設我在周三早上做這個 0 級備份,那麼週三晚上的 1 級備份是指今天早上的 0 級備份,而不是像往常一樣指向前一天的 1 級備份。但是在星期四進行還原/恢復的情況下,我們會遇到問題,因為星期三 0 級備份的磁碟不再可用。我認為數據庫仍然可以恢復,因為失去的時間間隔可以通過歸檔日誌恢復。但我想要一個不會弄亂正常備份的解決方案。所以星期三的一級備份應該是指星期二的一級備份。

解決方案

我怎樣才能做到這一點?

目前我看到以下方式:

我使用活動數據庫中的副本將 A 上的數據庫複製到連接到 A 的磁碟上。不得打開此數據庫,以便以後可以使用歸檔日誌恢復它。該磁碟從 A 分離並移動到 B。這里數據文件註冊為數據文件副本並恢復到伺服器 B。

但這需要 A 上的附加實例,以便我可以復製到該實例。

另一種方式可能是

BACKUP INCREMENTAL LEVEL 1... FOR RECOVER OF COPY WITH TAG... 

如此處所述

手冊說:

BACKUP INCREMENTAL LEVEL 1... FOR RECOVER OF COPY WITH TAG...命令實際上並不總是創建 1 級增量備份。如果沒有特定數據文件的 0 級映像副本備份,則執行此命令會​​在磁碟上創建具有指定標記的數據文件的映像副本備份,而不是創建 1 級備份。

每次將數據文件添加到數據庫時,都會在腳本下次執行時創建新數據文件的映像副本。此後,為該數據文件創建第一個 1 級增量,並且在所有後續執行中,新數據文件的處理方式與任何其他數據文件一樣。

必須使用標記來標識為在此策略中使用而創建的增量 0 級數據文件副本,以便它們不會干擾您實施的其他備份策略。如果您有多個有效的增量備份策略,則 RMAN 無法明確創建增量 1 級備份,除非您標記 0 級備份。

這聽起來不錯,但我實際上必須對此進行測試。

我的問題

您建議使用什麼方法來獲得被正常備份週期的以下 0 級備份忽略的 0 級線上備份?

FULL-Backup 不會干擾正常備份。

《Oracle數據庫線上文件11g第2版(11.2)》的《數據庫備份與恢復參考》中對備份操作數FULL的BACKUP命令描述來看:

創建備份中包含的所有數據文件塊的備份。FULL是相反的INCREMENTALFULL如果既未指定也未指定,RMAN 預設會進行完整備份INCREMENTAL。完整備份對後續的增量備份沒有影響,並且不被視為任何增量備份策略的一部分。但是,可以通過使用RECOVER命令應用增量備份來增量更新完整映像副本備份。

我會使用 RMAN 來DUPLICATE DATABASE TO OTHERDB. 隨意使用適合您的環境/要求的相關方法之一。

參考:

引用自:https://dba.stackexchange.com/questions/219302