T100 RMAN LAB 精簡版重點整理:從備份目錄把資料庫救回來,並理解每一步為什麼要這樣做

影片來源:T100-RMAN-LAB-精簡版帶浮水印.mp4

讀者定位:完全沒碰過 RMAN/T100/Oracle 還原流程的新手

說明:本文是依影片畫面中的終端機操作、錯誤訊息與檔名整理而成。大方向與操作脈絡可確認,但少數檔名、序號、路徑細節可能因畫質、浮水印與 OCR 誤差而需要在實機環境再對一次。

這支影片到底在做什麼

這不是單純「把資料庫啟動起來」的影片,而是一段很典型的 Oracle RMAN 還原練習。它示範的核心其實是:

  1. 先用 pfile 把資料庫啟到 nomount
  2. 從備份目錄還原 controlfile
  3. 將資料庫掛載到 mount
  4. 把備份片資訊 catalog 進來
  5. 還原 datafiles
  6. 用 archive logs 做 recover
  7. 遇到錯誤時,判斷是「環境缺目錄」還是「恢復點選錯」
  8. 最後 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 databaserecover database 一樣沒辦法順利做。

4. open resetlogs

這通常出現在做完不完整恢復、時間點恢復,或用備份重建後重新開庫。

為什麼重要:

它代表資料庫要重建 redo 的歷史起點,開出一個新的 incarnation。對新手來說,你可以先記住一句話:做完這類還原後,常常不是普通 open,而是 open resetlogs


影片中的整體操作路線

依畫面判斷,影片大致分成下面幾段:

  1. 嘗試以 pfile 啟動到 nomount,但因 audit trail 目錄不存在而失敗
  2. 檢查 inittopprd.ora,找到 audit_file_dest
  3. 建立缺少的 adump 目錄
  4. 再次啟動到 nomount
  5. 用 RMAN 從控制檔備份還原 control file
  6. alter database mount
  7. catalog start with '/u4/orabackup'
  8. 檢視可用備份與 archive log
  9. 還原資料檔
  10. 執行 recover,遇到缺 archive log 的問題
  11. 嘗試指定 until sequence,但發現目前還原集與恢復點不相容
  12. 重新選擇合適的備份/恢復組合
  13. recover 完成後 open resetlogs
  14. 因 redo 路徑不存在而失敗
  15. 修正路徑/目錄問題後再次 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 路徑錯

對新手來說,這是很重要的觀念:先區分「環境問題」和「資料問題」。

關鍵截圖:

startup nomount 失敗


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 的痕跡,代表操作者也有留意權限問題

關鍵截圖:

檢查 pfile 與建立 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

關鍵截圖:

restore controlfile 與 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 backuprestore database 才有根據。

為什麼會看到 foreign DBID:

因為同一個目錄下可能混有別的資料庫、別的時間點、甚至舊環境留下來的控制檔備份。RMAN 掃到後會告訴你:這不是目前這個 DBID 的東西。

為什麼這反而是好事:

它提醒你備份池不夠乾淨,你不能看到檔案就以為都能用。RMAN 幫你做了第一層篩選。

這一步真正要學的是:

在共享備份目錄或長期累積的 LAB 環境裡,「備份存在」不等於「備份可用」,更不等於「備份適合這次還原目標」。

關鍵截圖:

catalog 時出現 foreign DBID


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 備份只到某個位置,後面那段缺了。

這一步在實務上代表什麼:

你不能再期待「完整恢復到最新」,必須改成「恢復到你手上最後可用的那個點」。

關鍵截圖:

recover 缺 archived 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,優先反思的不是指令語法,而是:

  1. 我是不是選錯 full backup
  2. 我指定的 until sequence / until scn 是否太早
  3. 我手上的 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 目錄都屬於「能不能真正開庫」的一部分。

關鍵截圖:

open resetlogs 遇到 redo 路徑錯誤


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 摘要

如果你只想記住操作骨架,可以先背這個順序:

  1. pfile 啟到 nomount
  2. 如果失敗,先查參數檔與作業系統目錄
  3. 建好 audit_file_dest 等必要目錄
  4. restore controlfile
  5. alter database mount
  6. catalog start with '<backup_path>'
  7. list backup,確認 full backup 與 archivelog
  8. restore database
  9. recover database
  10. 如果缺 archive log,就改做適當的 until sequence / until scn
  11. 如果出現 backup older than SCN,表示 restore 基準也要重選
  12. alter database open resetlogs
  13. 如果 redo 路徑不存在,先修正路徑或建立目錄,再重試
  14. 開庫後做基本驗證

常見錯誤與對應思路

錯誤 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 指令,你可能下次還是會卡住。這支影片真正有價值的地方,是它把幾個很典型的還原思路串起來了:

  1. 先解決 instance 起不來的 OS/參數問題
  2. 再處理 control file 與 mount
  3. 再讓 RMAN 認識備份
  4. 再做 restore
  5. restore 完不代表 recover 一定成功
  6. recover 失敗時,要判斷是缺 archive,還是 restore 基準不對
  7. 最後就算 recover 完,也可能卡在 redo 路徑

也就是說,RMAN 還原不是單一步驟,而是一條連續的判斷鏈。


給新人的實作建議

如果你要照著這支影片自己練一次,建議你另外準備一張簡單檢查表:

  • pfile 路徑是否正確
  • audit_file_dest 是否存在
  • control_files 路徑是否存在
  • oradata 目錄是否存在
  • 備份目錄中是否同時混有其他 DBID 的檔案
  • full backup 日期和 archivelog 日期是否能接起來
  • open resetlogs 需要建立的 redo 路徑是否存在

這張表會比死背指令更有用。


可直接拿去內訓的結論

這支 T100 RMAN LAB 影片最適合拿來教新人的主題,不是「RMAN 指令大全」,而是:

  1. Oracle 還原流程的正確順序
  2. 異機還原時常見的 OS 目錄問題
  3. 備份存在不代表恢復一定能成功
  4. recover 失敗時,如何判斷是缺 log 還是選錯備份基準
  5. open resetlogs 前後要注意的 redo 路徑問題

如果要把它濃縮成一句話,就是:

先讓資料庫「有資格被還原」,再讓 RMAN「找得到正確備份」,最後才談「恢復到哪個點」。

By Kevin

發佈留言

CS

AI 客服助理

線上答詢中

error: Content is protected !!