重做日志文件丢失的恢复(一)

 

重做日志文件是ORACLE数据库不可缺少的组成部分,Oracle服务器将对数据库所有更改按顺序记录到重做日志缓冲区中,LGWR进程把重做条目从重做日志缓冲区写入联机重做日志文件中,在发生介质故障时,会提供恢复机制,这也是ORACLE数据库保证数据安全的一种手段。

在真实的环境中,可能会因为误删除或其他原因,丢失了重做日志文件,如果数据库在启动时检测到重做日志丢失,数据库将无法启动。如果数据库在运行时切换日志文件组,检测到下一组或者全部的重做日志丢失,数据库将会崩溃。所以有必要学习下Oracle重做日志恢复的技巧

以下是模拟了一些丢失重做日志文件场景恢复过程,以供参考。

一、    丢失非活动日志文件的恢复

如果丢失的日志文件组状态为‘INACTIVE,说明该日志组已经完成检查点,数据库不会发生数据丢失,但是千万不能够忽视,因为当日志切换到该日志组时会发生错误。恢复的方法有很多种,以下罗列了三种方法:

 

测试环境

SQL> select * from v$version;

 

BANNER

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

Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production

PL/SQL Release 11.1.0.6.0 - Production

CORE    11.1.0.6.0      Production

TNS for Linux: Version 11.1.0.6.0 - Production

NLSRTL Version 11.1.0.6.0 – Production

 

SQL> select group#,members,status from v$log;

 

    GROUP#    MEMBERS STATUS

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

         1          2 INACTIVE

         2          1 CURRENT

         3          2 INACTIVE

 

 

模拟故障

 

[oracle@mylinux2 ~]$ rm /u01/oradata/orcl/redo01.log

当数据库日志切换到该日志组后,发现日志文件不存在,数据库将会崩溃,除了DBA外其他用户都不能连接到数据库。

 

从警告日志可得到下面信息:

Sun Aug 08 15:57:51 2010

Errors in file /u01/diag/rdbms/orcl/dave/trace/dave_m000_10925.trc:

ORA-00313: open failed for members of log group 1 of thread 1

ORA-00312: online log 1 thread 1: '/u01/oradata/orcl/redo01.log'

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

 

启动数据库,会提示丢失了日志文件。

SQL> startup

ORACLE instance started.

 

Total System Global Area  422678528 bytes

Fixed Size                  1300324 bytes

Variable Size             251660444 bytes

Database Buffers          163577856 bytes

Redo Buffers                6139904 bytes

Database mounted.

ORA-00313: open failed for members of log group 1 of thread 1

ORA-00312: online log 1 thread 1: '/u01/oradata/orcl/redo01.log'

执行恢复(三种恢复方法)

l  直接删除丢失的重做日志文件组,但是删除后必须保证数据库的重做日志组数目不能小于2个。

a)         删除重做日志文件组:

SQL> alter database drop logfile group 1;

Database altered.

b)         增加重做日志文件组:

SQL>alter database add logfile group 1 ('/u01/oradata/orcl/redo1.log','/u01/oradata/orcl/redo01.log') size 50m;

Database altered.

l  在丢失的重做日志组中增加同样大小的REDO文件,然后删除丢失的MEMBER

a)   增加重做日志文件成员:

SQL> alter database add logfile member '/u01/oradata/orcl/redo01.log' to group 1;

Database altered.

b)         删除丢失的日志文件:

SQL> alter database drop logfile member '/u01/oradata/orcl/redo1.log';

Database altered.

 

c)      这种方法只适合丢失的文件组中至少还有一个成员是可用的,如果丢失的日志文件所属的文件组只有这一个文件,那么这种方法是不适合的。在添加日志文件时会出错:

SQL> alter database add logfile member '/u01/oradata1/redo1.log' to group 1;

alter database add logfile member '/u01/oradata1/redo01.log' to group 1

*

ERROR at line 1:

ORA-00313: open failed for members of log group 1 of thread 1

ORA-00312: online log 1 thread 1: '/u01/oradata/orcl/redo01.log'

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

 

l  通过clear日志恢复

SQL> alter database clear logfile group 1;

Database altered.

 

SQL> alter database open;

Database altered.

需要说明的是,如果数据库处于归档模式下,则需要使用下面的命令来清除日志:

alter database clear unarchived logfile group 1;

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12751636/viewspace-683981/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12751636/viewspace-683981/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值