我们在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增加两个重做日志组文件,Oracle重做日志文件

    Oracle重做日志文件 原理:重做日志记录将以循环的方式在sga区的重做日志高速缓冲区中进行缓存,并由后台进程LGWR写入到重做日志文件中. 重做日志文件记录了对数据文件的修改操作,还记录了对回滚段 ...

  2. oracle重做control,Oracle 通过Database Control 向重做日志组中添加成员

    在Oracle用户下启动服务: emctl start dbconsole Database Control 登录网址:https://ip地址:1158/em,如下图: 登录Database Con ...

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

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

  4. Oracle的重做日志

    Oracle数据库在运行当中,用户更改的数据首先会存放在数据库高速缓冲区当中,为了提升磁盘读写,oracle机制不会频繁的将缓冲区的数据写到磁盘,而是等到检查点或者数据高速缓冲区达到一定数量时才会写入 ...

  5. 12.Oracle Redo重做日志管理

    文章目录 前言 一.Oracle为何引入重做日志 二.读取重做日志文件信息 三.判断是否归档 3.1.设置数据库归档模式 四.重做日志组及其管理 1.添加一个重做日志组 2.查询当前重做日志组的使用情 ...

  6. oracle重做日志详解,Oracle的重做日志

    Archive Redo log files--归档重做日志,简称归档日志,指当条件满足时,Oracle将在线重做日志以文件形式保存到硬盘(持久化). 重做日志的简单原理:在数据更新操作commit前 ...

  7. oracle redo重做,oracle redo 重做日志文件

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

  8. mysql增加重做日志组_mysql重做日志

    一.重做日志(redo log) 1.作用 确保事务的持久性. 防止在发生故障的时间点,尚有脏页未写入磁盘,在重启mysql服务的时候,根据redo log进行重做,从而达到事务的持久性这一特性. 2 ...

  9. oracle 归档日志 重做日志,Oracle的重做日志和归档日志

    一. 重做日志文件把对数据文件的修改在写入数据文件之前记录下来.日志文件以一种循环的方式被写入信息.当一个日志组被写满时,回自动向另一个日志组写入.管理员可以手工切换当前日志组.alter syste ...

最新文章

  1. 【合并单元格】纵向合并单元格之前对数组处理【针对饿了么element的table的span-method合并行或列的计算方法】
  2. laravel mysql sum查询并排行_必看!PHP常见面试题——MySQL篇(二)
  3. python爬虫入门教程-Python 爬虫介绍
  4. Spring boot介绍
  5. android and javascript
  6. 给定条件找最小值c语言程序_根据给定条件最小化n的最小步骤
  7. [jQuery] jQuery是如何链式调用的?
  8. ADO.NET Entity Framework 使用中的经验总结
  9. 不应该通过类实例访问静态成员 解决方法_今天说一说php中的类与对象
  10. 2Y叔的clusterProfiler-book阅读Chapter 2 Functional Enrichment Analysis Methods
  11. 模仿QZONE挂图效果
  12. 全局唯一标识符 (GUID)
  13. 共享OrCAD9.2pSpice9.2+multisim下载地址
  14. 中国有多少家银行 最全名单统计
  15. 关于制作朗文6++ dictionary mac自用词典问题总结
  16. 志存高远,少年当自强
  17. 除夕最炫烟花代码----跨年必备合集
  18. 智能客服机器人的场景应用及功能有哪些
  19. vue中如何使用富文本编辑器(TinyMce)
  20. 梯度下降算法_梯度下降算法的工作原理

热门文章

  1. 使用Android OpenGL ES 2.0绘图之二:定义形状
  2. 关于提高社交网站SNS竞争力的分析
  3. Django 前后端数据传输、ajax、分页器
  4. MongoDB.so: undefined symbol: HeUTF8解决方法
  5. mongodb 全文搜索---ttlsa教程系列之mongodb(十)
  6. three.js 下载安装、开发环境
  7. 去除 Css 表单自动填充黄色背景
  8. WebGIS中利用AGS JS+eCharts实现一些数据展示的探索
  9. go语言最好的帮助在哪里?
  10. MPFlipViewController