Oracle

Oracle 11g Rman 從 Windows 平台的備份中恢復另一個數據庫名稱

  • February 24, 2021

**任何人都可以分享在 oracle 11g(Windows 平台)中使用另一個數據庫名稱將 RMAN 還原到另一台伺服器的正確方法。**我對我發現的所有 RMAN 恢復方法感到完全困惑。我已經使用命令進行了備份

BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG;

請確認是否需要單獨備份控製文件。

任何幫助將不勝感激。

預設情況下,控製文件與您的數據一起備份。這由以下命令打開或關閉:

CONFIGURE CONTROLFILE AUTOBACKUP ON;

但作為一個習慣問題,我通常會遵循以下數據備份:

backup current controlfile ;
backup spfile ;

在 Windows 上使用重複數據庫時遇到了很多麻煩。通常,我會遇到目標登錄的 NTS 權限失敗,這會阻止創建輔助數據庫。我努力解決這些錯誤……好吧,我放棄了。

這使我起草了一份“劇本”文件,其中包含手動將數據庫恢復到具有新實例名稱的新伺服器所需的所有各種作業系統和 RMAN 命令。這也讓我可以更好地控制新主機。

這些腳本在我的 Oracle 12.1 Windows 環境中進行了測試,但可能不適合您的環境。例如,我知道 RMAN 更願意在 12c 中執行 SQL 語句而不是在 11g 中。希望他們有所幫助。

這些腳本是通過多次試驗和錯誤努力創建的,基於用於還原的連結和用於更改 SID的連結。步驟是:

確保所有內容都已備份。

我喜歡獲取 spfile 和 controlfile 的新副本,因為這樣以後會更容易。

backup device type disk incremental level = 0 section size 1g database plus archivelog;
backup current controlfile tag='Controlfile Level 0';
backup spfile tag='SPFile Level 0';

如果您的舊伺服器和新伺服器對 Oracle 數據使用不同的文件路徑,請執行以下命令:

select '  Set Newname For Datafile ' || file# || ' to ''' || name || ''';' from v$datafile;
select '  Alter Database Rename File ''' || Member || ''' To ''' || Member || ''';' from v$logfile;

獲取輸出並根據需要更改路徑/文件名以匹配您的新環境。

將備份從舊主機複製到新主機

可選,但我喜歡將 RMAN 備份文件放在我要還原到的盒子上。所以登錄新伺服器,從舊伺服器的快速恢復區復製完整備份、歸檔日誌和自動備份文件夾。請注意,您只需要返回到最近的完整備份,無需獲取數週的文件。

暫存新實例

在新主機上,創建數據文件夾、快速恢復文件夾和管理員文件夾。確保已安裝 Oracle,並且 Oracle 使用者帳戶可以完全控制這些文件夾。

創建一個與舊實例同名的空實例:

oradim -new -sid <<old sid name>>

Set ORACLE_SID=<<old sid name>>
RMAN target /

使用 RMAN 恢復 SPFILE 和控製文件。在 RMAN 中,設置 DBID 以匹配舊實例的 DB ID,並設置文件名和路徑以匹配您的環境:

SET DBID=1234567;
startup nomount;
restore spfile to 'C:\Oracle\Product\12.1.0\dbhome_1\database\init<<Old sid>>/ora' from 'f:\fast_recovery_area\<<old sid>>\BackupSet\2017_07_17\O1_MF_NNSNF_SPFILE_LEVEL_0_DOSTOJT8_.BKP';
create pfile='c:\oracle\product\12.1.0\dbhome_1\Database\pfile<<old sid>>.ora' from spfile='c:\oracle\product\12.1.0\dbhome_1\Database\Init<<old sid>>.ora';
shutdown immediate;

暫時不要關閉 RMAN。在 NotePad 或 NotePad++ 中編輯上一步中的 pfile。根據需要調整路徑和記憶體要求以反映新環境。不要更改數據庫的名稱,而是將文件夾路徑更改為新的實例名稱。

返回到您的 RMAN 會話並恢復控製文件。同樣,根據需要修復路徑。

startup nomount pfile = 'c:\oracle\product\12.1.0\dbhome_1\Database\pfile<<old sid>>.ora’;
restore controlfile from 'F:\fast_recovery\<<old sid>>\BACKUPSET\2017_07_05\O1_MF_NCNNF_CONTROLFILE_LEVEL_0_DOSTO715_.BKP';
Alter Database Mount;

恢復您的數據庫文件

仍然在 RMAN 中,清點您複製的備份文件。

catalog start with 'f:\fast_recovery_Area\<<old sid>>';

現在將您的重做日誌文件移動到它們在 RMAN 中的新文件夾中。您之前生成了這些腳本。

Alter Database Rename File 'O:\ORADATA\<<old sid>>\REDO03.LOG' To 'f:\ORADATA\<<NEW sid>>\REDO03.LOG';
Alter Database Rename File 'O:\ORADATA\<<old sid>>\REDO02.LOG' To 'f:\ORADATA\<<new sid>>\REDO02.LOG';
Alter Database Rename File 'O:\ORADATA\<<old sid>>\REDO01.LOG' To 'f:\ORADATA\<<NEW Sid>>\REDO01.LOG';

現在我們進行還原和恢復,替換之前創建的 NewName 腳本。

run { 
   Set Newname For Datafile 1 to 'f:\ORADATA\<<new sid>>\SYSTEM01.DBF';
   Set Newname For Datafile 3 to 'f:\ORADATA\<<new sid>>\SYSAUX01.DBF';
   Set Newname For Datafile 5 to 'f:\ORADATA\<<new sid>>\UNDOTBS01.DBF';
   Set Newname For Datafile 6 to 'f:\ORADATA\<<new sid>>\USERS01.DBF';

   RESTORE DATABASE;
   SWITCH DATAFILE ALL;
   RECOVER DATABASE;
}

RMAN 完成基本還原和恢復後,創建一個新的 SPFile。

create spfile from pfile = 'c:\oracle\product\12.1.0\dbhome_1\Database\pfile<<OLD sid>>.ora’;
alter database open resetlogs;

Oracle 不備份或恢復 TEMP 表空間。這將阻止完全恢復成功。創建一個新的臨時表空間,刪除舊的,然後重建原來的。

CREATE TEMPORARY TABLESPACE TEMP_NEW TEMPFILE 'f:\OraData\<<NEW Sid>>\TempNew1.dbf' SIZE 5m autoextend on next 10m maxsize unlimited;
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP_NEW;
DROP TABLESPACE TEMP including contents;
CREATE TEMPORARY TABLESPACE TEMP TEMPFILE 'f:\OraData\<<NEW Sid>>\Temp01.dbf' SIZE 50m autoextend on next 10m maxsize unlimited;
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP;
DROP TABLESPACE TEMP_NEW including contents and datafiles;

更改實例名稱

此時,Oracle 應該正在執行您的數據庫的完全恢復副本。但是你想要一個新名字。在 RMAN 中:

Shutdown immediate;
Startup mount;

不要關閉 RMAN,而是從以管理員身份執行的新 CMD 視窗:

set ORACLE_SID=<<old sid>>
NID target=/ DBNAME=<<new sid>>

請注意這為您提供的 DBID,因為稍後您將需要它來進行災難恢復(請注意,這是我們在頂部的第一個 RMAN 命令)。

返回 RMAN 視窗:

Shutdown Immediate;
Startup Mount;
Alter System Set DB_NAME=<<New sid>> scope=SPFILE;
Shutdown Immediate;
exit;

啟動你的新數據庫!

在另一個 CMD 視窗中,創建一個新密碼文件,然後重新創建 Windows 服務。請注意,與 Oracle 中的大多數情況不同,此實用程序不會在路徑周圍使用引號。

orapwd file=c:\oracle\product\12.1.0\dbhome_1\Database\pwd<<new SID>>.ora password=<SYS pwd> entries=25
oradim -delete -sid <<old sid>>
oradim -new -sid <<new sid>> -intpwd <SYS pwd> -startmode a 

啟動數據庫。

Set Oracle_SID=<<new sid>>
lsnrctl reload
sqlplus / as sysdba
Startup Mount;
Alter Database Open ResetLogs;

備份您的新數據庫

此時,您的數據庫沒有備份。在此數據庫中執行任何工作之前,請執行 RMAN 備份。

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