2018-01-23 DBA日记,restore archivelog 失败原因之一

一、背景

昨天,有一个同事问我,“为什么恢复日志失败“。

二、问题

为什么使用oracle rman从NBU上恢复日志失败

三、收集数据及分析

3.1 询问

  • 询问当前数据库的状态。 回复,成功恢复控制文件和数据文件,现处于mount状态,等待日志恢复。
  • 询问调用NBU的接口参数是否正确? 回复正确,并说明曾成功恢复数据文件。

分析: NBU调用接口正常

  • 询问存放归档日志路径上是否有冲突文件? 回复没有,并检查确认一个文件也没有。

分析: 不存在冲突

  • 询问运行脚本及报错信息。

关键脚本如下:restore archivelog from sequence 100;

报错信息如下:no backup or copy of archivelog sequence 110 found to restore

3.2 检查

  • 检查是否有sequence 110的备份。命令如下:
rman target /
list backup of archivelog all;

分析:没有110的备份。

  • 进一步检查数据库的日志,命令如下:
sqlplus / as sysdba
archive log list;
Database log mode	       Archive Mode
Automatic archival	       Enabled
Archive destination	       +FRA
Oldest online log sequence     111
Next log sequence to archive   110
Current log sequence	       110

四、假设及验证

4.1 假设

通过以上的分析,我假设执行归档日志恢复的命令原理有点像事务,要么全部恢复成功,要么全部失败。 这里执行的命令“restore archivelog from sequence 100”是没有指定终止序号,那么就会一直恢复到 最新的日志序号,而在备份仓库里最新的日志序号是没有备份的,所以无法恢复,这时rman就会报错, 最后一个日志文件也不会恢复。

4.2 验证

  • 执行以下脚本验证想法:
list backup of archivelog all;
restore archivelog from sequence 100 until sequence 109;  # 根据上一命令查出可恢复的最大日志序号,如109
  • 成功恢复
  • 假设验证成功。

五、结论

执行归档日志恢复的命令原理有点像事务,要么全部恢复成功,要么全部失败。如果在恢复过程中找不到命令指定要恢复的文件,则部分存在的文件也不会恢复。最后显示失败。 所以,我们在执行恢复时,需要确认可恢复的最大的日志序号,并用until显示声明。

六、附录

恢复归档日志,可以有多个方式:
如,按时间恢复
restore archivelog from time "to_date('2016-10-11 10:00:00', 'YYYY-MM-DD HH24:MI:SS')" until time "to_date('2016-10-11 11:00:00', 'YYYY-MM-DD HH24:MI:SS')";

如,按logseq恢复
restore archivelog from logseq=60 until logseq=70;

又如,按sequence恢复
restore archivelog from sequence 60 until sequence 70;

1.备份所有归档日志文件
RMAN> backup archivelog all delete input;
第二: restore archivelog 的各种选项
1.restore archivelog all   恢复全部归档日志文件
RMAN> restore archivelog all;
2.只恢复 58这四个归档日志文件
RMAN> restore archivelog from logseq 5 until logseq 8;
3.恢复从第5个归档日志起
RMAN> restore archivelog from logseq 5;
4.恢复7天内的归档日志
RMAN> restore archivelog from time 'sysdate-7';
5. sequence between 写法
RMAN> restore archivelog sequence between 1 and 3;
6.恢复到哪个日志文件为止
RMAN> restore archivelog until logseq 3;
6.从第五个日志开始恢复
RMAN> restore archivelog low logseq 5;
7.到第5个日志为止
RMAN> restore archivelog high logseq 5;
如果想改变恢复到另外路径下 则可用下面语句
set archivelog destination to 'd:\backup';
RMAN> run
2> {allocate channel ci type disk;
3> set archivelog destination to 'd:\backup';
4> restore archivelog all;
5> release channel ci;
6> }

注册目录,归档,备份集:
RMAN>CATALOG ARCHIVELOG '/opt/log/1_60_archivelog.log';

Cataloging multiple copies in a directory
RMAN>CATALOG START WITH '/opt/log';
---ASM:
CATALOG START WITH '+disk'; # catalog allfiles from an ASM disk group
 
--本地目录:最后一定要加/
CATALOG START WITH '/fs1/datafiles/'; #catalog all files in directory
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值