今天仍舊是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了)
控制文件和參數文件的備份就到這裏了,寫得也很多,但願你們能夠和筆者同樣,本身動手試試,只有這樣纔會有進步嘛~