ORACLE联机日志文件丢失或损坏的处理方法

oracle

 

经验总结:

联机日志分为当前联机日志和非当前联机日志,非当前联机日志的损坏是比较简单的,一般通过clear命令就可以解决问题。

损坏非当前联机日志:
1、启动数据库,遇到ORA-00312 or ORA-00313错误,如:
ORA-00313: open failed for members of log group 4 of thread 1
ORA-00312: online log 3 thread 1: '/opt/oracle/db04/oradata/ORCL/redo03.log'
从这里我们知道日志组1的数据文件损坏或丢失了
从报警文件可以看到更详细的信息
2、查看V$log视图:
SQL> select group#,sequence#,archived,status from v$log;

    GROUP#  SEQUENCE# ARC STATUS

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

         1         54 YES INACTIVE

         2         55 NO  CURRENT

3             53 YES INACTIVE

可以知道,该组是非当前状态,而且已经归档。
3、用CLEAR命令重建该日志文件
SQL>alter database clear logfile group 3;
如果是该日志组还没有归档,则需要用
SQL>alter database clear unarchived logfile group 3;
4、打开数据库,重新备份数据库
SQL>alter database open;
说明:
1)、如果损坏的是非当前的联机日志文件,一般只需要clear就可以重建该日志文件,但是如果该数据库处于归档状态但该日志还没有归档,就需要强行clear。
2)、建议clear,特别是强行clear后作一次数据库的全备份。
3)、此方法适用于归档与非归档数据库。

损坏当前联机日志:

归档模式下当前日志的损坏有两种情况,
一、是数据库是正常关闭,日志文件中没有未决的事务需要实例恢复,当前日志组的损坏就可以直接用alter database clear unarchived logfile group n来重建。
二、是日志组中有活动的事务,数据库需要媒体恢复,日志组需要用来同步,有两种补救办法
A. 最好的办法就是通过不完全恢复,可以保证数据库的一致性,但是这种办法要求在归档方式下,并且有可用的备份
B. 通过强制性恢复,但是可能导致数据库不一致。
下面分别用来说明这两种恢复方法
5.1.2.1 通过备份来恢复
1、打开数据库,会遇到一个类似的错误
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\TEST\REDO01.LOG'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 系统找不到指定的文件

2、查看V$log,发现是当前日志
SQL> select group#,sequence#,archived,status from v$log;

GROUP# SEQUENCE# ARCHIVED STATUS
---------- ---------- -------- ----------------
1 1 NO CURRENT
2 2 YES INACTIVE
3 3 YES INACTIVE

3、发现clear不成功
SQL> alter database clear unarchived logfile group 1;
alter database clear unarchived logfile group 1
*
ERROR at line 1:
ORA-01624: log 1 needed for crash recovery of thread 1
ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\TEST\REDO01.LOG'

4、拷贝有效的数据库的全备份,并不完全恢复数据库
可以采用获取最近的SCN的办法用until scn恢复或用until cnacel恢复
recover database until cancel
先选择auto,尽量恢复可以利用的归档日志,然后重新
recover database until cancel
这次输入cancel,完成不完全恢复,也就是说恢复两次。
如:
SQL> recover database until cancel;
Auto
……
SQL> recover database until cancel;
Cancel;
5、利用alter database open resetlogs打开数据库
说明:
1、这种办法恢复的数据库是一致的不完全恢复,会丢失当前联机日志中的事务数据
2、这种方法适合于归档数据库并且有可用的数据库全备份。
3、恢复成功之后,记得再做一次数据库的全备份。
4、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为任何数据的丢失对于生产来说都是不容许的。

如果没有备份,进行强制性恢复
1、打开数据库,会遇到一个类似的错误
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\TEST\REDO01.LOG'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 系统找不到指定的文件

2、查看V$log,发现是当前日志
SQL> select group#,sequence#,archived,status from v$log;

GROUP# SEQUENCE# ARCHIVED STATUS
---------- ---------- -------- ----------------
1 1 NO CURRENT
2 2 YES INACTIVE
3 3 YES INACTIVE

3、发现clear不成功
SQL> alter database clear unarchived logfile group 1;
alter database clear unarchived logfile group 1
*
ERROR at line 1:
ORA-01624: log 1 needed for crash recovery of thread 1
ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\TEST\REDO01.LOG'

4、把数据库down掉
SQL>shutdown immediate

5、在init<sid>.ora中加入如下参数
_allow_resetlogs_corruption=TRUE

6、重新启动数据库,利用until cancel恢复
SQL>recover database until cancel;
Cancel
如果出错,不再理会,发出
SQL>alter database open resetlogs;

7、数据库被打开后,马上执行一个full export

8、shutdown数据库,去掉_all_resetlogs_corrupt参数

9、重建库

10、import并完成恢复

11、建议执行一下ANALYZE TABLE ...VALIDATE STRUCTURE CASCADE;
说明:
1、该恢复方法是没有办法之后的恢复方法,一般情况下建议不要采用,因为该方法可能导致数据库的不一致
2、该方法也丢失数据,但是丢失的数据没有上一种方法的数据多,主要是未写入数据文件的已提交或未提交数据。
3、建议成功后严格执行以上的7到11步,完成数据库的检查与分析
4、全部完成后做一次数据库的全备份
5、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为任何数据的丢失对于生产来说都是不容许的。

