生產庫某用戶下所有表疑似被誤刪,需從 RMAN 全備份在測試環境恢復並導出目標表。架構:Oracle Data Guard + 磁盤備份,測試庫版本、平台與生產一致。
-- 1. DBID(恢復控制文件/SPFILE 必需)
SELECT dbid FROM v$database; -- 例:3391761643
-- 2. 數據文件路徑
SELECT name FROM v$datafile;
-- 3. Redo Log 路徑
SELECT member FROM v$logfile;
-- 4. 參數文件/控制文件/歸檔備份件路徑與 Tag
RMAN> LIST BACKUP OF SPFILE;
RMAN> LIST BACKUP OF CONTROLFILE;
RMAN> LIST BACKUP OF DATABASE;
RMAN> LIST BACKUP OF ARCHIVELOG ALL;
關鍵產出:備份件絕對路徑、Tag、Checkpoint SCN/Time、DBID、目標目錄結構。
nid 工具或手動創建控制文件指定)。SET NEWNAME 腳本)。scp 至測試機對應路徑。-- 1. 設置 DBID
RMAN> SET DBID 3391761643;
-- 2. 啟動虛擬實例
RMAN> STARTUP NOMOUNT;
-- 3. 恢復 SPFILE(從控制文件自動備份件)
RMAN> RESTORE SPFILE TO '/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/spfilestuorcl.ora'
FROM AUTOBACKUP;
-- 4. 重啟實例讀取新 SPFILE
RMAN> STARTUP FORCE NOMOUNT;
-- 5. 恢復控制文件(指定生產備份件路徑)
RMAN> RESTORE CONTROLFILE TO '/oracle/data_ora/stuorcl/control01.ctl'
FROM '/oracle/app/oracle/flash_recovery_area/stuorcl/backupset/2015-01-27/c-3391761643-20150127-03';
-- 6. 掛載數據庫
RMAN> ALTER DATABASE MOUNT;
-- 1. 將備份件註冊到新控制文件
RMAN> CATALOG START WITH '/oracle/app/oracle/flash_recovery_area/stuorcl/backupset/2015-01-27/';
-- 2. 恢復全庫數據文件
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
常見報錯:RMAN-06054: media recovery requesting unknown archived log,缺少序列 29167~29187。
處置:從生產庫 archive log list 確認最新歸檔位置,scp 缺失歸檔至測試庫歸檔目錄,再次 RECOVER DATABASE。
若歸檔鏈斷裂無法補齊(如缺失最新聯機日誌),執行不完全恢復:
RMAN> RECOVER DATABASE UNTIL SCN 10903302108; -- 缺失日誌起始 SCN
RMAN> ALTER DATABASE OPEN RESETLOGS;
本案例補齊歸檔後 RECOVER DATABASE 成功,直接 ALTER DATABASE OPEN RESETLOGS 打開。
-- 1. 檢查 service_name 與 db_unique_name
SQL> SHOW PARAMETER service_names;
SQL> SHOW PARAMETER db_unique_name;
-- 2. 修正 tnsnames.ora 中 SERVICE_NAME 為 db_unique_name (stuunq)
-- 3. 重啟監聽:lsnrctl stop/start
-- 4. 測試連接:sqlplus user/pwd@tns_alias
expdp system/pwd schemas=target_user tables=table_list directory=dpump_dir dumpfile=recover.dmp logfile=recover.log
-- 導入生產庫
impdp system/pwd schemas=target_user tables=table_list directory=dpump_dir dumpfile=recover.dmp logfile=imp.log TABLE_EXISTS_ACTION=REPLACE
SET DBID。SET NEWNAME FOR DATAFILE ... TO '新路徑' 重映射。UNTIL SCN/SEQUENCE/TIME 不完全恢復 + RESETLOGS。RMAN-20208: UNTIL CHANGE is before RESETLOGS change,需 RESET DATABASE TO INCARNATION n 切換化身後再恢復。db_unique_name ≠ service_names 導致 ORA-12514,以 db_unique_name 為準更新 tnsnames.ora。