我们在Oracle的日常运维中,有可能会遇到重做日志组丢失的情况。下面我将模拟丢失不同状态的日志组,并分别给出解决办法:

重做日志有以下几种状态,如下:
-  CURRENT:此状态表示正在被 LGWR 使用的日志组;
-  ACTIVE:重做日志组中仍含有实例恢复所需的重做数据;
-  INACTIVE:表示实例恢复不再需要此日志组,可以覆盖;
-  UNUSED:未使用;
-  CLEARING:对已存在的日志组执行 clear 操作的后的状态;
-  CLEARING_CURRENT:日志正在清空。当清空出错时,该日志组被置于这种状态。

1. 丢失INACTIVE状态下的日志组

1)查看当前日志组的状态

SYS@lgr> select group#,members,status from v$log;

GROUP#    MEMBERS STATUS
---------- ---------- ----------------
     1        1 CURRENT
     2        1 INACTIVE
     3        1 INACTIVE

SYS@lgr> select group#,member from v$logfile order by 1;

GROUP# MEMBER
---------- --------------------------------------------------
     1 /u01/app/oracle/oradata/lgr/redo01.log
     2 /u01/app/oracle/oradata/lgr/redo02.log
     3 /u01/app/oracle/oradata/lgr/redo03.log

2)在操作系统层面删除GROUP2日志组,模拟丢失了INACTIVE状态的日志组

SYS@lgr> !rm /u01/app/oracle/oradata/lgr/redo02.log

SYS@lgr> !ls /u01/app/oracle/oradata/lgr/redo02.log
ls: /u01/app/oracle/oradata/lgr/redo02.log: No such file or directory

3)前两步已经完成了实验环境的准备,重启数据库会报错

SYS@lgr> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@lgr> startup
ORACLE instance started.

Total System Global Area  830930944 bytes
Fixed Size            2257800 bytes
Variable Size          536874104 bytes
Database Buffers      285212672 bytes
Redo Buffers            6586368 bytes
Database mounted.
ORA-03113: end-of-file on communication channel
Process ID: 17099
Session ID: 125 Serial number: 5

4)在报错中不能分析出出错的原因,我们查看alert日志可以看出是丢失了GROUP2日志组

ORA-00313: open failed for members of log group 2 of thread 1
ORA-00312: online log 2 thread 1: '/u01/app/oracle/oradata/lgr/redo02.log'
ORA-27037: unable to obtain file status

5)启动数据库到MOUNT状态

SYS@lgr> startup mount;
ORACLE instance started.

Total System Global Area  830930944 bytes
Fixed Size            2257800 bytes
Variable Size          536874104 bytes
Database Buffers      285212672 bytes
Redo Buffers            6586368 bytes
Database mounted.

6)CLEAR一下GROUP2日志组,并OPEN数据库

SYS@lgr> alter database clear logfile group 2;

Database altered.

SYS@lgr> alter database open;

Database altered.

7)查看日志组状态及物理文件,发现均已正常,至此完成日志组恢复

SYS@lgr> select group#,members,status from v$log;

GROUP#    MEMBERS STATUS
---------- ---------- ----------------
     1        1 CURRENT
     2        1 UNUSED
     3        1 INACTIVE

SYS@lgr> select group#,member from v$logfile order by 1;

GROUP# MEMBER
---------- --------------------------------------------------
     1 /u01/app/oracle/oradata/lgr/redo01.log
     2 /u01/app/oracle/oradata/lgr/redo02.log
     3 /u01/app/oracle/oradata/lgr/redo03.log

总结:丢失INACTIVE状态的日志组,恢复时需要:①启动数据库到MOUNT状态;②对丢失的日志组执行CLEAR命令;③打开数据库。

2.丢失CURRENT状态下的日志组

1)查看当前日志组的状态

SYS@lgr> select group#,members,status from v$log;

GROUP#    MEMBERS STATUS
---------- ---------- ----------------
     1        1 INACTIVE
     2        1 CURRENT
     3        1 INACTIVE

SYS@lgr> select group#,member from v$logfile;

GROUP# MEMBER
---------- --------------------------------------------------
     3 /u01/app/oracle/oradata/lgr/redo03.log
     2 /u01/app/oracle/oradata/lgr/redo02.log
     1 /u01/app/oracle/oradata/lgr/redo01.log

2)在操作系统层面删除GROUP3日志组,模拟丢失了INACTIVE状态的日志组

SYS@lgr> !rm /u01/app/oracle/oradata/lgr/redo03.log

SYS@lgr> !ls /u01/app/oracle/oradata/lgr/redo03.log
ls: /u01/app/oracle/oradata/lgr/redo03.log: No such file or directory

3)重启数据库到MOUNT状态

SYS@lgr> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@lgr> startup mount;
ORACLE instance started.

Total System Global Area  830930944 bytes
Fixed Size            2257800 bytes
Variable Size          536874104 bytes
Database Buffers      285212672 bytes
Redo Buffers            6586368 bytes
Database mounted.

4)采用 recover 的方式完成重做日志恢复

SYS@lgr> recover database until cancel;
Media recovery complete.

5)resetlogs方式打开数据库

SYS@lgr> alter database open resetlogs;

Database altered.

6)检查日志组状态及物理文件,都已正常,至此完成恢复

SYS@lgr> select group#,members,status from v$log;

