`

Oracle online redo log日志 (当前或非当前日志) 损坏之后的DB恢复

阅读更多

SQL>startup 之后报错

ORA-00314:log 3 of thread 1 , expected sequence# doesn't match
ORA-00312: online log 3 thread 1 :'/home/oracle/app/oracle/oradata/ora8/redo01.log'

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



如何查询online redo log的状态(是否current 还是inactive) .

数据库mount或open状态下查询 v$log 即可看到。

例如:

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


GROUP# SEQUENCE# ARCHIV STATUS

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

1 67 YES INACTIVE

2 68 YES INACTIVE

3 69 NO CURRENT




下面分;兩種情況分析:


1. 如果查询v$log發現損壞的online redo log是inactive, 說明該組日志是非當前日志, 而且已經歸檔完成 ( STATUS 是INACTIVE , ARCHIVE 是YES ) .

處理方法(適用於歸檔及非歸檔數據庫) :

使用clear 命令清理這個文件所在的redo log group .

SQL> alter database clear logfile group 3 ;

如果該日志組還沒有歸檔 (STATUS 是INACTIVE , ARCHIVE 是 NO )

那麼需要使用如下命令

SQL> alter database clear unarchived logfile group 3 ;

然後打開數據庫 , 備份 .



2. 如果查询v$log發現損壞的online redo log是current , 說明該組日志是當前日志. ( STATUS 是current , ARCHIVE 是NO ) .

当前日志损坏分为两种情况:

第一种是日志中没有未决的事务需要实例恢复(所有事务都已经提交或回滚完成),那么当前日志组的损坏可以直接用 alter database clear unarchived logfile group n ; 来重新建立。

第二种是日志组中出现问题的时候有活动(Active)的事务. 数据库需要媒体恢复(Media Recovery), 日志组需要应用来同步数据,有两种补救方法:

A. 最好的方法是不完全恢复,可以保证数据的一致性,但是这种办法要求在归档方式下,并且有可用的备份。

B. 通过强制性恢复,不过这种方法可能导致数据不一致。


方法A: 通过可用备份实行不完全恢复。

可能看到的问题点是,打开数据库的时候

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) 系统找不到指定的文件

查看 v$log 发现是当前日志 。

GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS

1 1 31 104857600 1 NO CURRENT

2 1 29 104857600 1 YES INACTIVE

3 1 30 104857600 1 YES INACTIVE

试图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'

拷贝有效的数据库的全备份,并不完全恢复数据库 可以采用获取最近的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: 通过强制恢复,可能导致数据不一致。

可能看到的问题点是,打开数据库的时候

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) 系统找不到指定的文件

查看 v$log 发现是当前日志 。

GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS

1 1 31 104857600 1 NO CURRENT

2 1 29 104857600 1 YES INACTIVE

3 1 30 104857600 1 YES INACTIVE

试图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'

把数据库down掉
SQL>;shutdown immediate 在init<sid>;.ora中加入如下参数 _allow_resetlogs_corruption=TRUE 重新启动数据库,利用until cancel恢复
SQL>;recover database until cancel;
Cancel 如果出错,不再理会,发出
SQL>;alter database open resetlogs; 数据库被打开后,马上执行一个full export
shutdown数据库,去掉_all_resetlogs_corrupt参数 重建库
import并完成恢复 建议执行一下ANALYZE TABLE ...VALIDATE STRUCTURE CASCADE;

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

分享到:
评论

相关推荐

    Archive Log 学习笔记 --oracle 数据库

    - 归档日志是联机重做日志(Online Redo Log)的备份,当一个redo log group切换时,如果数据库配置为归档模式,那么当前日志组的内容会被复制到归档日志中。 - 归档日志有两种模式:非归档模式(Noarchivelog)和...

    oracle归档日志挖掘详细步骤.docx

    手动切换当前redo日志的命令是`ALTER SYSTEM ARCHIVE LOG CURRENT`,这有助于确保数据库在发生故障时能够恢复到特定时间点。 接下来,查询归档日志的时间范围至关重要,因为我们需要确定要分析的具体日志文件。可以...

    Oracle在线重做日志文件详解

    ALTER SYSTEM SET DB_CREATE_ONLINE_LOG_DEST_1='/ORACLE/ORALOG/OMF'; ALTER DATABASE ADD LOGFILE GROUP 6; ALTER DATABASE DROP LOGFILE GROUP 6; ``` #### 六、配置归档模式 1. **启用归档模式** - 启用...

    Oracle数据库归档日志挖掘步骤

    1. 手动切换当前 redo 日志:使用 alter system archive log current; 语句可以手动切换当前 redo 日志,以便开始归档日志的挖掘。 2. 查询归档日志的时间范围:使用 select 语句可以查询归档日志的时间范围,例如...

    小布老师 Oracle9i DBAFundamentals I 视频教程学习笔记

    - **在线重做日志文件(Online redo log files)**:记录对数据库所做更改的文件,以便在出现故障时能够恢复数据。 - **控制文件(Control files)**:包含维护和验证数据库完整性的必要信息。 此外,归档的重做...

    ORACLE 10g DATAGUARD 部署全过程

    需要创建与在线重做日志(Online Redo Log)数量相等且大小相同的N+1个Standby Redo Log File Group。例如,如果主数据库有4个Online Redo Log,那么需要创建5个Standby Redo Log File Group。 3. **配置初始化参数...

    Oracle体系结构介绍

    - **在线重做日志文件(Online Redo Log Files)**:这些文件记录了对数据库所做的所有更改,以便在系统崩溃时能够进行恢复操作。 - **密码文件(Password File)**:用于存储用户的登录凭证。 - **参数文件...

    WIN平台单机搭建oracle dg 实验与总结

    ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=dg2 LGWRASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dg2'; ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=ENABLE; ALTER SYSTEM SET FAL_SERVER=...

    Oracle 10g启动后报ORA-16038错误的解决方法

    ORA-00312: online log 1 thread 1: '/oradata/10g/db/instant/redo01.log' ``` 此错误表明,在尝试归档序列号为230的日志文件时出现了问题,并且达到了恢复文件目的地大小的限制。同时给出了具体的问题文件路径为`...

    打开Oracle数据库的归档模式

    归档模式下,数据库系统不仅记录在联机重做日志(Online Redo Logs)中的更改,还会将这些更改复制到独立的归档日志(Archive Logs)中。当数据库在非归档模式下运行时,一旦日志切换发生,旧的日志文件就会被覆盖,而在...

    Oracle性能测试指标

    若该值较低,可能是由于online redo log空间不足或log切换速度慢,需要调整相关设置。 3. **缓冲区命中率(Buffer Hit %)**:衡量数据块在数据缓冲区被命中的比例。一般应保持在90%以上,过低可能意味着需要增加db_...

    SAP系统Oracle DataGuard配置操作手册

    - **日志同步**:主数据库将变更写入 Redo Log 后,会将其同步到远程备用数据库,后者从 Redolog 中读取变更内容,并应用到自己的数据文件中。 #### Oracle DataGuard 的保护模式 Oracle 提供了三种不同的保护模式...

    Oracle数据库常见维护问题手册-精典

    Redo Log Buffer的状态对于理解数据库的重做日志活动非常重要,可以通过以下查询来获得相关信息: ```sql SELECT member, status, sequence#, bytes/(1024*1024) "Size in MB" FROM v$logfile WHERE status = '...

    最全的oracle常用命令大全.txt

    su - oracle -c "exp system/manager full=y inctype=complete file=/oracle/export/db_comp$rq.dmp" 累计备份的SH文件:exp_cumu.sh rq=` date +"%m%d" ` su - oracle -c "exp system/manager full=y inctype=...

    Windows环境下配置oracle-11gR2-Data-Guard详细过程

    ALTER SYSTEM SET log_archive_dest_2='SERVICE=standby LGWRASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby' SCOPE=spfile; ALTER SYSTEM SET log_archive_dest_state_1='enable' SCOPE...

    Oracle数据库结构精选教材.pptx

    联机重做日志文件(Online Redo Log Files)记录了所有对数据库的改变,用于恢复和故障修复。归档重做日志文件(Archived Redo Log Files)是已满的重做日志文件的备份,用于长期保留更改历史。 理解Oracle数据库的这些...

    Windows2008R2配置oracle11gR2DataGuard详细过程及切换测试文档

    Alter system set log_archive_dest_2='SERVICE=standby LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby' scope=spfile; Alter system set log_archive_dest_state_1='enable' scope=...

    Oracle课堂笔记(很全很详细的Oracle笔记)

    - **Online Redo Logs**: 当前正在使用的重做日志文件。 - **Archive Redo Logs**: 已经归档的重做日志文件。 - **Parameter File (ORA)**: 包含数据库运行所需的配置参数。 ### Oracle内存结构 - **SGA (System ...

    oracle11g dataguard 配置

    * 一般而言,standby redo 日志文件组数要比 primary 数据库的 online redo 日志文件组数至少多一个。 * 建议 standby redo 日志组数量基于 primary 数据库的线程数。 四、其他注意事项 1. 配置环境数据库用户...

Global site tag (gtag.js) - Google Analytics