1.什么是Redo log

Redo log包含所有的数据库变化历史,数据库的所有操作变化,均按照写入重做日志缓冲区先于数据块缓冲区、写入重做日志文件先于写入数据文件;当发生提交动作时,将重做日志缓冲区变化刷到重做日志文件。重做日志文件一般用于数据库恢复(实例恢复和介质恢复)、Log Miner、Change Data Capture、流复制、GoldenGate复制等;Redo log文件包含所有的DML变化(INSERT\UPDATE\DELETE\SELECT FOR UPDATE)、包含所有DDL语句造成的数据字典对象的更改及递归语句的更改,不包括DML语句。version 9i以上版本还会包括DDL语句;数据库操作DML/DDL数据库缓冲区与文件的关系如下图:

2.Redo log写入方式

Oracle重做日志采用循环写入的方式,每一个Oracle实例至少拥有2组中左日志组,每组重做日志组可以有一个或多个日志成员;Oracle重做日志一般由Oracle自动切换,重做日志文件在当LGWR进程停止写入并开始写入下一个日志组时发生切换,或在用户收到发出ALTER SYSTEM SWITCH LOGFILE时发生切换。

Oracle提供了清空重做日志文件功能,可以在数据库正常运行过程中,当出现日志文件损坏而无法进行归档时,可以清空损坏的日志文件(ALTER DATABASE CLEAR LOGFILE GROUP N;),使得数据库继续运行而无需停止数据库;如果损坏的日志文件仍未进行归档,可以使用UNARCHIVED关键字进行清理日志(ALTER

DATABASE CLEAR UNARCHIVED LOGFILE GROUP N;)。世纪运维中,还可以在某个实例禁止某个线程,并删除该实例的所有redo log。

SQL>ALTER DATABASE DISABLE THREAD

';

SQL> ALTER DATABASE DROP LOGFILE GROUP 1;

SQL> ALTER DATABASE DROP LOGFILE GROUP2;

3.日志组v$log和日志成员v$logfile

1)日志组v$log

SQL> desc v$log

Name              Null?    Type

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

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

GROUP#                     NUMBER

THREAD#                   NUMBER

SEQUENCE#                 NUMBER

BYTES                      NUMBER

BLOCKSIZE                  NUMBER

MEMBERS

NUMBER

ARCHIVED                   VARCHAR2(3)

STATUS                      VARCHAR2(16)

FIRST_CHANGE#              NUMBER

FIRST_TIME                   DATE

NEXT_CHANGE#               NUMBER

NEXT_TIME                    DATE

Group#:redo log组编号,redo log以group为单位,我们经常称之为重做日志组,一个实例里至少要有两个日志组,每个组有一个或者多个成员;同一个group里的成员的大小一致。

Thread#:在RAC环境里才有意义,代表不同的实例的编号,RAC的每个实例有单独redo log,该值与实例编号一致。

SEQUENCE#:redo log序列号;我们都知道重做日志是循环写的,该值记录每个实例日志组的顺序;该序号在归档日志、RMAN备份和备份集等管理都是使用该值进行区分的。

BYTES:重做日志的大小,该值记录的是日志组的大小,而日志组可以有多个成员,可见同一个日志组的日志成员大小一致。

MEMBERS:日志组包含的日志成员个数,每个日志组的成员个数可以是一个或多个。

ARCHIVED:是否已经已经归档成功,如果未开启归档则该值为NO。

STATUS:日志组的当前状态;Oracle日志组有5种不同的状态, CURRENT表示当前正在使用的日志组;ACTIVE表示该日志组仍是活跃的,对应的脏块还没有写入到数据文件上或者归档模式下未完成归档,即此时实例如果异常,会使用到该日志组进行实例恢复;UNUSED表示还没有使用的,一般只有新添加的未使用过的日志组才会有这种状态,建议新添加的日志组时进行日志切换,使得日志组中没有该状态;INACTIVE与ACTIVE相对,也就是不包含脏数据。 CLEARING、CLEARING_CURRENT这两个状态和clear logfile有关,CLEARING表示的是在运行了alter database clear logfile group N命令的日志组状态,所以这是一个运行过程中状态,一旦命令运行结束,这个状态也随之运行结果而发生改变,如果是成功的话,状态将变成UNUSED状态,如果失败或者是过程中中断了使得clear不能完成,就会变更CLEARING_CURRENT,日志切换异常或IO异常都会是状态CLEARING_CURRENT。

