Oracle

恢復 RMAN 備份

  • March 13, 2022

早上好,閱讀 Oracle 的文件後,我找到了一種在備份數據庫時感覺很舒服的方法,但是我找不到關於恢復它們的令人滿意的資訊……在下面的程式碼中,我將展示我是如何採取的備份,假設數據庫已經啟動Archivelog和Controlfile自動備份,使用Win2016 Server和Oracle 12c和oracle_sid正確設置:

   C:\> sqlplus owner/password@database as sysdba
   SQL> shutdown immediate;
   SQL> startup mount;
   SQL> exit;
   C:\> rman target owner/password@database
   RMAN> backup archivelog all format "E:\Backup\%d_ALogs_%e_%p.Dmp" delete input;
   RMAN> backup database format "E:\Backup\%d_%f_%p.Dmp";
   RMAN> alter database open;

這時候我把控製文件的備份複製到同一個目錄下,把所有的文件都壓縮到.7z,然後我把它移到不同的伺服器上。假設我想將此數據庫移動到不同的伺服器中,或者由於故障或系統更新(例如到 Win 2019)而需要格式化同一伺服器,並且我需要恢復它。安裝 Oracle 12c 後(為簡單起見,我將安裝相同的版本,但我可能想要/需要安裝第 19 個;讓我們再次面對這個問題),我創建一個與舊數據庫同名的新數據庫,相同的所有者使用相同的密碼,我為系統和 sysdba 分配了與舊密碼相同的密碼和相同的配置參數。一切都一樣,只是作業系統和 Oracle 是新安裝的,我需要恢復數據庫。據我所知,我不 不需要存檔日誌備份,因為在備份期間我將它們全部刷新並永久儲存在數據庫中,對嗎?我也不需要控製文件,因為數據庫是由 Oracle 創建的,對嗎?現在我提取我在 E:\Backup 中創建的最後一個 .Dmp 文件,關閉數據庫作為我之前的程式碼,在 RMAN 中,我給出:

   RMAN> restore database <with what parameters?>;
   RMAN> recover database;
   RMAN> alter database open;

我找到了指定參數的不同方法,但據我所知,最正確的方法是:

   RMAN> restore database format "E:\Backup\filename.Dmp";

它可以工作嗎?

非常感謝您,請原諒我如此冗長,但我需要/想要盡可能精確。

一切都一樣

錯誤的。每個數據庫都有一個唯一的數據庫 ID ( dbid)。

我不需要存檔日誌備份,因為在備份期間我將它們全部刷新並永久儲存在數據庫中

基本上是正確的,因為您已經關閉了數據庫。但是,Oracle 不使用術語“刷新存檔日誌”。它將重做日誌緩衝區刷新為重做日誌文件,然後(當重做日誌文件已滿或請求 Oracle 時)將重做日誌文件歸檔到歸檔日誌。

我也不需要控製文件

錯誤的。您的原始數據庫和新創建的數據庫不同dbid

您不需要預先創建數據庫。實際上,如果您從需要的數據庫開始,您可能會無法繼續。

您的完整數據庫備份應該有多個文件。應該有一個“控製文件自動備份”,它是一個小(幾十MB)的文件c_,預設開始。

恢復數據庫的命令應該是

  1. 設置環境變數ORACLE_SID
  2. 恢復spfile(如果您不需要恢復spfilepfile從備份中可以跳過這些)
RMAN> startup nomount
RMAN> restore spfile from '<path to Control File auto backup>';
RMAN> shutdown immedate
RMAN> startup nomount
  1. 還原 controlfile和數據庫
RMAN> restore controlfile from '<path to Control File auto backup>';
RMAN> shutdown immedate
RMAN> startup mount
RMAN> restore database;
RMAN> recover database; -- shouldn't be needed because DB was shutdown gracefully before backup
RMAN> alter database open resetlogs;

可能不是。從 rman 備份恢復數據庫時,實際上是從頭開始建構該數據庫。您在新伺服器上“預先創建”的數據庫沒有任何意義。您需要恢復備份,首先恢復其 spfile,然後恢復其自己的控製文件。此外,由於您為備份關閉了數據庫,因此您有一個“一致的”備份,因此歸檔日誌不會發揮作用。另外,我不會將您的 rman 備份命名為“.dmp”,因為這是 exp 或 expdp 創建的文件的預設副檔名。查看這些文件的其他人會認為它們是導出轉儲,而不是 rman 備份。

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