文章目錄
- 在原DB上檢查是否有重復的文件名:
- 查看rman恢復的日志
- 修正重名部分
- 重新執行rman恢復
- 結論:
在 RMAN 恢復過程中,遇到RMAN-03002連同ORA-19563:錯誤。
操作是將 Oracle 10.0.5的數據庫備份從 RMAN備份恢復到另一臺測試主機的同一個目錄。
......
channel ORA_DISK_1: restore complete, elapsed time: 00:26:25
Finished restore at 24-MAR-25RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of switch command at 03/24/2025 22:19:47
ORA-19563: header validation failed for fileRecovery Manager complete
在MOS 文檔 《RMAN Duplicate Fails With RMAN-06136 ORA-19563》(Doc ID 453123.1) 提到可能存在重復的文件名,這一點提供了關鍵線索。
在原DB上檢查是否有重復的文件名:
select substr ( file_name, instr( file_name, '/', -1)) file_name, count(*) from dba_data_files
group by substr( file_name,instr( file_name, '/', -1)) having count(*) > 1
輸出:
FILE_NAME COUNT(*)
-------------------- ----------
/CES_DATA16.dbf 2
輸出結果顯示/CES_DATA16.dbf 存在重名
查看rman恢復的日志
......
22> SET NEWNAME FOR DATAFILE '/u2/PCICES/ORADATA/PCICES/CES_DATA15.dbf' TO '/oracle/oradata/CPS_QAS/CES_DATA15.dbf';
23> SET NEWNAME FOR DATAFILE '/u2/PCICES/ORADATA/PCICES/CES_DATA16.dbf' TO '/oracle/oradata/CPS_QAS/CES_DATA16.dbf';
24> SET NEWNAME FOR DATAFILE '/u3/ORADATA/PCICES/CES_DATA16.dbf' TO '/oracle/oradata/CPS_QAS/CES_DATA16.dbf';
25> SET NEWNAME FOR DATAFILE '/u3/ORADATA/PCICES/CES_DATA17.dbf' TO '/oracle/oradata/CPS_QAS/CES_DATA17.dbf';
......
日志中,行23與24確實存在重復的文件名,并且由于restore的目標均位于/oracle/oradata/CPS_QAS目錄,導致前者被后者覆蓋,進而產生該錯誤。
修正重名部分
這里分別將名稱CES_DATA16.dbf修改為CES_DATA16a.dbf與CES_DATA16b.dbf
......
SET NEWNAME FOR DATAFILE '/u2/PCICES/ORADATA/PCICES/CES_DATA16.dbf' TO '/oracle/oradata/CPS_QAS/CES_DATA16a.dbf';
SET NEWNAME FOR DATAFILE '/u3/ORADATA/PCICES/CES_DATA16b.dbf' TO '/oracle/oradata/CPS_QAS/CES_DATA16.dbf';
......
重新執行rman恢復
rman target / cmdfile='/home/oracle/restoredb.rman' log='/home/oracle/rman.20250325.log'
結論:
在 RMAN 備份恢復至不同環境 時,應提前檢查 是否存在重名數據文件,并確保 SET NEWNAME 映射的目標文件名唯一,以避免覆蓋導致的恢復失敗。