当前位置:操作系统 > Unix/Linux >>

ORA-16038错误--当前REDO不能归档解决

ORA-16038错误--当前REDO不能归档解决
 
说明一:归档模式下当前日志的损坏有两种情况:
一、是数据库是正常关闭,日志文件中没有未决的事务需要实例恢复,当前日志组的损坏就可以直接用alter database clear unarchived logfile group n来重建。
二、是日志组中有活动的事务,数据库需要介质恢复,日志组需要用来同步,有两种补救办法
A. 最好的办法就是通过不完全恢复,可以保证数据库的一致性,但是这种办法要求在归档方式下,并且有可用的备份
B. 通过强制性恢复即基于cancel,但是可能导致数据库不一致。
基于CANCEL的不一致恢复如下:
可以采用获取最近的SCN的办法用until scn恢复或用until cancel恢复
recover database until cancel 或者SCN号,
先选择auto,尽量恢复可以利用的归档日志,然后重新
recover database until cancel
这次输入cancel,完成不完全恢复,也就是说恢复两次。类似如下:
SQL> recover database until cancel;
Auto
……
SQL> recover database until cancel;
Cancel;

 

 
说明二:非当前日志损坏
1)、如果损坏的是非当前的联机日志文件,一般只需要clear就可以重建该日志文件,但是如果该数据库处于归档状态但该日志还没有归档,就需要强行clear。
2)、建议clear,特别是强行clear后作一次数据库的全备份。
3)、此方法适用于归档与非归档数据库。
 
3.测试数据库-归档模式示例如下:
在startup时报如下错误:
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-16038: log 1 sequence# 56 cannot bearchived
ORA-19809: limit exceeded for recovery files
ORA-00312: online log 1 thread 1:'/u02/oradata/orcl/redo01.log'

 

从v$log中找到当前日志状态,可知当前日志组是3,而group 1还未归档;
 
SQL> select group#,sequence#,archived,status fromv$log;
    GROUP#  SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
        1         56 NO INACTIVE
        3         58 NO CURRENT
        2         57 NO INACTIVE

 

用alter database clear logfile命令尝试重构logfile group1,失败;
 
SQL> alter database clear logfile group 1;
alter database clear logfile group 1
*
ERROR at line 1:
ORA-00350: log 1 of instance orcl (thread 1) needsto be archived
ORA-00312: online log 1 thread 1:'/u02/oradata/orcl/redo01.log'

 

失败的原因是group 1还没有归档,需要加上”unarchived”参数;
SQL> alter database clear unarchived logfilegroup 1;

Database altered.

 

 
成功后可以正常open了;
 
SQL> alter database open;

Database altered.

 


CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,