oracle 控制文件传变量,rman的随手涂鸦(控制文件controlfile和参数文件spfile的恢复)...

今天仍旧是rman,恢复篇,而且笔者十分不负责任地不做有关数据文件的恢复,因为网上实在是太多人做这个了,所以笔者头上出角,做controlfile和spfile的恢复……

其实controlfile和spfile也是很重要的,controlfile的重要性不必多说。控制文件丢失或者损坏的话那是必须不完全回复的。关于spfile,有人说丢了也无所谓,用临时的pfile重建就是了,然后再生成spfile,就算都丢失了还可以手工重写。笔者承认,spfile的丢失不能算是灾难性的,但是如果一个dba花费了很多精力根据数据库设置配的参数说丢失就丢失了,那何尝不是一种悲剧- -||(请勿对号入座)

那言归正传,我们下面就来看整个操作。

先说环境,还是和上篇一样,nocatalog

恢复之前做一个备份,下面是笔者自己写的备份脚本:

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;

}

要注意目录必须是存在的,不然也会报错哦~

先解释一下开头的configure,那如果确实是全权对数据库负责的话,还是建议在脚本里加上configure,毕竟这样可以保证使用自己定制的策略。至于对controlfile的备份,不仅可以采用笔者这样的方法,也可以在备份的时候加上include current controlfile的语句来备份控制文件。要注意的是,spfile在开启autobackup 的情况下也会和控制文件一起被备份,恢复的时候也是用的同一个备份文件,详情可以看后面的演示。

%F,这个是autobackup专用的一个存储标识,由dbid和时间组成,需要注意的是只能用于autobackup,如果在backup format的时候指定%F是会报错的。至于%U和还有其他的命名标识,笔者这里不复制粘贴了,大家要学会自己动手,g一下就能知道。

plus archivelog 这句语句是用来备份归档的,主要是一下5个步骤:

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

控制文件和参数文件的备份就到这里了,写得也不少,希望大家可以和笔者一样,自己动手试试,只有这样才会有进步嘛~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值