Oracle redo log recovery

oracle redo 状态,Oracle Redo log 状态及工作原理解析 Oracle重做日志(redo log)是用来记录操作条目,用于数据库数据恢复。为了提高效率,oracle通常建议设置三组redo log。本文将对重做日志组的状态以及多种状态之间切换做解析,力求掌握该知识点。概述oracle重做日志组通常有四种状态,即unused,inactive,active,current。unused:通常指从未被使用的日志组,即新添加的日志组。current:状态为LG... 阅读详情

Redolog状态分为unused,inactive,active和current几种状态.其中前2种状态的文件坏掉,不会影响数据库已经提交的数据.
当active和current的redo log出现损坏,意味着已经commit的事务无法完成check point(磁盘同步);
或者
需要rollback的事务,也无法完成回滚.Active和current的redo log坏掉,意味着此时数据库文件可能出现不一致.

1, 什么时候checkpoint?
   a,alter system switch logfile;
   b,alter system checkpoint;
   c,热备表空间
ALTER TABLESPACE TS_NAME BEGIN BACKUP/END BACKUP
   d,alter database/tablespace read only;
   e,shutdown数据库

2, check point会做什么?
   a,同步SCN到数据文件头,控制文件;
   b,通知dbwr对data buffer的脏数据进行同步到磁盘.

3, redo log损坏的几种情况?
   3.1 数据库正常关闭状态下redo损坏.
       a,数据进行正常关闭,
inactive状态的redo log文件都已经完成归档.
         例如:redo01.log丢失
        
select * from v$log order by first_time;
         GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
         ------  -------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
         1          1          2   52428800          1 YES INACTIVE               7295637 2012-06-16 10:01:07
         2          1          3   52428800          1 YES INACTIVE               7303922 2012-06-16 10:50:41
         4          1          4   52428800          1 YES INACTIVE               7304107 2012-06-16 10:55:10
         3          1          5   52428800          1 NO  CURRENT                7305791 2012-06-16 11:20:32
         alter datbase clear logfile group 1;

       b,数据进行正常关闭,current状态的redo log文件完成checkpoint,但没有归档.                      

         Sat Jun 16 16:04:54 2012
         Thread 1 opened at log sequence 7
         Current log# 2 seq# 7 mem# 0: /u01/app/oracle/oradata/hdb/redo02.log
         Sat Jun 16 16:04:59 2012
         Completed: ALTER DATABASE OPEN
         开启数据库,确认redo02.log是current状态的redo log.

         2012-06-16 16:07:52 HR @ hdb>insert into T_20120616_001 values(3,'sequnce#7','b3','c3');
         1 row created.
         2012-06-16 16:07:53 HR @ hdb>commit;
         插入数据,此时current状态的redo log为redo02.log,sequence# 7       

         Sat Jun 16 16:09:18 2012
         Shutting down instance: further logons disabled
         EMN0 started with pid=25, OS id=27230
         此时删除redo02.log

         Sat Jun 16 16:14:01 2012
         Errors in file /u01/app/oracle/admin/hdb/bdump/hdb_lgwr_27381.trc:
         ORA-00313: open failed for members of log group 2 of thread 1
         ORA-00312: online log 2 thread 1: '/u01/app/oracle/oradata/hdb/redo02.log'
         ORA-27037: unable to obtain file status
         Linux Error: 2: No such file or directory
         Additional information: 3
         此时无法启动数据库 
                  解决方法:
         startup mount;

         recover database until cancel;

         alter database open resetlogs;  

         分析:由于该current状态的日志是正常关闭之后丢掉的,内存中的data buffer已经被同步;此时问题就是打开数据库时,
         没有办法进行一致性确认,只需要对redo log进行resetlogs即可,但在resetlogs之前,需要进行不完全恢复.
恢复之后
         数据库数据没有丢失,最后插入的一行数据,虽然redo log文件为current,但数据已经同步到磁盘,未丢失.        

       c,正常关闭的数据库没有active的状态,因为checkpoint执行后,active redo变成inactive.

   3.2 数据库运行状态时redo损坏.
       a,inactive状态的redo丢失;
         (1),inactive且已经完成归档,恢复时只需执行
        
alter database clear logfile group 2;
         2012-06-16 20:09:33 SYS @ hdb>select * from v$log;
         GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
         ------ ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
         1          1          2   52428800          1 NO  CURRENT                7324031 2012-06-16 20:00:11
         4          1          0   52428800          1 YES UNUSED                       0
         3          1          0   52428800          1 YES UNUSED                       0
         2          1          1   52428800          1 YES INACTIVE               7309824 2012-06-16 16:44:02

        
         (2),inactive但没有完成归档,恢复时只需执行如下命令。因为归档缺失,建议对数据库进行一次全备份。
        alter database clear unarchived logfile group 2;

       b,active/current状态的redo丢失.

         (1),active且已经完成归档,恢复时只需执行
        