FIRST_CHANGE#:最小的SCN号,用于实例恢复。

FIRST_TIME:最小SCN号的时间。

NEXT_CHANGE#:下一个SCN号,用于实例恢复。

NEXT_TIME:下一个SCN号的时间。

2)日志成员v$logfile

SQL> desc v$logfile;

Name                       Null?    Type

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

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

GROUP#                          NUMBER

STATUS                          VARCHAR2(7)

TYPE                            VARCHAR2(7)

MEMBER                         VARCHAR2(513)

IS_RECOVERY_DEST_FILE           VARCHAR2(3)

GROUP#:与前面v$log的GROUP#相同;

STATUS:INVALID代表文件不可访问;STALE表示文件不完全,比如添加日志成员等操作正在执行;DELETED表示该文件已经不再使用;null表示文件正在正常使用。

4.检查点与日志切换

重做日志一般涉及到LGWR、CKPT、DBWR、ARCHn四个后台进程;LGWR后台进程是将log buffer中的数据写到日志文件的进程,是oracle相当重要的一个后台进程,LGWR进程触发的条件为以下4种情况之一:

a、    每3秒钟;也就是该进程最多休眠3秒钟,休眠时触发rdbms ipc message事件;LGWR将buffer中的数据写到日志文件时,触发log file parallel write事件;

b、    在事务提交时(COMMIT),此时会触发LGWR进程写完后才返回提交成功,在等待LGWR进程写的过程中将触发log file sync事件;

c、    DBWn进程写入数据文件之前;

d、    Redo log Buffer三分之一满时,这个数字是有一个隐含参数_log_io_size控制,该值的默认值是log buffer大小的1/3;该值的最大值为3MB,所以Redo

log buffer多于1MB的变化记录时也会触发LGWR进程写;

CKPT后台进程是检查点进程,以下几种情况会触发CKPT进程进行检查点操作:

1)、实例关闭时;

2)、备份命令执行时;

3)、手动执行CheckPoint操作时;

4)、达到log_checkpoint_timout/log_checkpoint_internal/fatstart_mttr_target参数设置临界值;

5)、数据文件被online/offline时;

5.Redo Log损坏常见解决办法

a、非当前日志且已归档,使用命令将损坏日志清空:

SQL> alter database clear logfile group

n;

b、非当前日志当尚未归档,则需要用

SQL>alter database clear unarchived

logfile group n;

c、如果是当前日志损坏,一般不能clear,则可能意味着丢失数据,有备份,可以采用备份进行不完全恢复;如果没有备份,只能通过将数据库启动到mount状态将损坏的日志文件删除。

Created by Tony.Tang[TangYun]2015.02

--------------End-----------------------

