T100 RMAN LAB 精簡版重點整理:從備份目錄把資料庫救回來,並理解每一步為什麼要這樣做
影片來源:
T100-RMAN-LAB-精簡版帶浮水印.mp4讀者定位:完全沒碰過 RMAN/T100/Oracle 還原流程的新手
說明:本文是依影片畫面中的終端機操作、錯誤訊息與檔名整理而成。大方向與操作脈絡可確認,但少數檔名、序號、路徑細節可能因畫質、浮水印與 OCR 誤差而需要在實機環境再對一次。
這支影片到底在做什麼
這不是單純「把資料庫啟動起來」的影片,而是一段很典型的 Oracle RMAN 還原練習。它示範的核心其實是:
- 先用
pfile把資料庫啟到nomount - 從備份目錄還原
controlfile - 將資料庫掛載到
mount - 把備份片資訊
catalog進來 - 還原 datafiles
- 用 archive logs 做 recover
- 遇到錯誤時,判斷是「環境缺目錄」還是「恢復點選錯」
- 最後
open resetlogs把資料庫打開
如果你是新手,可以把它想成:
RMAN 不是只有「把備份丟回去」這麼簡單,而是要先讓 Oracle 知道自己是誰、備份在哪裡、要還原到哪個時間點,以及還原後的檔案路徑是否真的存在。
先理解 4 個關鍵名詞
1. nomount
Oracle instance 起來了,但還沒有讀到 control file。
為什麼重要:
因為當 control file 已經不在,或者你就是要先把 control file 救回來時,資料庫不可能一開始就正常 mount。你得先讓 instance 起來,才能做後面的 restore controlfile。
2. control file
它像是資料庫的「總索引表」,記錄資料檔、redo log、checkpoint、備份資訊等重要內容。
為什麼重要:
沒有 control file,Oracle 不知道自己有哪些 datafiles、哪些 redo logs、目前資料庫身分是什麼,自然也不能正常掛載。
3. catalog start with
這個動作是讓 RMAN 去掃某個目錄,把它找到的備份片登記進控制檔。
為什麼重要:
即使備份檔真的躺在磁碟上,如果 RMAN 不知道它們存在,後面的 restore database、recover database 一樣沒辦法順利做。
4. open resetlogs
這通常出現在做完不完整恢復、時間點恢復,或用備份重建後重新開庫。
為什麼重要:
它代表資料庫要重建 redo 的歷史起點,開出一個新的 incarnation。對新手來說,你可以先記住一句話:做完這類還原後,常常不是普通 open,而是 open resetlogs。
影片中的整體操作路線
依畫面判斷,影片大致分成下面幾段:
- 嘗試以
pfile啟動到nomount,但因audit trail目錄不存在而失敗 - 檢查
inittopprd.ora,找到audit_file_dest - 建立缺少的
adump目錄 - 再次啟動到
nomount - 用 RMAN 從控制檔備份還原 control file
alter database mountcatalog start with '/u4/orabackup'- 檢視可用備份與 archive log
- 還原資料檔
- 執行 recover,遇到缺 archive log 的問題
- 嘗試指定
until sequence,但發現目前還原集與恢復點不相容 - 重新選擇合適的備份/恢復組合
- recover 完成後
open resetlogs - 因 redo 路徑不存在而失敗
- 修正路徑/目錄問題後再次
open resetlogs成功
Blog 式 SOP:一步一步做,並理解為什麼要這樣做
Step 1:先用 sqlplus / as sysdba 進入資料庫主機
影片畫面可辨識到的動作:
sqlplus / as sysdba
shutdown immediate;
startup nomount pfile='/u4/inittopprd.ora';
看到的錯誤:
ORA-09925: Unable to create audit trail file
Linux-x86_64 Error: 2: No such file or directory
為什麼先這樣做:
因為你要從一個「還沒 mount 的 instance」開始重建,所以先用 pfile 啟到 nomount 是正確起手式。這一步不是在驗證資料庫完整,而是在驗證「最基本的啟動條件」有沒有滿足。
這一步的教學重點:
startup nomount 失敗,不一定代表資料庫壞了。很多時候只是環境不完整,例如:
audit_file_dest指到的目錄不存在diagnostic_dest或相關目錄結構不完整- pfile/spfile 路徑錯
對新手來說,這是很重要的觀念:先區分「環境問題」和「資料問題」。
關鍵截圖:


