log添加 oracle redo_Redo Log之一:理解Oracle redo log
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相关推荐
- 老白理解的REDO LOG
理解REDO LOG(1) 介质恢复和实例恢复的基本概念 REDO LOG是Oracle为确保已经提交的事务不会丢失而建立的一个机制.实际上REDO LOG的存在是为两种场景准备的,一种我们称之为实例 ...
- 在文件log 加入commit id_从物理文件理解InnoDB Redo Log
导读 作为MySQL DBA都应该知道,Redo Log是可被覆盖的,是ACID中的D的最重要的构成部分,也就是关系型数据库中的WAL中的L. Redo Log记录的是redo,那么redo是什么呢? ...
- oracle 查询数据库io,理解Oracle中的并行查询IO
Oracle缓存区如何通过频繁地缓存在共享内存中访问数据来帮助降低磁盘IO瓶颈.Oracle有一种轮换IO机制,叫做"直接路径IO",如果它判断到绕过缓存区直接执行IO会更快速的话 ...
- oracle 抽样_深入理解Oracle动态采样
Oracle 动态采样( Dynamic Sampling , 12c 称为 Dynamic statistics) ,是对统计信息的⼀一个重要补充,当数 据动态变化,⽆无法⽤用典型的统计信息描述时, ...
- 浅谈Oracle Online redo log
Oracle online redo log是Oracle数据库中核心文件之一.在数据库操作中,只要有任何的数据块变化,都会生成相应的redo entry.redo entry首先保存在log buf ...
- MySQL redo log 重做日志 原理 Oracle Redo Log 机制 小结
MySQL-重做日志 redo log -原理 [redo log buffer][redo log file]-原理 目录: 1.重做日志写入过程图 2.相关知识点汇总图 3.redo_log_bu ...
- Standby Redo Log 的设定原则、创建、删除、查看、归档位置
设定: 1.每个standby redo log file 至少要和primary database的redo log 一样大,为了方便管理,Oracle 建议主备库的redo log 设置成一样的大 ...
- 新特性速递 | InnoDB redo log archiving(归档)
 导读 MySQL 8.0.17开始支持的redo log归档能干嘛用呢,好吃吗 今天,MySQL 8.0.17发布了,看了下release note,发现果真如之前预期的那样,恢复了redo lo ...
- 精讲 MySQL 事务日志:redo log 和 undo log
来源:https://blog.csdn.net/demonson/article/details/104369733 innodb事务日志包括redo log和undo log.redo log是重 ...
- MYSQL专题-MySQL三大日志binlog、redo log和undo log
日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息.mysql日志主要包括重做日志(redo log).回滚日志(undo log).二进制日志(bin log).错误日志(err ...
最新文章
- 深度学习如何选择模型
- CTF web题总结--http header 修改、cookie注入
- 从点亮一个LED开始,Cortex-A9裸机程序设计
- Oracle JDBC版本区别(转)
- JVM - 应用JVM核心参数推荐设置
- 【工作感悟】达内java大数据课程
- es6 Babel 转码器对修饰器的支持
- xml中else if写法_面试官:优化代码中大量的if/else,你有什么方案?
- C# Speech学习笔记(三)
- c 如何调用c语言程序设计,c语言程序设计_函数调用c语言程序设计_函数调用.ppt...
- 数据库性能监控之联合索引使用
- struts2之自定义拦截器及拦截器生命周期分析
- java多行注释_Java注释:单行、多行和文档注释
- PLC控制电机正反转原理图
- linux编译安卓源码,Ubuntu下编译Android源码
- 湿敏电阻CM-R / HR202应用 原理图 IO输出交流 AD采样
- ubuntu 22端口不通
- 编程题——Fibonacci数列
- Android 多启动图标icon,多启动页面
- 最全Python算法入门
热门文章
- MATLAB调用OpenCV流程(MATLAB R2016a+OpenCV3.1.0+VS2010
- Atitit lucence es solr的各种query 与sql运算符的对比 目录 1.1. 等于运算 TermQuery	1 1.2. 范围运算	1 1.3. 大小运算	1 1.4. Wi
- Atitit.远程文件技术 webdav ftp scp ssh-sftp http nfs smb 的区别与总结
- Atitit 热更新资源管理器 自动更新管理器 功能设计
- Atitit jOrgChart的使用 组织架构图css html
- atitit.系统托盘图标的设计java swing c# .net c++ js
- paip.QQ音乐导出歌单总结
- paip.提升用户体验---提取FLASH中图片
- eclipse插件开发总结
- PAIP.DB4O与SQL配合使用在海量数据下.txt