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了)

 

控制文件和参数文件的备份就到这里了,写得也很多,但愿你们能够和笔者同样,本身动手试试,只有这样才会有进步嘛~  

相关文章
相关标签/搜索