Step 2:檢查 pfile,找到真正缺的是哪個目錄
影片畫面可辨識到的內容:
在 inittopprd.ora 中,可以看到類似下面的參數:
*.audit_file_dest='/home/oracle/admin/topprd/adump'
*.control_files='/home/oracle/oradata/topprd/control01.ctl','/home/oracle/oradata/topprd/control02.ctl'
*.db_name='topprd'
接著建立目錄:
mkdir /home/oracle/admin/topprd/adump
為什麼要先查 pfile:
因為 Oracle 已經把錯誤線索給你了,它說 audit trail file 建不出來。這時最有效率的做法不是亂試,而是回頭查 audit_file_dest 指到哪裡。
這一步在訓練什麼能力:
它在訓練你從參數檔判讀資料庫期待的檔案結構。當你做異機還原或 LAB 重建時,最常見的不是 RMAN 指令打錯,而是 OS 層的目錄沒建好。
實務提醒:
mkdir只是建立目錄- 有些環境還需要確認 owner 與 permission
- 影片中後續有看到
chmod 755 adump的痕跡,代表操作者也有留意權限問題
關鍵截圖:


Step 3:重新啟動到 nomount
邏輯上的操作:
startup nomount pfile='/u4/inittopprd.ora';
為什麼要重試:
你剛剛修的是 Oracle 啟動前置條件。既然前置條件已補齊,就要重新驗證 instance 能不能正常進入 nomount。
如果這一步還不過,代表問題還在 OS 與參數檔層,不該急著進 RMAN restore。
Step 4:從備份片還原 control file
影片中的核心命令可辨識為:
restore controlfile from '/u4/orabackup/ctl/control_20200621_cf_D-TOPPRD_id-2973224763_gkv3bcc8.ctl';
alter database mount;
為什麼先還原 control file:
因為 control file 是整個 restore/recover 流程的地圖。沒有它,RMAN 很難知道資料庫原本有哪些檔案,也無法順利進入 mount 狀態。
為什麼接著要 mount:
mount 代表 instance 已經成功讀到 control file,但 datafiles 還沒 open。這是 RMAN 還原 datafiles 的正常工作狀態。
新手常犯錯:
- 直接想
restore database,卻還沒有可用 control file - control file restore 完卻忘了
mount
關鍵截圖:


Step 5:把備份目錄 catalog 進 RMAN
影片中看得到:
catalog start with '/u4/orabackup';
畫面中也出現一些訊息:
RMAN-07518: Reason: Foreign database file DBID ...RMAN-07517: Reason: The file header is corrupted
為什麼這一步必要:
catalog start with 的目的是讓 RMAN 掃描目錄,把它認得出來的備份片納入管理。這樣你後面下 list backup、restore database 才有根據。
為什麼會看到 foreign DBID:
因為同一個目錄下可能混有別的資料庫、別的時間點、甚至舊環境留下來的控制檔備份。RMAN 掃到後會告訴你:這不是目前這個 DBID 的東西。
為什麼這反而是好事:
它提醒你備份池不夠乾淨,你不能看到檔案就以為都能用。RMAN 幫你做了第一層篩選。
這一步真正要學的是:
在共享備份目錄或長期累積的 LAB 環境裡,「備份存在」不等於「備份可用」,更不等於「備份適合這次還原目標」。
關鍵截圖:


Step 6:先看有哪些備份,再決定要還原哪一組
影片中可見:
list of backups- Full backup
- Archivelog backup
- 資料檔清單中可看到多個 datafiles 與完成時間
為什麼不能跳過這一步:
因為 RMAN 還原不是只有「有沒有 full backup」而已,還要看:
- 你要恢復到哪個時間點
- 對應的 archivelogs 是否存在
- 該 full backup 與後續 recover 目標是否相容
這一步的教學價值很高:
影片後面出現的錯誤,正好證明「還原點」和「可用 archive logs」之間如果對不起來,recover 就會卡住。
Step 7:執行 restore database
影片中的畫面顯示:
- 多個 datafiles 被還原到
/home/oracle/oradata/topprd/... - 備份片來自
/u4/orabackup/full/...
示意命令:
restore database;
為什麼這一步是 restore,不是 recover:
restore 是把備份檔「搬回來」
recover 是把搬回來的資料再透過 redo/archive log「推進到一致狀態」
這兩件事常被新手混在一起,但實際上是兩個不同階段。
你可以把它想成:
restore= 把舊資料檔放回磁碟recover= 補上還原後缺的交易變化
Step 8:執行 recover database,遇到缺 archive log
影片中的訊息很關鍵:
media recovery requesting unknown archived log for thread 1 with sequence 20937
為什麼會出現這個錯:
因為你目前 restore 出來的資料狀態,想再往前推進到某個 SCN/sequence,但你手上的 archive log 備份只到某個位置,後面那段缺了。
這一步在實務上代表什麼:
你不能再期待「完整恢復到最新」,必須改成「恢復到你手上最後可用的那個點」。
關鍵截圖:


Step 9:嘗試 set until sequence,但發現備份基準也要匹配
影片中出現:
run {
set until sequence 20936 thread 1;
recover database;
}
接著報錯:
RMAN-06556: datafile 1 must be restored from backup older than SCN ...
這個錯誤非常值得學:
它表示你雖然把 recover 目標往前收了,但現在手上 restore 回來的 datafile 備份,仍然比那個恢復點「新」或「不匹配」。
白話解釋:
你不能拿一組較新的資料檔,硬要回推到一個它不適合的更早時間點。資料檔的基準和你要 recover 到的時間點,必須是同一條邏輯線。
所以這一步告訴我們:
做不完全恢復時,不只是 archive log 要夠,連你選的 full/incremental backup 也要和目標時間點相容。
Step 10:改用正確的備份組合,再次 restore/recover
從後續畫面可以看出:
- 操作者重新挑選了更合適的備份集
- 後續 media recovery 顯示
complete
這一步雖然影片沒有逐字把全部策略講出來,但流程訊號很明確:
前一次 restore + recover 的組合不成立,所以操作者調整了「還原基準」與「恢復目標」。
新手要記住的判斷原則:
當你看到 must be restored from backup older than SCN,優先反思的不是指令語法,而是:
- 我是不是選錯 full backup
- 我指定的 until sequence / until scn 是否太早
- 我手上的 archived logs 是否只支援某個範圍
Step 11:alter database open resetlogs,又遇到 redo 路徑不存在
影片中可見的錯誤:
ORA-00344: unable to re-create online log '/home/oracle/oradata/toptst/redo04.log'
ORA-27040: file create error, unable to create file
Linux-x86_64 Error: 2: No such file or directory
為什麼會這樣:
因為 control file 中記錄的 online redo log 路徑,仍然指向某個不存在的目錄,例如畫面中出現的 toptst。
這通常代表:
- 這次 LAB 是異機還原
- 或原始資料庫與現在主機的目錄規劃不同
- 或曾經沿用舊環境控制檔資訊
為什麼偏偏在 open resetlogs 才爆:
因為這一步要重建 redo log。當 Oracle 真正嘗試建立 redo 檔案時,才會發現路徑不存在。
這一步最重要的觀念:
資料檔 restore 成功,不代表整個資料庫環境已經完整。redo、control file、audit 目錄、diagnostic 目錄都屬於「能不能真正開庫」的一部分。
關鍵截圖:


Step 12:修正 redo 相關路徑後,再次 open resetlogs
影片最後可見:
alter database open resetlogs;
Statement processed.
這表示資料庫已成功打開。
這一步為什麼是收尾關鍵:
因為在 RMAN 還原流程裡,Statement processed 出現在 open resetlogs 之後,才算真正完成從備份到可開庫的閉環。
Step 13:做基本驗證,確認資料庫真的可用
影片後段可看到操作者回到 SQL*Plus,做了類似:
startup force nomount;
desc v$database;
select name from v$database;
雖然畫面沒有完整展開所有查詢結果,但很明顯是在做基本驗證。
為什麼收尾一定要驗證:
因為「能開」和「可用」不是同一件事。最少你要確認:
- instance 能正常啟動
- 資料庫名稱正確
v$database能查- 沒有明顯的檔案或控制資訊錯亂
新手版 SOP 摘要
如果你只想記住操作骨架,可以先背這個順序:
- 用
pfile啟到nomount - 如果失敗,先查參數檔與作業系統目錄
- 建好
audit_file_dest等必要目錄 restore controlfilealter database mountcatalog start with '<backup_path>'list backup,確認 full backup 與 archivelogrestore databaserecover database- 如果缺 archive log,就改做適當的
until sequence/until scn - 如果出現
backup older than SCN,表示 restore 基準也要重選 alter database open resetlogs- 如果 redo 路徑不存在,先修正路徑或建立目錄,再重試
- 開庫後做基本驗證
常見錯誤與對應思路
錯誤 1:ORA-09925 Unable to create audit trail file
代表什麼:
Oracle 啟動前就缺必要目錄,通常是 audit_file_dest 指向的 adump 不存在。
怎麼想:
先查 pfile/spfile 參數,不要一開始就懷疑 RMAN 備份壞掉。
錯誤 2:RMAN-07518 Foreign database file DBID
代表什麼:
掃到別的資料庫或別的 incarnation 的備份。
怎麼想:
共享備份目錄很常見,重點不是「有很多檔」而是「哪些檔屬於這次目標資料庫」。
錯誤 3:requesting unknown archived log
代表什麼:
你要恢復到的點,超過目前手上可用的 archive log 範圍。
怎麼想:
把恢復目標往前收,或重新確認 archive 備份是否齊全。
錯誤 4:RMAN-06556 datafile must be restored from backup older than SCN
代表什麼:
restore 回來的資料檔版本,和你指定的恢復點不匹配。
怎麼想:
不是 recover 指令寫錯,而是「還原基準」和「恢復目標」不在同一條時間線。
錯誤 5:ORA-00344 unable to re-create online log
代表什麼:
redo log 路徑不存在或不正確。
怎麼想:
開庫前不只 datafiles 要到位,redo 相關的 OS 目錄也必須存在。
這支影片真正想教會你的,不只是指令
如果只抄影片中的 RMAN 指令,你可能下次還是會卡住。這支影片真正有價值的地方,是它把幾個很典型的還原思路串起來了:
- 先解決 instance 起不來的 OS/參數問題
- 再處理 control file 與 mount
- 再讓 RMAN 認識備份
- 再做 restore
- restore 完不代表 recover 一定成功
- recover 失敗時,要判斷是缺 archive,還是 restore 基準不對
- 最後就算 recover 完,也可能卡在 redo 路徑
也就是說,RMAN 還原不是單一步驟,而是一條連續的判斷鏈。
給新人的實作建議
如果你要照著這支影片自己練一次,建議你另外準備一張簡單檢查表:
pfile路徑是否正確audit_file_dest是否存在control_files路徑是否存在oradata目錄是否存在- 備份目錄中是否同時混有其他 DBID 的檔案
- full backup 日期和 archivelog 日期是否能接起來
open resetlogs需要建立的 redo 路徑是否存在
這張表會比死背指令更有用。
可直接拿去內訓的結論
這支 T100 RMAN LAB 影片最適合拿來教新人的主題,不是「RMAN 指令大全」,而是:
- Oracle 還原流程的正確順序
- 異機還原時常見的 OS 目錄問題
- 備份存在不代表恢復一定能成功
recover失敗時,如何判斷是缺 log 還是選錯備份基準open resetlogs前後要注意的 redo 路徑問題
如果要把它濃縮成一句話,就是:
先讓資料庫「有資格被還原」,再讓 RMAN「找得到正確備份」,最後才談「恢復到哪個點」。
