ORACLE RMAN RESTORE ON THE BACKUP VM:新手也看得懂的 Blog 式 SOP
影片來源:
ORACLE-RMAN-RESTORE-ON-THE-BACKUP-VM.mp4讀者定位:完全沒碰過 Oracle RMAN 還原流程的新手
說明:本文依影片畫面中的實際命令、錯誤訊息、檔名與目錄結構整理而成。影片解析度有限,少數字串可能有 OCR 誤差,但整體還原流程、判斷邏輯與排錯脈絡是清楚可重建的。
這支影片在教什麼
這支影片比前一支更接近「真實環境裡的還原作業」。
它不是單純示範 RMAN 指令,而是把下面幾件事串成一個完整流程:
- 先把資料庫停掉,改用
pfile啟動到nomount - 修正常見的小錯,例如
pfile路徑打錯 - 視需要建立
spfile - 把備份檔從遠端備份主機或 NAS 拉到本機 backup VM
- 還原 control file,讓資料庫進入
mount catalog備份目錄restore databaserecover database- 遇到 archived log 缺失或權限問題時補檔
- 最後用
set until sequence做不完全恢復,再open resetlogs
這支片真正有價值的地方是:
它讓你看到 RMAN restore 不是「打一條 restore 指令就結束」,而是一個同時牽涉到 Oracle、Linux 權限、備份主機同步、備份完整性與恢復點判斷的實戰流程。
先理解這支影片的環境角色
從畫面判斷,這次不是直接在原始正式主機上恢復,而是在一台備份用途的 VM 上操作。
這代表兩件事:
- 本機未必一開始就有完整的
ctl、full、archlog備份檔 - 本機目錄權限、檔案 owner、備份同步狀態,都可能影響 RMAN 是否讀得到檔案
所以這支 SOP 會比上一支多一層:
除了 Oracle 內部 restore/recover,還要處理「備份檔真的有沒有在本機到位」。
新手先懂 5 個關鍵觀念
1. root 不等於可以直接跑 sqlplus 或 rman
影片一開始就看到:
sqlplus / as sysdba
bash: sqlplus: command not found
後來切成:
su - oracle
sqlplus / as sysdba
這告訴你:
Oracle 工具通常仰賴 oracle 帳號的環境變數,例如 ORACLE_HOME、PATH、ORACLE_SID。你就算是 root,也不代表 shell 環境裡找得到 sqlplus 或 rman。
2. nomount 是 restore controlfile 的前置狀態
資料庫在 nomount 時,instance 已經起來,但還沒讀 control file。
為什麼重要:
如果你的目標是先把 control file 救回來,資料庫就必須先停在這個狀態。
3. catalog 的意思不是備份,而是讓 RMAN 認識檔案
RMAN 只會處理它認得的備份片。檔案即使真的躺在磁碟上,如果還沒 catalog 進來,後面的 restore/recover 也可能做不下去。
4. archived log 缺失有兩種常見原因
不是只有「真的沒有檔案」。
還可能是:
- 檔案存在,但本機尚未同步回來
- 檔案存在,但權限錯誤,Oracle 讀不到
5. set until sequence 是在承認「我只能恢復到這裡」
當缺少下一個 archived log 時,你不能再做完整恢復,只能把資料庫恢復到手上最後一個可用 sequence,再 open resetlogs。
影片的整體流程圖
這支影片大致可以拆成以下 6 段:
- 用
oracle使用者關閉資料庫、啟動到nomount - 修正 pfile 指令與建立 spfile
- 由 root 用
rsync從遠端備份主機同步備份片到/u4/orabackup - 以 RMAN restore controlfile、mount、catalog、restore database
- recover database 時發現 archived log 缺失與權限問題
- 補抓 archive logs、設定
until sequence、完成 recover 並open resetlogs
Blog 式 SOP:一步一步做,並說明每一步為什麼要這樣做
Step 1:先切到 oracle 帳號,再操作 SQL*Plus / RMAN
影片中可辨識的動作:
sqlplus / as sysdba
bash: sqlplus: command not found
su - oracle
sqlplus / as sysdba
為什麼要這樣做:
因為 oracle 帳號的登入環境通常已載入 Oracle 軟體路徑,直接使用 root 常常找不到 sqlplus、rman。
這一步教你的不是權限,而是環境:
Oracle 工具能不能執行,很多時候不是看你是不是管理員,而是看 shell 環境有沒有正確載入 Oracle home。
Step 2:先把資料庫正常關掉
影片中可辨識到:
shutdown immediate;
為什麼要先 shutdown:
你要做的是 restore/recover,不是在線上資料庫上直接覆蓋檔案。先把既有 instance 收乾淨,才能避免控制檔、資料檔與恢復流程互相衝突。
對新手來說,可以先記住:
還原前要先把現場「清空到可控狀態」。
Step 3:用 pfile 啟到 nomount,但要注意路徑格式
影片中出現了兩次不同寫法:
錯誤寫法:
startup nomount pfile='/u4/inittopprd.ora/';
對應錯誤:
LRM-00109: could not open parameter file '/u4/inittopprd.ora/'
ORA-01078: failure in processing system parameters
修正後:
startup nomount pfile='/u4/inittopprd.ora';
啟動成功。
為什麼這一步值得特別寫:
因為這不是「Oracle 壞掉」,而是很單純的路徑字串錯誤。檔名後面多一個 /,Oracle 就把它當成不存在的參數檔。
這一步教會新手一件事:
不是所有 RMAN/restore 問題都很複雜,很多中斷點其實只是基本路徑與檔名錯字。
關鍵截圖:


Step 4:由 pfile 建立 spfile
影片中可見:
先打錯:
create spfile from pfile='/u4/inittopprd';
報錯:
ORA-01078
LRM-00109
修正後:
create spfile from pfile='/u4/inittopprd.ora';
結果:
File created.
為什麼要建 spfile:
在 LAB 或重建環境中,先用 pfile 啟動很常見,因為你還在修環境。但當參數確認無誤後,建立 spfile 可以讓後續啟動更接近正式 Oracle 慣例,也能避免每次都得手動指定 pfile。
為什麼這一步重要:
它表示環境從「臨時起得來」往「可持續啟動」前進了一步。
Step 5:用 startup force nomount 再確認 instance 狀態
影片中接著做了:
startup force nomount;
為什麼要再做一次:
因為你剛剛已建立 spfile,這時再用 force nomount 重啟,相當於確認資料庫已能用比較標準的方式回到 restore 前置狀態。
這一步像是在做環境驗收:
- pfile 可用
- spfile 已生成
- instance 可正常啟到 nomount
Step 6:先把備份片同步到 backup VM
影片裡這是很重要的一段。可辨識到的動作包含:
rsync -avzh iwbackup@192.168.20.117:/volume2/Backup/u4/orabackup/ctl/ /u4/orabackup/ctl/
rsync -avzh iwbackup@192.168.20.117:/volume2/Backup/u4/orabackup/archlog/ /u4/orabackup/archlog/
也看到操作者檢查:
cd /u4/orabackup
ls -la
chown -R oracle.dba ...
為什麼 restore 前要先同步備份:
因為 RMAN restore 讀的是本機檔案系統。如果 backup VM 上沒有完整的 ctl、full、archlog 備份片,RMAN 就算指令正確也沒東西可還。
為什麼還要 chown:
因為檔案從別的主機 rsync 過來後,owner/group 不一定符合本機 Oracle 程序可讀取的權限。後面影片真的就出現了 archived log 檔案存在但無法開啟的情況,這一步其實是在提前消除風險。
關鍵截圖:


Step 7:確認 controlfile 備份存在,並挑最新或合適的一份
影片中列出了很多 controlfile 備份,例如:
control_20200620...control_20200621...control_20200630...control_20200701...control_20200702...
最後使用的是:
restore controlfile from '/u4/orabackup/ctl/control_20200702_cf_D-TOPPRD_id-2973224763_ptv4b10l.ctl';
為什麼要先看 controlfile 清單:
因為 controlfile 本身也有時間點。你選的 controlfile 越接近你要還原的備份集,後續 catalog 與 restore 的一致性通常越好。
對新手來說,這一步是在學:
controlfile 不是隨便拿一份就好,最好選與你的 full backup、archivelog 備份時間帶相近的版本。
Step 8:restore controlfile 後,把資料庫 mount 起來
影片中清楚可見:
restore controlfile from '/u4/orabackup/ctl/control_20200702_cf_D-TOPPRD_id-2973224763_ptv4b10l.ctl';
alter database mount;
畫面也顯示 controlfile 被還原到:
/home/oracle/oradata/topprd/control01.ctl/home/oracle/oradata/topprd/control02.ctl
為什麼先 restore controlfile:
因為 controlfile 是 RMAN 後續識別資料檔、備份片、redo 與資料庫結構的核心。
為什麼接著要 mount:
只有 mount 後,Oracle 才真正載入 controlfile,RMAN 才能繼續做 restore database 與 recover database。
關鍵截圖:


Step 9:catalog 備份目錄,讓 RMAN 知道有哪些可用檔案
從畫面可推斷操作者對 /u4/orabackup 做了 catalog,並看到:
- archlog 檔案被列出
- controlfile 檔案被列出
- shell script 與 log 檔被標記為
RMAN-07517: The file header is corrupted
這個訊息不用緊張。
為什麼:
因為 RMAN 是在掃整個目錄,它看到 .sh 或 .log 這種不是備份片的檔案,當然讀不出 RMAN 備份頭,所以會說 header corrupted。
這不表示你的備份壞了,而只是表示「這些不是 RMAN 備份格式」。
這一步在教你:
shared backup directory 裡有雜檔很正常,但你要知道哪些訊息是真的問題,哪些只是掃描副作用。
Step 10:開始 restore database
影片中可見多個 datafile 依序還原到:
/home/oracle/oradata/topprd/...- 某些檔案也出現
/home/oracle/oradata/topstd/...
並且從備份片:
/u4/orabackup/full/full_TOPPRD_20200702_...
讀取資料。
為什麼這一步是 restore,不是 recover:
restore database 做的是把備份片中的資料檔重新放回磁碟。
它只是「把檔案放回去」,還沒有把資料推到交易一致點。
所以 restore 完不代表資料庫已可開啟。
Step 11:recover database 時卡在 archived log
影片中的第一波錯誤很有代表性:
ORA-19870: error while restoring backup piece /u4/orabackup/archlog/arch_TOPPRD_21481_20200703
ORA-19505: failed to identify file
ORA-27041: unable to open file
Linux-x86_64 Error: 13: Permission denied
接著 RMAN 又回報:
RMAN-06025: no backup of archived log found
RMAN-06053: unable to perform media recovery because of missing log
為什麼這段非常關鍵:
它把兩種問題疊在一起了:
- archived log 可能本機不完整
- 某些 archived log 即使已在本機,Oracle 也可能因權限不足而打不開
也就是說,RMAN 說缺 log,不一定是真的沒有;有可能是檔案在,但 Oracle 讀不到。
這正是為什麼前面要做 chown 與目錄檢查。
關鍵截圖:


Step 12:回到備份主機或 NAS,補抓缺的 archive logs
影片這裡切到類似 NAS 的 File Station,顯示:
archlog_oldorabackup/archlog- 多個
arch_TOPPRD_<sequence>_<date>檔案
接著回到 Linux 上用 rsync 持續補抓:
rsync -avzh iwbackup@192.168.20.117:/volume2/Backup/u4/orabackup/archlog/ /u4/orabackup/archlog/
影片中還出現:
rsync error: unexplained error (code 255)received SIGUSR1- 重新執行後成功抓到更多檔案
為什麼這段很實戰:
現場做 restore 時,問題常常不是 Oracle 指令,而是:
- 備份還沒全同步完
- 傳輸中斷
- 第一次 rsync 失敗
- 你需要人工去確認缺的 sequence 到底在哪個目錄
這一步教你的,是「備份檔供應鏈管理」。
也就是:
RMAN restore 的成功率,很大程度取決於備份主機和還原主機之間的檔案同步是否完整。
關鍵截圖:


Step 13:recover 到最後一個可用 archived log 為止
影片後半段顯示 recover 能處理到:
- sequence
21499 - sequence
21500
之後出現:
unable to find archived log
archived log thread=1 sequence=21501
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 21501
這表示什麼:
目前所有能取得、也能成功讀取的 archived log,只能把資料庫推到 21500 之後的邊界,再往下一個 sequence 21501 就沒有了。
所以這時就必須面對現實:
你做不了完整恢復,只能做不完全恢復。
關鍵截圖:


Step 14:用 set until sequence 做不完全恢復
影片中明確可見:
run {
set until sequence 21501 thread 1;
recover database;
}
之後 RMAN 顯示:
media recovery complete
Finished recover
為什麼是 set until sequence 21501:
這裡的邏輯不是「我有 21501」,而是「我把恢復目標鎖在 21501 前的可一致位置」。實際上是承認再往後推就缺 log 了,所以讓 RMAN 在目前可用範圍內完成恢復。
這一步對新手來說是最重要的觀念之一:
當 archived log 缺失時,目標不是硬撐到最新,而是安全地停在最後一個可閉合的一致點。
Step 15:alter database open resetlogs
影片中 recover 完成後馬上接著:
alter database open resetlogs;
雖然影片在最後沒有完整展開所有開庫後查詢結果,但整體脈絡很清楚:
這是標準的不完全恢復收尾方式。
為什麼一定要 resetlogs:
因為你已不是把資料庫恢復到原來 redo 歷史的自然終點,而是在某個中間點重啟資料庫生命線。這時 Oracle 需要重新建立 redo 歷史,開出新的 incarnation。
Step 16:收尾驗證
影片末段可見:
select open_mode ...
雖然結果未完整拍出,但這表示操作者至少有做開庫後的基本驗證。
實務上你至少應該驗證:
select open_mode from v$database;select name from v$database;- 必要時確認
resetlogs_change#或 incarnation 狀態 - 檢查 alert log 是否還有殘餘錯誤
為什麼這一步不能省:
因為 restore 成功、recover 成功、能 open,這三件事在實務上是不同層次。真正交付前,至少要確認資料庫已是可讀寫或符合你的預期狀態。
新手版 SOP 摘要
如果你只想先記住骨架,可以背下面這版:
su - oraclesqlplus / as sysdbashutdown immediatestartup nomount pfile='/u4/inittopprd.ora'create spfile from pfile='/u4/inittopprd.ora'startup force nomount- 用
rsync把ctl/full/archlog從備份主機同步到本機 - 檢查
/u4/orabackup目錄與 owner/group rman target /restore controlfile from '<ctl backup path>'alter database mountcatalog start with '/u4/orabackup'restore databaserecover database- 如果 archived log 缺失,先確認是缺檔還是權限錯誤
- 必要時回備份主機補抓 archive logs
- 如果仍缺下一個 sequence,改用
set until sequence alter database open resetlogs- 驗證
open_mode
常見錯誤與這支影片教你的判斷方式
錯誤 1:sqlplus: command not found
代表什麼:
不是 Oracle 沒裝,而是你現在這個 shell 環境沒有 Oracle 的執行路徑。
怎麼想:
先切 oracle 使用者,再談後面指令。
錯誤 2:LRM-00109 could not open parameter file
代表什麼:
通常是 pfile 路徑寫錯,這支片裡就是多打一個 /。
怎麼想:
先檢查路徑字串,不要一開始就判定資料庫損壞。
錯誤 3:ORA-27041 unable to open file + Permission denied
代表什麼:
檔案可能存在,但 Oracle 程序無法讀取。
怎麼想:
先查 owner/group/permission,特別是檔案剛從 rsync 拉回來時。
錯誤 4:no backup of archived log found
代表什麼:
可能是真缺檔,也可能是本機還沒同步到,或權限讓 Oracle 視同找不到。
怎麼想:
不要只在 RMAN 裡重試,要回到 OS/NAS 檢查實體檔案是否存在。
錯誤 5:media recovery requesting unknown archived log
代表什麼:
你現在想恢復到的下一段 sequence 已經不在可用備份範圍內。
怎麼想:
把恢復目標停在最後一個可用 sequence 前後,改做不完全恢復。
這支影片真正想教會你的,不只是 RMAN 指令
如果把這支影片濃縮成一句話,它在教的是:
先讓本機環境能跑 Oracle,再讓本機真的擁有可讀的備份片,最後才談 RMAN 能把資料庫恢復到哪裡。
也就是說,RMAN 還原有三層:
- Oracle 啟動層
- 備份檔供應層
- 恢復點判斷層
很多新手只盯著第 3 層,但這支影片清楚示範:
第 1 層和第 2 層如果沒處理好,第 3 層根本走不到。
可以直接拿去做內訓的結論
這支 ORACLE-RMAN-RESTORE-ON-THE-BACKUP-VM 最適合拿來教新人以下 5 件事:
- 為什麼要用
oracle帳號而不是直接 root 執行 RMAN nomount -> restore controlfile -> mount -> restore -> recover -> resetlogs的正確順序- restore 前,為什麼一定要先確認本機 backup VM 真的拿到完整備份片
- archived log 問題不能只看 RMAN,還要回到檔案系統與備份來源檢查
- 缺 log 時,如何用
set until sequence做安全收尾
如果只記一句話,就是:
在 backup VM 上做 RMAN restore,成功的關鍵不只是指令對,而是「檔案真的在、Oracle 真的讀得到、恢復點真的合理」。