RMAN备份
——归档日志出现问题
摘要:在利用RMAN进行备份时出现RMAN-06059的错误,引起错误的原因为找不到归档日志。利用试验库再现错误,然后解决问题的过程如下:
第一步:在目标库里创建表并且插入数据产生出归档日志。
SQL> conn dk/dk
已连接。
SQL> create table dk as lect * from dba_objects;
表已创建。
SQL> inrt into dk lect * from dk;
已创建6165行。
SQL> r
1* inrt into dk lect * from dk
已创建12330行。
SQL> r
1* inrt into dk lect * from dk
已创建24660行。 #由于在线重做日志只有1m所以很容易产生归档日志。
第二步:利用catalog库连接到目标库做全库备份和归档日志备份。
C:\>rman
恢复管理器: 版本9.2.0.1.0 - Production
Copyright (c) 1995, 2002, Oracle Corporation. All rights rerved.
RMAN> connect catalog rman/rman
连接到恢复目录数据库
RMAN> connect target sys/dk@yan
连接到目标数据库: YAN (DBID=2827094113)
麒麟公园RMAN> register databa;
注册在恢复目录中的数据库
正在启动全部恢复目录的 resync
完成全部 resync
RMAN> report schema;
数据库方案报表
文件 KB 表空间 RB gs 数据文件名称
---- ---------- -------------------- ------- -------------------
1 256000 SYSTEM YES C:\ORACLE\ORADATA\YAN\SYSTEM01.DBF
2 204800 UNDOTBS1 YES C:\ORACLE\ORADATA\YAN\UNDOTBS01.DBF
3 6144 DK NO C:\ORACLE\ORADATA\YAN\DK01.DBF
RMAN> replace script fullyan { #创建全备的脚本fullyan
2> allocate channel c1 type disk;
3> allocate channel c2 type disk;
4> backup
5> format 'c:\yan\full_%U'
6> filespert=3
7> (databa include current controlfile);
8> relea channel c1;
9> relea channel c2;}
已替换脚本 fullyan
RMAN> run { execute script fullyan;} #运行全备的脚本
正在执行脚本: fullyan
…… …… …… ……
…… …… …… …… #活动目标中间过程略去
完成 backup 于 13-12月-06
释放的通道: c1
释放的通道: c2
RMAN> create script arcyan { #创建备份归档日志的脚本arcyan
2> allocate channel c1 type disk;
3> backup
4> format 'c:\yan\arc_%U'
5> filespert=3
6> archivelog all;
7> relea channel c1;
8> }
已创建脚本 arcyan
RMAN> run { execute script arcyan; } #运行备份归档日志的脚本
正在执行脚本: arcyan
…… …… …… ……
…… …… …… …… #中间过程略去
完成 backup 于 13-12月-06
释放的通道: c1
第三步:在目标库中重复第一步的操作产生归档日志,在目标库中删除所有的归档日志。
遇到的小问题。
SQL> r
1* inrt into dk lect * from dk
inrt into dk lect * from dk
*
ERROR 位于第 1 行:
ORA-01653: 表DK.DK无法通过128(在表空间DK中)扩展
原因与解决办法。
SQL> alter databa datafile 'C:\ORACLE\ORADATA\YAN\dk01.dbf' autoextend on
2 next 1m maxsize 10m;
数据库已更改。香烤鸡翅 #原因
SQL> alter databa datafile 'C:\ORACLE\ORADATA\YAN\dk01.dbf' autoextend on
2 next 1m maxsize unlimited;
数据库已更改。 #解决的方法
第四步:错误的产生
1.在运行全备脚本时没有报错。
RMAN> run { execute script fullyan;}
正在执行脚本: fullyan
…… …… …… ……
马上色
…… …… …… …… #中间过程略去
完成 backup 于 13-12月-06
释放的通道: c1
释放的通道: c2
2.在运行备份归档日志脚本时报错。
RMAN> run { execute script arcyan;}
正在执行脚本: arcyan
正在启动全部恢复目录的 resync
完成全部 resync
分配的通道: c1
通道 c1: sid=14 devtype=DISK
启动 backup 于 13-12月-06
当前日志已存档
释放的通道: c1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03015: error occurred in stored script arcyan
RMAN-03002: failure of backup command at 12/13/2006 10:16:59
RMAN-06059: expected archived log not found, lost of archived log compromis recoverability
ORA-19625: 识别文件C:\ORACLE\ORADATA\YAN\ARCHIVE\1_235.DBF时出错
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
第五步:解决方法
有三种解决办法
第一种:利用crosscheck archivelog all命令,对归档日志的有效性进行验证。
RMAN> crosscheck archivelog all
2> ;
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=14 devtype=DISK
对归档日志的验证失败
存档日志文件名 =C:\ARC\1_234.DBF 记录 ID=1 时间戳 =608944375
对归档日志的验证成功
存档日志文件名 =C:\ORACLE\ORADATA\YAN\ARCHIVE\1_235.DBF 记录 ID=2 时间戳 =608944646
存档日志文件名 =C:\ORACLE\ORADATA\YAN\ARCHIVE\1_238.DBF 鹰钩鼻子记录 ID=5 时间戳 =608944835
…… …… ……梦在飞 ……
…… …… …… …… #中间过程略去
对归档日志的验证失败
存档日志文件名 =C:\ORACLE\ORADATA\YAN\ARCHIVE\1_253.DBF 记录 ID=20 时间戳 =609070618
已交叉检验的 20 对象
RMAN> run { execute script arcyan;}
正在执行脚本: arcyan
…… …… …… ……
…… …… …… …… #中间过程略去
完成 backup 于 13-12月-06
释放的通道: c1
第二种:利用change archivelog all validate命令,对归档日志的有效性进行验证。
RMAN> change archivelog all validate;
深圳好玩的
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=13 devtype=DISK
对归档日志的验证成功
存档日志文件名 =C:\ORACLE\ORADATA\YAN\ARCHIVE\1_1.DBF 记录 ID=68 时间戳 =609156646
…… …… …… ……
…… …… …… …… #中间过程略去
对归档日志的验证成功
存档日志文件名 =C:\ORACLE\ORADATA\YAN\ARCHIVE\1_279.DBF 记录 ID=46 时间戳 =609092833
已交叉检验的 35 对象
RMAN> run { execute script arcyan;}
正在执行脚本: arcyan
释放的通道: ORA_DISK_1
分配的通道: c1
通道 c1: sid=13 devtype=DISK
启动 backup 于 18-12月-06
当前日志已存档
…… …… …… ……
…… …… …… …… #中间过程略去
完成 backup 于 18-12月-06
释放的通道: c1
以上两种方法本质上是一样的,主要的区别在于change archivelog all validate可以在9i之前的版本上应用,而crosscheck archivelog all在9i之后的版本中应用。(参考metalink Note:1015220.102)