`

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. 通过强制性恢复,但是可能导致数据库不一致。
下面分别用来说明这两种恢复方法


A、通过备份来恢复
1、打开数据库,会遇到一个类似的错误
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'D:ORACLEORADATATESTREDO01.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:ORACLEORADATATESTREDO01.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、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为任何数据的丢失对于生产来说都是不容许的。

 

B、如果没有备份,进行强制性恢复
1、打开数据库,会遇到一个类似的错误

ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'D:ORACLEORADATATESTREDO01.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:ORACLEORADATATESTREDO01.LOG'

 

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

 

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

 

注意:如果使用的是spfile 则在shutdown之前使用  alter system set "_allow_resetlogs_corruption"=true scope=spfile;

 

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、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为任何数据的丢失对于生产来说都是不容许的。

分享到:
评论

相关推荐

    oracle日志文件大全

    - **组的概念**:一个日志组由一个或多个相同的联机日志文件组成,至少包含两个组,每组至少有一个成员。 - **成员管理**:每个组内的成员具有相同的日志序列号,成员的大小相同,并分散存放在不同的物理磁盘上以...

    案例:归档模式下丢失或损坏一个数据文件???

    当在归档模式下遇到数据文件丢失或损坏的情况时,恢复过程既是一门技术也是一门艺术,需要深刻理解Oracle的恢复机制和熟练掌握相关命令。 #### 归档模式下的恢复基础 归档模式是Oracle提供的一种高级数据保护机制...

    Oracle 12c实战日志文件

    每个副本都存放在不同的位置,这样即便某一处的日志文件损坏或丢失,也不会影响到数据库的整体运行。建议将这些副本分布在不同的磁盘上,以进一步降低单点故障的风险。 #### 三、联机重做日志文件的结构与内容 **1...

    Oracle案例:损坏控制文件的恢复方法

    5. 在 internal 或 sys 下运行创建控制文件的脚本,注意完整列出联机日志或数据文件的路径。 在创建控制文件的脚本中,需要指定数据库的名称、日志文件的路径、数据文件的路径等信息。例如: STARTUP NOMOUNT ...

    控制文件、联机日志的管理

    4. **故障检测与恢复**:设置监控工具,及时发现并处理日志文件丢失或损坏的情况。 了解并熟练掌握控制文件和联机日志的管理,对于保障Oracle数据库的安全运行和高效恢复至关重要。通过合理配置和维护,可以有效...

    Oracle根据DBF文件恢复.rar

    2. **识别损坏情况**:确定哪些数据文件丢失或损坏,以及受影响的表空间。 3. **关闭数据库**:在进行恢复操作前,安全地关闭数据库以防止进一步的数据损坏。 4. **替换损坏文件**:如果系统01.dbf或undotbs01.dbf...

    Oracle系统中数据文件的恢复.pdf

    2. 不完全恢复:若归档日志丢失或损坏,无法应用所有归档日志和联机日志中的redo条目,只能将数据库恢复到故障前的某个时间点,导致该时间点之后的数据丢失。 案例分析 假定在t1时刻对数据库进行了物理备份,数据库...

    oracle遇到的问题汇总[参照].pdf

    #### 二、Oracle联机日志文件丢失或损坏的处理办法 **背景**:在Oracle数据库运行过程中,联机日志文件可能出现丢失或损坏的情况,这会影响到数据库的正常工作。 **分类及处理方法**: 1. **非当前联机日志文件...

    Oracle恢复流程图

    7. **系统数据文件的问题**: 如果system数据文件损坏或丢失,需要特别处理,因为它们包含了数据库的关键系统表和视图。 8. **非system数据文件的问题**: 对于非system数据文件的丢失或损坏,恢复过程通常与普通数据...

    Oracle的错误集合

    第三,我们讨论了ORA-15214和ORA-00313错误,这两个错误通常与联机日志文件丢失或损坏有关。联机日志是数据库进行事务持久化的重要部分,分为当前和非当前两种状态。对于非当前联机日志的损坏,可以通过`ALTER ...

    Oracle 12c数据库体系结构图文详解手册

    Oracle 数据库包含了用于存放数据的数据文件(DataFiles)、用于保护数据不丢失的联机重做日志文件(Online Redolog Files)和用于连接 Oracle 实例和数据库所需要的控制文件(Control Files)。 五、内存结构 ...

    Oracle恢复流程

    如果成功,执行`checkpoint`以同步数据文件和控制文件,然后激活联机日志。最后,如果需要,可以执行`alter database open resetlogs`以更改日志序列,特别是在使用resetlogs选项恢复数据库后。 总的来说,Oracle...

    Oracle数据文件

    7. **恢复数据文件**:如果数据文件丢失或损坏,可以使用备份和归档日志进行恢复。RMAN(恢复管理器)是Oracle提供的工具,用于执行这种恢复操作。 8. **表空间和数据文件的关系**:每个数据文件都属于一个特定的表...

    oracle恢复流程图

    15. **激活联机日志**: 一旦恢复完成,需要确保所有日志文件处于活动状态,以便记录后续的数据库更改。 16. **备份和维护**: 最后,确保定期进行数据库备份,这是防止数据丢失的关键步骤。 这个流程图详细展示了...

    linux系统下oracle数据库文件移动.pdf

    Oracle数据库主要包含数据文件、控制文件和联机日志文件三种类型,每种文件的移动方法略有不同。 首先,我们来看如何移动数据文件。Oracle提供了两种方法:ALTER DATABASE和ALTER TABLESPACE。 1. ALTER DATABASE...

    Oracle恢复流程图.pdf 图解

    - 如果日志文件损坏,需要先执行checkpoint操作,然后激活联机日志。 - 从备份恢复所有数据库文件后,应用所有有效的重做日志,并最终打开数据库。 ##### 4. 数据库重启与验证 - **数据库重启**:完成所有恢复...

    Oracle11g通过DBF恢复数据

    Oracle11g提供了一套完整的恢复机制,包括联机日志(Redo Logs)、归档日志以及控制文件等。在数据恢复过程中,通常需要以下步骤: 1. **创建备份**:在任何恢复操作之前,确保有最新的数据库备份至关重要。这可以...

Global site tag (gtag.js) - Google Analytics