GROUP#    MEMBERS STATUS
---------- ---------- ----------------
     1        1 CURRENT
     2        1 UNUSED
     3        1 UNUSED

SYS@lgr> col member for a50   
SYS@lgr> select group#,member from v$logfile;

GROUP# MEMBER
---------- --------------------------------------------------
     3 /u01/app/oracle/oradata/lgr/redo03.log
     2 /u01/app/oracle/oradata/lgr/redo02.log
     1 /u01/app/oracle/oradata/lgr/redo01.log

总结:丢失CURRENT状态下的日志组,我们需要如下操作:①重启数据库到MOUNT状态;②recover方式完成恢复;③resetlogs方式打开数据库。

【Oracle】恢复重做日志组的更多相关文章

  1. oracle如何重做日志组

    1.查询数据库中的重做日志组 SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STA ...

  2. Oracle丢失重做日志的几种场景恢复

    实验环境:RHEL6.4 + Oracle 11.2.0.4 一.丢失重做日志组中成员 1.1 故障模拟 1.2 处理方法 1.3 实际处理过程 二.丢失重做日志组 2.1 丢失INACTIVE重做日 ...

  3. Oracle RACDB 增加、删除 在线重做日志组

    Oracle RACDB 增加.删除 在线重做日志组 select * from v$log;select * from v$logfile ; ----删除日志组:alter database dr ...

  4. Oracle 联机重做日志文件(ONLINE LOG FILE)

    --========================================= -- Oracle 联机重做日志文件(ONLINE LOG FILE) --================== ...

  5. (Les16 执行数据库恢复)-重做日志文件恢复

    丢失重做日志文件         丢失了重做日志文件组中的某个成员,并且组中至少还有一个成员:             -不会影响实例的正常操作.             -预警日志中会收到一条信息, ...

  6. oracle redo 重做日志文件

    以下易容翻译自oracle dba官方文档,不足之处还望指出. 管理重做日志文件 学习目标:1.解释重做日志文件的目的2.描述重做日志文件的结构3.学会控制日志切换与检查点4.多元化管理重做日志文件5 ...

  7. Oracle数据库重做日志及归档日志的工作原理说明

    Oracle数据库重做日志及归档日志的工作原理: lgwr进程将redo log buffer中的重做数据写入到redo log中,此时的redo log分组,每当一个redo log group写满 ...

  8. 数据库实例: STOREBOOK > 数据文件/退回字段/重做日志组|管理员

    ylbtech-Oracle:数据库实例: STOREBOOK  > 数据文件/退回字段/重做日志组|管理员 数据文件/退回字段/重做日志组|管理员 1. 数据库实例: STOREBOOK  & ...

  9. ORACLE - 管理重做日志文件

    ORACLE重做日志文件用于在数据库崩溃等情况下用于恢复数据,默认情况下为三个文件redo01.log/redo02.log/redo03.log,文件组循环使用,在录入与更新操作比较多的应用中,日志 ...

随机推荐

  1. 00.用 yield 实现 Python 协程

    来源:Python与数据分析 链接: https://mp.weixin.qq.com/s/GrU6C-x4K0WBNPYNJBCrMw 什么是协程 引用官方的说法: 协程是一种用户态的轻量级线程,协 ...

  2. 混合了RBAC和ACL的权限系统(二) -- 基于RBAC的系统权限

    http://fightplane.iteye.com/blog/1278464 1. 概念说明 A 系统级权限:从角色的角度出发,不特定于任何实际的资源的权限.比如“用户是否可以修改标题”这个权限, ...

  3. 【ACM】hdu_zs3_1006_AB_201308101123

    A/B Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)Total Submission ...

  4. 深入分析JavaWeb Item38 -- 监听器(Listener)高速学习

    一.监听器介绍 1.1.监听器的概念 监听器是一个专门用于对其它对象身上发生的事件或状态改变进行监听和对应处理的对象,当被监视的对象发生情况时,马上採取对应的行动.监听器事实上就是一个实现特定接口的普 ...

  5. Cookie && Session && Token

    Cookies Cookie的由来: HTTP 本身是一个无状态的 request/response 协议. server接收一个来自client的request, 处理完以后返回一个response ...

  6. 关东升的《从零開始学Swift》即将出版

    大家好: 苹果2015WWDC大会公布了Swift2.0,它较之前的版本号Swift1.x有非常大的变化.所以我即将出版<从零開始学Swift><从零開始学Swift>将在&l ...

  7. Android 65K问题之Multidex原理分析及NoClassDefFoundError的解决方法

    Android 65K问题相信困惑了不少人,尽管AS的出来能够通过分dex高速解决65K问题,可是同一时候也easy由于某些代码没有打包到MainDex里引起NoClassDefFoundError. ...

  8. 很强大的shell写的俄罗斯方块

    网上看到的一个用linux的shell脚本写的俄罗斯方块. 是我至今见过写的最牛逼的shell了.共享一下. 原作者信息在脚本的凝视中有. 下载地址:点击下载 #!/bin/bash # Tetris ...

  9. Java类集-list

    Collection 子接口: ArrayList是List 接口和Collection接口的一个子类,用于实例化两种接口 package leiji; import java.util.ArrayL ...

  10. 一些求数据库对象的SQL语句

    use [mydb] go --存储过程 SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE routine_type='PROCEDURE' AND SP ...