alter database clear logfile group 2;  
         此时关闭数据库,则active状态会变成inactive,由于其已归档,所以可以清除掉redo logfile,否则需要不完全恢复.
         2012-06-16 20:01:13 SYS @ hdb>/

         GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
         ------ ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
         1          1          2   52428800          1 NO  CURRENT                7324031 2012-06-16 20:00:11
         2          1          1   52428800          1 YES ACTIVE                 7309824 2012-06-16 16:44:02
         3          1          0   52428800          1 YES UNUSED                       0
         4          1          0   52428800          1 YES UNUSED                       0         

         (2),active但没有完成归档,恢复时需要执行
        
startup mount;
         recover database until cancel;

         alter database open resetlogs;  

         此时,如果能够正常关闭,则会进行checkpoint,并完成磁盘数据同步,不会有数据丢失;否则会出现数据丢失.

         (3),current恢复时需要执行
         
startup mount;
         recover database until cancel;

         alter database open resetlogs; 

         如果此时删除了current redo log之后能够插入数据,并且完成了checkpoint磁盘同步,不完全恢复后数据不会丢失;
         否则该不完全恢复后会有数据丢失.

4, 关于Linux下rm删除current redo文件之后,数据库能够继续正常读写的测试,可以看网友测试.
   http://chinapkw.iteye.com/blog/524475
   rm并不能真正模拟文件的损坏,请注意这一点.


ORACLE redolog 重做日志组通常有四种状态 ACITVE状态意味着检查点尚未完成,如果日志文件循环使用再次到达该文件,数据库将处于等待的停顿状态,此时在alert文件中,可以看到类似如下记录:Checkpoint not complete。--如果是非归档模式,此时该日志组中提交的事务引起的数据改变还没有完全从DB buffer cache写入到数据文件中,因此该日志组还不能被覆盖,并且待完全写入后变为inactive状态。活动的非当前日志,该日志可能已经完成归档也可能没有归档,活动的日志文件在Crash recovery(实例恢复)时会被用到。 阅读详情

相关推荐

Redo log的四种状态 (CURRENT, ACTIVE, INACTIVE, UNUSED)

CURRENT指当前的日志文件,在进行实例恢复时是必须的; ACTIVE是指活动的非当前日志,在进行实例恢复时会被用到。Active状态意味着,Checkpoint尚未完成,因此该日志文件不能被覆盖。 INACTIVE是非活动日志,在实例恢复时不再需要,但在介质恢复时可能需要。 UNUSED表示该日志从未被写入,可能是刚添加的,或RESETLOGS后被重置。 查看Redo log的状态,可用如下语句: select group#, status from v$log; ...

weixin_42416903的博客 3625

达梦数据库DM8数据文件损坏无备份恢复

通过日志挖掘在没有数据库备份的情况下,恢复丢失的数据

liuyanwei1024的博客 2239

Oracle——redo+undo总结

Oracle------redo》重做日志文件(redo log file)对数据库来说至关重要,他们是数据库的事务日志;Oracle数据库维护着两类重做日志文件:在线重做日志文件(redo)和 归档重做日志文件(archive log),(归档重做日志文件实际上就是已填满的“旧”在线重做日志文件的副本)这两类重做日志文件都是用于恢复的:①:如果数据库所在主机掉电,导致实例...

weixin_34152820的博客 364

OracleOracle Redo Log 机制 小结(转载)

OracleRedo 机制DB的一个重要机制,理解这个机制对DBA来说也是非常重要,之前的Blog里也林林散散的写了一些,前些日子看老白日记里也有说明,所以结合老白日记里的内容,对oracle 的整个Redo log 机制重新整理一下。 一.Redo log 说明 Oracle 的Online redo log 是为确保已经提交的事务不会丢失而建立的一个机制。 因为这种健全的机制,才...

gonglei155的博客 433

Oracle 查看 redo.log,Oracle Redo Log和CheckPoint详解

LogBuffer写入Redo Log的条件:1).用户提交2).有1/3重做日志缓冲区未被写入磁盘(可以通过修改_LOG_IO_SIZE参数来控制 )3).有大于1M的重做日志缓冲区未被写入磁盘4).每隔3 秒钟5). DBWR 需要写入的数据的SCN大于LGWR记录的SCN,DBWR 触发LGWR写入。LGWR写的具体过程:1).先尝试获取redo writing latch,确保其他proc...