log添加 oracle redo_Redo Log之一:理解Oracle redo log相关推荐

  1. 老白理解的REDO LOG

    理解REDO LOG(1) 介质恢复和实例恢复的基本概念 REDO LOG是Oracle为确保已经提交的事务不会丢失而建立的一个机制.实际上REDO LOG的存在是为两种场景准备的,一种我们称之为实例 ...

  2. 在文件log 加入commit id_从物理文件理解InnoDB Redo Log

    导读 作为MySQL DBA都应该知道,Redo Log是可被覆盖的,是ACID中的D的最重要的构成部分,也就是关系型数据库中的WAL中的L. Redo Log记录的是redo,那么redo是什么呢? ...

  3. oracle 查询数据库io,理解Oracle中的并行查询IO

    Oracle缓存区如何通过频繁地缓存在共享内存中访问数据来帮助降低磁盘IO瓶颈.Oracle有一种轮换IO机制,叫做"直接路径IO",如果它判断到绕过缓存区直接执行IO会更快速的话 ...

  4. oracle 抽样_深入理解Oracle动态采样

    Oracle 动态采样( Dynamic Sampling , 12c 称为 Dynamic statistics) ,是对统计信息的⼀一个重要补充,当数 据动态变化,⽆无法⽤用典型的统计信息描述时, ...

  5. 浅谈Oracle Online redo log

    Oracle online redo log是Oracle数据库中核心文件之一.在数据库操作中,只要有任何的数据块变化,都会生成相应的redo entry.redo entry首先保存在log buf ...

  6. MySQL redo log 重做日志 原理 Oracle Redo Log 机制 小结

    MySQL-重做日志 redo log -原理 [redo log buffer][redo log file]-原理 目录: 1.重做日志写入过程图 2.相关知识点汇总图 3.redo_log_bu ...

  7. Standby Redo Log 的设定原则、创建、删除、查看、归档位置

    设定: 1.每个standby redo log file 至少要和primary database的redo log 一样大,为了方便管理,Oracle 建议主备库的redo log 设置成一样的大 ...

  8. 新特性速递 | InnoDB redo log archiving(归档)

     导读 MySQL 8.0.17开始支持的redo log归档能干嘛用呢,好吃吗 今天,MySQL 8.0.17发布了,看了下release note,发现果真如之前预期的那样,恢复了redo lo ...

  9. 精讲 MySQL 事务日志:redo log 和 undo log

    来源:https://blog.csdn.net/demonson/article/details/104369733 innodb事务日志包括redo log和undo log.redo log是重 ...

  10. MYSQL专题-MySQL三大日志binlog、redo log和undo log

    日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息.mysql日志主要包括重做日志(redo log).回滚日志(undo log).二进制日志(bin log).错误日志(err ...

最新文章

  1. 深度学习如何选择模型
  2. CTF web题总结--http header 修改、cookie注入
  3. 从点亮一个LED开始,Cortex-A9裸机程序设计
  4. Oracle JDBC版本区别(转)
  5. JVM - 应用JVM核心参数推荐设置
  6. 【工作感悟】达内java大数据课程
  7. es6 Babel 转码器对修饰器的支持
  8. xml中else if写法_面试官:优化代码中大量的if/else,你有什么方案?
  9. C# Speech学习笔记(三)
  10. c 如何调用c语言程序设计,c语言程序设计_函数调用c语言程序设计_函数调用.ppt...
  11. 数据库性能监控之联合索引使用
  12. struts2之自定义拦截器及拦截器生命周期分析
  13. java多行注释_Java注释:单行、多行和文档注释
  14. PLC控制电机正反转原理图
  15. linux编译安卓源码,Ubuntu下编译Android源码
  16. 湿敏电阻CM-R / HR202应用 原理图 IO输出交流 AD采样
  17. ubuntu 22端口不通
  18. 编程题——Fibonacci数列
  19. Android 多启动图标icon,多启动页面
  20. 最全Python算法入门

热门文章

  1. MATLAB调用OpenCV流程(MATLAB R2016a+OpenCV3.1.0+VS2010
  2. Atitit lucence es solr的各种query 与sql运算符的对比 目录 1.1. 等于运算 TermQuery 1 1.2. 范围运算 1 1.3. 大小运算 1 1.4. Wi
  3. Atitit.远程文件技术 webdav ftp scp ssh-sftp http nfs smb 的区别与总结
  4. Atitit 热更新资源管理器 自动更新管理器 功能设计
  5. Atitit jOrgChart的使用  组织架构图css html
  6. atitit.系统托盘图标的设计java swing c# .net c++ js
  7. paip.QQ音乐导出歌单总结
  8. paip.提升用户体验---提取FLASH中图片
  9. eclipse插件开发总结
  10. PAIP.DB4O与SQL配合使用在海量数据下.txt