admin 管理员组

文章数量: 1184232


2024年2月20日发(作者:update sql进阶)

RMAN备份

——归档日志出现问题

摘要:在利用RMAN进行备份时出现RMAN-06059的错误,引起错误的原因为找不到归档日志。利用试验库再现错误,然后解决问题的过程如下:

第一步:在目标库里创建表并且插入数据产生出归档日志。

SQL> conn dk/dk

已连接。

SQL> create table dk as select * from dba_objects;

表已创建。

SQL> insert into dk select * from dk;

已创建6165行。

SQL> r

1* insert into dk select * from dk

已创建12330行。

SQL> r

1* insert into dk select * from dk

已创建24660行。 #由于在线重做日志只有1m所以很容易产生归档日志。

第二步:利用catalog库连接到目标库做全库备份和归档日志备份。

C:>rman

恢复管理器: 版本9.2.0.1.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.

RMAN> connect catalog rman/rman

连接到恢复目录数据库

RMAN> connect target sys/dk@yan

连接到目标数据库: YAN (DBID=2827094113)

RMAN> register database;

注册在恢复目录中的数据库

正在启动全部恢复目录的 resync

完成全部 resync

RMAN> report schema;

- 1 -

数据库方案报表

文件 KB 表空间 RB segs 数据文件名称

---- ---------- -------------------- ------- -------------------

1 256000 SYSTEM YES C:

2 204800 UNDOTBS1 YES C:

3 6144 DK NO C:

RMAN> replace script fullyan { #创建全备的脚本fullyan

2> allocate channel c1 type disk;

3> allocate channel c2 type disk;

4> backup

5> format 'c:yanfull_%U'

6> filesperset=3

7> (database include current controlfile);

8> release channel c1;

9> release 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:yanarc_%U'

5> filesperset=3

6> archivelog all;

7> release channel c1;

8> }

已创建脚本 arcyan

RMAN> run { execute script arcyan; } #运行备份归档日志的脚本

正在执行脚本: arcyan

…… …… …… ……

- 2 -

…… …… …… …… #中间过程略去

完成 backup 于 13-12月-06

释放的通道: c1

第三步:在目标库中重复第一步的操作产生归档日志,在目标库中删除所有的归档日志。

遇到的小问题。

SQL> r

1* insert into dk select * from dk

insert into dk select * from dk

*

ERROR 位于第 1 行:

ORA-01653: 表无法通过128(在表空间DK中)扩展

原因与解决办法。

SQL> alter database datafile 'C:' autoextend on

2 next 1m maxsize 10m;

数据库已更改。 #原因

SQL> alter database datafile 'C:' autoextend on

2 next 1m maxsize unlimited;

数据库已更改。 #解决的方法

第四步:错误的产生

1.在运行全备脚本时没有报错。

RMAN> run { execute script fullyan;}

正在执行脚本: fullyan

…… …… …… ……

…… …… …… …… #中间过程略去

完成 backup 于 13-12月-06

释放的通道: c1

释放的通道: c2

2.在运行备份归档日志脚本时报错。

- 3 -

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 compromises recoverability

ORA-19625: 识别文件C:ORACLEORADATAYANARCHIVE1_时出错

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:ARC1_ 记录 ID=1 时间戳 =608944375

对归档日志的验证成功

存档日志文件名 =C:ORACLEORADATAYANARCHIVE1_ 记录 ID=2 时间戳 =608944646

存档日志文件名 =C:ORACLEORADATAYANARCHIVE1_ 记录 ID=5 时间戳 =608944835

…… …… …… ……

- 4 -

…… …… …… …… #中间过程略去

对归档日志的验证失败

存档日志文件名 =C:ORACLEORADATAYANARCHIVE1_ 记录 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:ORACLEORADATAYANARCHIVE1_ 记录 ID=68 时间戳 =609156646

…… …… …… ……

…… …… …… …… #中间过程略去

对归档日志的验证成功

存档日志文件名 =C:ORACLEORADATAYANARCHIVE1_ 记录 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)

- 5 -

第三种:利用skip inaccessible命令,跳过损坏的归档日志文件。

RMAN> run {

2> allocate channel c1 type disk;

3> backup

4> skip inaccessible

5> format 'c:yanarcyan_%U'

6> archivelog all;

7> release channel c1;

8> }

分配的通道: c1

通道 c1: sid=14 devtype=DISK

启动 backup 于 13-12月-06

当前日志已存档

未找到归档的日志C:ORACLEORADATAYANARCHIVE1_或是目录超出同步

跳过无法访问的文件C:ORACLEORADATAYANARCHIVE1_

…… …… …… ……

…… …… …… …… #中间过程略去

RMAN-06061: 警告: 跳过归档日志将影响可恢复性

…… …… …… ……

…… …… …… …… #中间过程略去

完成 backup 于 13-12月-06

释放的通道: c1

总结:在crosscheck archivelog all与change archivelog all validate之后如果没有全备这时数据库不能够做完全恢复的,所以建议在发现归档日志备份出现问题的时候,要及时的做个全备。同时,crosscheck

archivelog all与change archivelog all validate可以根本的解决上述问题,而skip inaccessible必须要修改备份脚本所以不建议利用这个方法但是当出现这类问题时可以先用这种方法试验一下是否能够解决这个问题然后再利用crosscheck archivelog all与change archivelog all validate从根本上解决。

- 6 -


本文标签: 日志 归档 脚本 备份 恢复