时间: 2024-12-21 21:52:02

ORACLE联机日志文件丢失或损坏的处理方法的相关文章

Oracle Inactive联机日志文件丢失的恢复方法

联机日志文件Inacitve状态表示这个日志包含的数据修改已经同步到数据文件中,实例恢 复时已不需要它,所以它的丢失不会造成任何的数据丢失,但是会造成数据库无法打开,解 决方法是把丢失的inactive删除掉,重新添加新的联机日志. 1)模拟灾难 首先查 看log的状态: SQL> select group#,sequence#,status from v$log; GROUP#  SEQUENCE# STATUS ---------- ---------- ----------------  

Oracle中Active或Current联机日志文件丢失后的恢复方法

联机日志文件状态为active或current表示该日志包含的数据修改还未完全同步到数据文 件中,在实例恢复时,还需要读取其中的redo记录重演,因此如果损坏,数据丢失在所难免 . 1)模拟灾难 首先查看log的状态: SQL> select group#,sequence#,status from v$log; GROUP#  SEQUENCE# STATUS ------ ---- ---------- ----------------     2          5 CURRENT  

联机日志文件损坏后的恢复方法

恢复 昨天遇到一个Oracle数据库的问题,环境是:Windows2000+Oracle9i.使用windows关机重启后,oracle无法连接,当用startup启动时总是报ORA-00333错误,检查Oracle文档对此问题的描述,如下:ORA-00333 redo log read error block string count stringCause: An I/O error occurred while reading the log described in theaccompa

ORACLE 回滚段表空间数据文件丢失或损坏处理方法(1)

oracle|数据 问题描述:这是一个回滚段表空间数据文件丢失或损坏的情景,这时oracle不能识别相应的数据文件.当你试图startup数据文件时会报ORA-1157,ORA-1110,并且可能会伴随着标识操作系统级别的错误,比如ORA-7360.当你试图以shutdown normal或shutdown immediate模式关闭数据库时会导至ORA-1116,ORA-1110,并可能伴随标识操作系统级别的错误,比如ORA-7368,有时以正常方式shutdown数据库根本shutdown不

ORACLE 回滚段表空间数据文件丢失或损坏处理方法(2)

oracle|数据 续上文:http://www.csdn.net/Develop/read_article.asp?id=20220 II. 数据库是启动着的 如果你检测到丢失或损坏了回滚段表空间的数据文件,并且数据库是运行着的,不要把它down掉.在很多情况下,数据库是启着的比关闭着解决问题更容易些. 这种情况的两种可能的解决方法: A)使丢失的那个数据文件offline,并从备份中恢复它,这种情况适用于数据库是处于归档方式的. B)另一个方法是offline掉所有的那个文件所属表空间的回滚

【恢复】Redo日志文件丢失的恢复

第一章 Redo日志文件丢失的恢复 1.1  online redolog file 丢失 联机Redo日志是Oracle数据库中比较核心的文件,当Redo日志文件异常之后,数据库就无法正常启动,而且有丢失据的风险,强烈建议在条件允许的情况下,对Redo日志进行多路镜像.需要注意的是,RMAN不能备份联机Redo日志文件.所以,联机Redo日志一旦出现故障,则只能进行清除日志了.清除日志文件即表明可以重用该文件. 1.1.1  数据库归档/非归档模式下inactive redo异常ORA-003

【体系结构】Oracle重做日志文件(Redo Log Files)

Oracle重做日志文件 --========================================= -- Oracle 联机重做日志文件(ONLINE LOG FILE) --=========================================   一.oracle中的几类日志文件     Redo log files      -->联机重做日志     Archive log files   -->归档日志     Alert log files     --&

SQL Server日志文件丢失的恢复方法

一.概述 在应用系统中,数据库往往是最核心的部分,一旦数据库毁坏或损坏,将会带来巨大的损失,所以数据库的管理越来越重要.我们在做数据库管理与维护工作中,不可避免会出现各种各样的错误,本文针对数据库的日志文件丢失时如何利用MDF文件恢复数据库的方法进行了研究. 二.数据库的恢复 当数据库的主数据MDF文件完好无损时,在丢失了LDF文件的情况下,如何利用MDF文件恢复数据库?我们把SQL Server的日志文件分为两类:一类是无活动事务的日志,另一类是含活动事务的日志,根据不同的日志,采取不同的方法

联机日志文件过小引发的log file 相关等待

      Oracle 联机重做日志文件记录了数据库的所有变化(DML,DDL或管理员对数据所作的结构性更改等),用于对于意外删除或宕机利用日志文件实现数据恢复来确保数据的完整性.但不合理的联机日志文件规划将引发日志相关的等待事件.下面是这样一个来自生产环境中的例子.   1.故障描述 --客户描述该数据库晚上用于实现数据同步以及汇总,以前一直工作的比较良好,随着需要同步的数量量的增大,最近变得越来越慢. --下面我们首先取了客户晚8点至第二天7点的awr report. WORKLOAD R