rman的隨手塗鴉(控制文件controlfile和參數文件spfile的恢復)

 今天仍舊是rman,恢復篇,並且筆者十分不負責任地不作有關數據文件的恢復,由於網上實在是太多人作這個了,因此筆者頭上出角,作controlfile和spfile的恢復…… sql

其實controlfile和spfile也是很重要的,controlfile的重要性沒必要多說。控制文件丟失或者損壞的話那是必須不徹底回覆的。關於spfile,有人說丟了也無所謂,用臨時的pfile重建就是了,而後再生成spfile,就算都丟失了還能夠手工重寫。筆者認可,spfile的丟失不能算是災難性的,可是若是一個dba花費了不少精力根據數據庫設置配的參數說丟失就丟失了,那未嘗不是一種悲劇- -||(請勿對號入座)數據庫

那言歸正傳,咱們下面就來看整個操做。oracle

先說環境,仍是和上篇同樣,nocatalogapp

恢復以前作一個備份,下面是筆者本身寫的備份腳本:ide

run {
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to '/home/oracle/%F';
backup format '/home/oracle/rmantest/%U' database
plus archivelog
delete all input;
}spa

要注意目錄必須是存在的,否則也會報錯哦~rest

先解釋一下開頭的configure,那若是確實是全權對數據庫負責的話,仍是建議在腳本里加上configure,畢竟這樣能夠保證使用本身定製的策略。至於對controlfile的備份,不只能夠採用筆者這樣的方法,也能夠在備份的時候加上include current controlfile的語句來備份控制文件。要注意的是,spfile在開啓autobackup 的狀況下也會和控制文件一塊兒被備份,恢復的時候也是用的同一個備份文件,詳情能夠看後面的演示。日誌

%F,這個是autobackup專用的一個存儲標識,由dbid和時間組成,須要注意的是隻能用於autobackup,若是在backup format的時候指定%F是會報錯的。至於%U和還有其餘的命名標識,筆者這裏不復制粘貼了,你們要學會本身動手,g一下就能知道。orm

plus archivelog 這句語句是用來備份歸檔的,主要是一下5個步驟:ci

1>.運行ALTER SYSTEM ARCHIVE LOG CURRENT語句對當前redolog進行歸檔。

2>.執行BACKUP ARCHIVELOG ALL命令備份全部已歸檔日誌。

3>.執行BACKUP命令對指定項進行備份。

4>.再次運行ALTER SYSTEM ARCHIVE LOG CURRENT對當前redolog歸檔。

5>.對新生成的還沒有備份的歸檔文件進行備份。(摘自三思筆記)

至於delete all input,上章講過了,筆者就再也不廢話一次了。

而後鏈接rman並執行腳本,能夠在rman鏈接的時候就用cmdfile指定腳本路徑,rman target / cmdfile=/home/oracle/mybkp.rman,也能夠在鏈接rman以後,用@命令,rman>@mybkp.rman。

而後大膽刪除控制文件()

嘗試啓動數據庫(能起來纔怪),接下來就是rman大顯身手了!

咱們一點一點來,慢慢摸索,「想固然」地一步一步作,遇到錯誤再分析再動手。

首先startup force,沒有控制文件天然只能到nomount階段。

RMAN> startup force; 
Oracle instance started 
RMAN-00571: =========================================================== 
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== 
RMAN-00571: =========================================================== 
RMAN-03002: failure of startup command at 07/26/2011 22:23:44 
ORA-00205: error in identifying control file, check alert log for more info 

RMAN> restore controlfile;#想固然restore一下,結果發現應該from autobackup 
Starting restore at 26-JUL-11 
allocated channel: ORA_DISK_1 
channel ORA_DISK_1: sid=157 devtype=DISK 
RMAN-00571: =========================================================== 
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== 
RMAN-00571: =========================================================== 
RMAN-03002: failure of restore command at 07/26/2011 22:24:37 
RMAN-06563: control file or SPFILE must be restored using FROM AUTOBACKUP