weixin_33806591的博客 2146

OracleRedo Log

OracleRedo 机制DB的一个重要机制,理解这个机制对DBA来说也是非常重要,之前的Blog里也林林散散的写了一些,前些日子看老白日记里也有说明,所以结合老白日记里的内容,对oracle 的整个Redo log 机制重新整理一下。   一.Redo log 说明 Oracle 的Online redo log 是为确保已经提交的事务不会丢失而建立的一个机制。 因为这种健全的机制,才

DBA Tips 583

Oracle redo log 机制

OracleRedo 机制DB的一个重要机制,理解这个机制对DBA来说也是非常重要   一.Redo log 说明 Oracle 的Online redo log 是为确保已经提交的事务不会丢失而建立的一个机制。 因为这种健全的机制,才能让我们在数据库crash时,恢复数据,保证数据不丢失。   1.1 恢复分类 恢复分两种: (1)    Crash recovery (2)  ...

雨花石 1244

Oracle Redo Log 机制 小结

OracleRedo 机制DB的一个重要机制,理解这个机制对DBA来说也是非常重要,之前的Blog里也林林散散的写了一些,前些日子看老白日记里也有说明,所以结合老白日记里的内容,对oracle 的整个Redo log 机制重新整理一下。   一.Redo log 说明 Oracle 的Online redo log 是为确保已经提交的事务不会丢失而建立的一个机制。 因为这种健全的

cykjava的专栏 481

Oracle OCP IZ0-053(Recovery Missing Active Redo Log)

502.A database is running In ARCHIVBXXMS mode. It has two online redo log groups and each group has one member. ...

congsong2560的博客 91

Oracle OCP 1Z0 053 Q709(Recovery Redo log)

709. A database has three online redo log groups with one member each. A redo log member with the status ACTICE i...

congsong2560的博客 145

Oracle 重做日志(Redo Log)详解

1

Ruishine的博客 1万+

oracle asm omf,Oracle Managed Files,OMF

OMF相关参数:DB_CREATE_FILE_DESTDefines the location of the default file systemdirectory or Oracle ASM disk group where the database creates datafiles ortempfiles when no file specification is given in the...

weixin_32374445的博客 231

oracle block media recovery,Oracle非归档模式Media Recovery错误之--ORA-26040

11、转储对应的logfile14:35:48 SYS@ prod>alter system dump logfile '/dsk1/oradata/prod/redo01a.log';System altered.14:35:53 SYS@ prod>alter system dump logfile '/dsk1/oradata/prod/redo03a.log';System a...

weixin_29605607的博客 262

oracle dg 报监听错误,DG使用中遇到的几个错误

1、执行:alter database recover managed standby database disconnect from session;后台alert文件报错如下:Errors in file /u01/oracle/admin/primary/bdump/primary_mrp0_2967.trc:ORA-19527: physical standby redo log mus...

weixin_42279320的博客 562

MySQL的Binlog和InnoDB的redo log的关系、以及 "两阶段提交"

数据库的日志类型大概可以分为以下三种:逻辑日志,记录的是sql语句的原始逻辑,面向对象是逻辑结构如表、列等物理日志,记录的是文件记录的改变,面向对象是表空间、数据文件、数据页、偏移量等逻辑物理日志,页面内的操作记录的是逻辑日志,页间的操作记录的是物理日志,physical to a page,logical within a page redo log和binlog的关系和Oracleredo...

jzzw的博客 3587

ORA-00742: 日志读取在线程 %d 序列 %d 块 %d 中检测到写入丢失情况----惜分飞

由于主机异常断电,导致oracle数据库无法正常启动,数据库启动报错ORA-07445 kdxlin,ORA-01172,ORA-00312,ORA-00742等错误

1348

记一此故障修复,关键词mount restrict/redo log corruption/ora 600 4194

记一此故障修复,关键词mount restrict/redo log corruption/ora 600 4194 现象是mount dg_data02的时候报错 alter diskgroup dg_data02 mount * ERROR at line 1: ORA-15032: not all alterations performed ORA-1

tyrion的博客 684

(转)ORA-00257解决

原:http://blog.chinaunix.net/u/26381/showart_373304.html从Oracle9i开始,借助于UNDO日志文件提供了闪回查询的功能,由于功能也有一定的局限性,也就是说依赖于UNDO日...

cuanbing5840的博客 125
上一篇: Oracle controlfile recovery
下一篇: Oracle Process Summary
deanza
博客等级 码龄17年 14粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值