实验环境:RHEL6.4 + Oracle 11.2.0.4

一、丢失重做日志组中成员

二、丢失重做日志组

Reference

环境准备

SQL> set linesize 160
SQL> col member for a80
SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------------------------------------- ---
3 ONLINE /u01/oradata/ORADB/onlinelog/o1_mf_3_c3g92rg3_.log NO
3 ONLINE /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_3_c3g92rmf_.log YES
2 ONLINE /u01/oradata/ORADB/onlinelog/o1_mf_2_c3g92qkl_.log NO
2 ONLINE /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_2_c3g92qoq_.log YES
1 ONLINE /u01/oradata/ORADB/onlinelog/o1_mf_1_c3g92prr_.log NO
1 ONLINE /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_1_c3g92px4_.log YES 6 rows selected. SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------ ------------ ------------
1 1 4 52428800 512 2 NO CURRENT 1917689 03-NOV-15 2.8147E+14
2 1 2 52428800 512 2 YES INACTIVE 1861002 02-NOV-15 1888519 03-NOV-15
3 1 3 52428800 512 2 YES INACTIVE 1888519 03-NOV-15 1917689 03-NOV-15

一、丢失重做日志组中成员

1.1 故障模拟

模拟第2组日志组一个成员丢失。
```
SQL> startup force
ORACLE instance started.

Total System Global Area 304807936 bytes

Fixed Size 2252744 bytes

Variable Size 205520952 bytes

Database Buffers 92274688 bytes

Redo Buffers 4759552 bytes

Database mounted.

Database opened.

SQL> select * from v$logfile;

GROUP# STATUS  TYPE    MEMBER                                                                           IS_

     3         ONLINE  /u01/oradata/ORADB/onlinelog/o1_mf_3_c3g92rg3_.log                               NO
3 ONLINE /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_3_c3g92rmf_.log YES
2 INVALID ONLINE /u01/oradata/ORADB/onlinelog/o1_mf_2_c3g92qkl_.log NO
2 ONLINE /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_2_c3g92qoq_.log YES
1 ONLINE /u01/oradata/ORADB/onlinelog/o1_mf_1_c3g92prr_.log NO
1 ONLINE /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_1_c3g92px4_.log YES

6 rows selected.

<h2 id="1.2">1.2 处理方法</h2>
删除无效成员,然后在组中添加新成员。

SQL> alter database drop logfile member '/u01/oradata/ORADB/onlinelog/o1_mf_2_c3g92qkl_.log';

SQL> alter database add logfile member '/u01/oradata/ORADB/onlinelog/redo02a.log' to group 2;

<h2 id="1.3">1.3 实际处理过程</h2>

SQL> alter database drop logfile member '/u01/oradata/ORADB/onlinelog/o1_mf_2_c3g92qkl_.log';

alter database drop logfile member '/u01/oradata/ORADB/onlinelog/o1_mf_2_c3g92qkl_.log'

*

ERROR at line 1:

ORA-01609: log 2 is the current log for thread 1 - cannot drop members

ORA-00312: online log 2 thread 1: '/u01/oradata/ORADB/onlinelog/o1_mf_2_c3g92qkl_.log'

ORA-00312: online log 2 thread 1: '/u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_2_c3g92qoq_.log'

SQL> select * from v$log;

GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME   NEXT_CHANGE# NEXT_TIME

     1          1          7   52428800        512          2 YES INACTIVE               1920749 03-NOV-15         1940772 03-NOV-15
2 1 8 52428800 512 2 NO CURRENT 1940772 03-NOV-15 2.8147E+14
3 1 6 52428800 512 2 YES INACTIVE 1920739 03-NOV-15 1920749 03-NOV-15

SQL> alter system switch logfile;

System altered.

SQL> select * from v$log;

GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME   NEXT_CHANGE# NEXT_TIME

     1          1          7   52428800        512          2 YES INACTIVE               1920749 03-NOV-15         1940772 03-NOV-15
2 1 8 52428800 512 2 YES ACTIVE 1940772 03-NOV-15 1941407 03-NOV-15
3 1 9 52428800 512 2 NO CURRENT 1941407 03-NOV-15 2.8147E+14

SQL> alter database drop logfile member '/u01/oradata/ORADB/onlinelog/o1_mf_2_c3g92qkl_.log';

Database altered.

SQL> alter database add logfile member '/u01/oradata/ORADB/onlinelog/o1_mf_2_c3g92qkl_.log' to group 2;

alter database add logfile member '/u01/oradata/ORADB/onlinelog/o1_mf_2_c3g92qkl_.log' to group 2

*

ERROR at line 1:

ORA-01276: Cannot add file /u01/oradata/ORADB/onlinelog/o1_mf_2_c3g92qkl_.log. File has an Oracle Managed Files file name.

SQL> alter database add logfile member '/u01/oradata/ORADB/onlinelog/redo02a.log' to group 2;

Database altered.

SQL> select * from v$logfile;

GROUP# STATUS  TYPE    MEMBER                                                                           IS_

     3         ONLINE  /u01/oradata/ORADB/onlinelog/o1_mf_3_c3g92rg3_.log                               NO
3 ONLINE /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_3_c3g92rmf_.log YES
2 INVALID ONLINE /u01/oradata/ORADB/onlinelog/redo02a.log NO
2 ONLINE /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_2_c3g92qoq_.log YES
1 ONLINE /u01/oradata/ORADB/onlinelog/o1_mf_1_c3g92prr_.log NO
1 ONLINE /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_1_c3g92px4_.log YES

6 rows selected.

SQL> select * from v$log;

GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME   NEXT_CHANGE# NEXT_TIME

     1          1          7   52428800        512          2 YES INACTIVE               1920749 03-NOV-15         1940772 03-NOV-15
2 1 8 52428800 512 2 YES ACTIVE 1940772 03-NOV-15 1941407 03-NOV-15
3 1 9 52428800 512 2 NO CURRENT 1941407 03-NOV-15 2.8147E+14

SQL> alter system switch logfile;

System altered.

SQL> alter system switch logfile;

System altered.

SQL> alter system switch logfile;

System altered.

SQL> select * from v$logfile;

GROUP# STATUS  TYPE    MEMBER                                                                           IS_

     3         ONLINE  /u01/oradata/ORADB/onlinelog/o1_mf_3_c3g92rg3_.log                               NO
3 ONLINE /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_3_c3g92rmf_.log YES
2 ONLINE /u01/oradata/ORADB/onlinelog/redo02a.log NO
2 ONLINE /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_2_c3g92qoq_.log YES
1 ONLINE /u01/oradata/ORADB/onlinelog/o1_mf_1_c3g92prr_.log NO
1 ONLINE /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_1_c3g92px4_.log YES

6 rows selected.


<h1 id="2">二、丢失重做日志组</h1>
<h2 id="2.1"> 2.1 丢失INACTIVE重做日志组</h2>
### 2.1.1 清除归档的INACTIVE重做日志组 ###

SQL> alter database clear logfile group 2;

Database altered.

SQL> select * from v$log;

GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME   NEXT_CHANGE# NEXT_TIME

     1          1          4   52428800        512          2 YES INACTIVE               1962650 03-NOV-15         1962653 03-NOV-15
2 1 0 52428800 512 3 YES UNUSED 1962653 03-NOV-15 1962685 03-NOV-15
3 1 6 52428800 512 2 NO CURRENT 1962685 03-NOV-15 2.8147E+14
可以看到,clear后的日志组状态为UNUSED。

### 2.1.2 清除未归档的INACTIVE重做日志组 ###

清除未归档的INACTIVE重做日志组,不会丢失任何已提交事物,但清除后必须完全备份,从而确保可以执行完整恢复。

SQL> alter database clear logfile unarchived group 2;

需要考虑脱机文件是否需要已经清除的日志文件组才能重新联机。如果需要,那么只能删除包含脱机文件的表空间。

SQL> alter database clear logfile unarchived group 2 unrecoverable datafile;

控制文件备份到跟踪文件目录中,默认存放是udump目录下

SQL> alter database backup controlfile to trace;

<h2 id="2.2">2.2 丢失ACTIVE重做日志组</h2>
这个时候尝试生成检查点,

SQL> alter system checkpoint;

### 2.2.1 第一种情况:命令成功执行 ###
命令成功执行,会将所有已经提交的更改写入磁盘的数据文件中。就跟INACTIVE重做日志组处理流程一致了。
### 2.2.2 第二种情况:命令执行出现故障 ###
命令执行出现故障,就只能执行不完整恢复。 <h2 id="2.3">2.3 丢失CURRENT重做日志组</h2>
数据库mount模式下执行不完整恢复,最后使用RESETLOGS打开数据库。

SQL> alter database open resetlogs;

<h1 id="3">Reference</h1>
- OCP 认证考试指南 (1Z0-053)[M]. 清华大学出版社, 2010.

Oracle丢失重做日志的几种场景恢复的更多相关文章

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

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

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

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

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

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

  4. oracle redo 重做日志文件

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

  5. oracle如何重做日志组

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

  6. oracle数据库丢失数据文件、控制文件、重做日志文件、初始化文件恢复方法

    rman  target/ list backup; 查看是否已备份,如果没有,那就不知道了 模拟故障,删除/u01/app/oracle/oradata/ORCL文件夹下的所有文件 sqlplus ...

  7. Oracle重做日志恢复数据模拟实验

    一 系统环境: 1.操作系统:oracle Linux 5.6 2.数据库: Oracle 11g 二 Oracle 重做日志的作用: [模拟介质恢复] 1. 关闭数据库归档模式: [oracle@t ...

  8. MySQL重做日志相关

      Ⅰ.事务的实现 这里我们先抛出答案,通过答案再展开分析 特性 实现 A(原子性) redo C(一致性) undo I(隔离性) lock D(持久性) redo/undo 本节针对redo展开分 ...

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

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

随机推荐

  1. easyUI在IE浏览器中列表不显示

    搜索网上答案挺多,这里我说下我遇到的问题. 我是在页面中有一个toolbar:toolbar属性,但是没有定义toolbar而IE兼容差就不能正确显示. 而其它浏览器兼容性高没问题.其它问题再搜吧!

  2. unity3D学习—坦克大战(一)

    背景介绍 本人一名C#程序员,从事C#开发已经有四年有余了,目前在一家大型公司上班.鉴于公司的业务需要,现在需要学习unity3D游戏开发,好在unity支持C#脚本开发,无形中省下了许多重新学习新语 ...

  3. 有了lisk,为什么我们还要做一个Asch?

    0 前言 首先要声明一点,我们和我们的一些朋友都是lisk的投资人和支持者,我们也相信lisk会成功. 事实上,lisk已经成功了一半,目前在区块链领域融资金额排行第二,仅次于以太坊. 那为什么我们还 ...

  4. Java NIO6:选择器2---代码篇

    选择器服务器端代码 上一篇文章毫无条理地讲了很多和选择器相关的知识点,下面进入实战,看一下如何写和使用选择器实现服务端Socket数据接收的程序,这也是NIO中最核心.最精华的部分. 看一下代码: p ...

  5. Union-Find 检测无向图有无环路算法

    不相交集合数据结构(Disjoint-set data structure)是一种用于跟踪集合被分割成多个不相交的子集合的数据结构,每个集合通过一个代表来标识,代表即集合中的某个成员. Union-F ...

  6. 《代码的未来》读书笔记:内存管理与GC那点事儿

    一.内存是有限的 近年来,我们的电脑内存都有好几个GB,也许你的电脑是4G,他的电脑是8G,公司服务器内存是32G或者64G.但是,无论内存容量有多大,总归不是无限的.实际上,随着内存容量的增加,软件 ...

  7. ECMAScript 6入门

    预计在2014年底,ECMAScript 6将会正式发布,他的草案在13年3月份被冻结,后续提出新特性将会移至ECMASript 7中.目前还没有哪款浏览器实现了ES6的全部内容,兼容性最强的一款要数 ...

  8. CSS3 制作一个边框向周围散开的按钮效果

    我们将要达到的是如下的效果(若效果未出现请刷新): 分析 主要还是运用CSS3的transition, animation, transform还有渐变背景等特性. 由于按钮在鼠标进入时有不同的样式, ...

  9. 【VC++技术杂谈004】使用微软TTS语音引擎实现文本朗读

    本文主要介绍如何使用微软TTS语音引擎实现文本朗读,以及生成wav格式的声音文件. 1.语音引擎及语音库的安装 TTS(Text-To-Speech)是指文本语音的简称,即通过TTS引擎把文本转化为语 ...

  10. 分析nuget源码,用nuget + nuget.server实现winform程序的自动更新

    源起 (个人理解)包管理最开始应该是从java平台下的maven开始吧,因为java的开发大多数是基于开源组件开发的,一个开源包在使用时很可能要去依赖其他的开源包,而且必须是特定的版本才可以.以往在找 ...