RMAN> restore controlfile from autobackup; Starting restore at 26-JUL-11 
using channel ORA_DISK_1 
recovery area destination: /u01/app/oracle/flash_recovery_area 
database name (or database unique name) used for search: ORCL 
channel ORA_DISK_1: no autobackups found in the recovery area 
channel ORA_DISK_1: looking for autobackup on day: 20110726 
channel ORA_DISK_1: looking for autobackup on day: 20110725 
channel ORA_DISK_1: looking for autobackup on day: 20110724 
channel ORA_DISK_1: looking for autobackup on day: 20110723 
channel ORA_DISK_1: looking for autobackup on day: 20110722 
channel ORA_DISK_1: looking for autobackup on day: 20110721 
channel ORA_DISK_1: looking for autobackup on day: 20110720 
channel ORA_DISK_1: no autobackup in 7 days found 
RMAN-00571: =========================================================== 
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== 
RMAN-00571: =========================================================== 
RMAN-03002: failure of restore command at 07/26/2011 22:25:37 
RMAN-06172: no autobackup found or specified handle is not a valid copy or piece

 #發現oracle說着不到備份信息,記得我們明明是configure autobackup on的呀,怎麼會找不到呢?這裏筆者要跟你們說了,由於筆者指定了歸檔的路徑,也就是剛的第二條命令

configure controlfile autobackup format for device type disk to '/home/oracle/%F'; 若是是這樣的話,那必須在恢復的時候指定路徑(只有控制文件和參數文件須要,數據文件能夠直接restore)

那接下來就一帆風順了,過程太長,筆者就把命令貼出來了。

rman>restore controlfile from ‘/home/oracle/c-1274771181-20110726-00’;

rman>sql'alter database mount';

rman>restore database;

rman>recover database;

rman>sql'alter database open resetlogs';

因爲是控制文件丟失,必須作不徹底恢復~恢復後記得作個整庫備份哦!一個優秀的dba應該有個好的習慣。 

這樣就完成了!那參數文件呢?參數文件絕大多數狀況和控制文件是同樣的。只不過開始時多了一步,咱們來看看。 (有關於參數文件的命名啊,spfile和pfile啊,還有oralce查找參數文件的順序啊,這裏就省略了,模擬丟失spfile和pfile的狀況)

RMAN> restore spfile from autobackup; 
Starting restore at 26-JUL-11 
using target database control file instead of recovery catalog 
allocated channel: ORA_DISK_1 
channel ORA_DISK_1: sid=36 devtype=DISK 
RMAN-00571: =========================================================== 
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== 
RMAN-00571: =========================================================== 
RMAN-03002: failure of restore command at 07/26/2011 22:45:10 
RMAN-06495: must explicitly specify DBID with SET DBID command

這裏和前面稍稍有些不一樣哦,說必須設置dbid,dbid獲取的方法有不少啦,在v$database裏有,以前的rman登陸時也有,可是如今數據庫起不來,都不行,腫麼辦呢?不急,前面的%F有用了,autobackup的備份文件以下 /home/oracle/c-1274771181-20110726-01,其中1274771181就是dbid,那這裏運行命令: 

RMAN> set dbid 1274771181; 
executing command: SET DBID

接下來的步驟和controlfile是如出一轍的 只要restore spfile from '/home/oracle/c-1274771181-20110726-01就能夠從新啓動數據庫了,不須要作數據文件的恢復啦,你們本身試試吧!

(須要注意的是若是直接運行

restore spfile from '/home/oracle/c-1274771181-20110726-01

那rman就會直接恢復spfile,不用再設置dbid了)

 

控制文件和參數文件的備份就到這裏了,寫得也很多,但願你們能夠和筆者同樣,本身動手試試,只有這樣纔會有進步嘛~  

相關文章
相關標籤/搜索