Oracle重做日志和日志挖掘
重做日志-Redo log
首先给出参考资料:
1、Oracle官网-Managing the Redo Log
为什么需要redo log
- 内存中数据修改后,不必立即更新到磁盘---效率
- 由日志完成数据的保护目的---效率
- 其他副产品
- 数据恢复(备份集+归档日志)
- 数据同步(DG,streams,goldengate)
- 日志挖掘
什么是Redo log
重做日志包含所有数据产生的历史改变记录。
重做日志文件通常用于
- 恢复
- 日志挖掘
- 流
- 数据库产生的每个改动
- 写入数据块缓冲之前,先写入redo log buffer --内存
- 写入数据文件之前先写入日志文件 --数据文件
- 当提交后,redo log buffer被刷入redo log files
关于v$log视图
v$log从控制文件中显示日志文件的信息。可参考官网资料v$log
| Column | Datatype | Description |
|---|---|---|
| GROUP# | NUMBER | Log group number |
| THREAD# | NUMBER | Log thread number |
| SEQUENCE# | NUMBER | Log sequence number |
| BYTES | NUMBER | Size of the log (in bytes) |
| BLOCKSIZE | NUMBER | Block size of the logfile (512 or 4096) |
| MEMBERS | NUMBER | Number of members in the log group |
| ARCHIVED | VARCHAR2(3) | Archive status (YES) or (NO) |
| STATUS | VARCHAR2(16) | UNUSED,CURRENT,ACTIVE,CLEARING,CLEARING_CURRENT,INACTIVE |
| FIRST_CHANGE# | NUMBER | Lowest system change number (SCN) in the log |
| FIRST_TIME | DATE | Time of the first SCN in the log |
| NEXT_CHANGE# | NUMBER | Highest change number (SCN) in the log. When STATUS=CURRENT, NEXT_CHANGE#is set to the highest possible SCN, 281474976710655. |
| NEXT_TIME | DATE | Time of the highest SCN in the log. When STATUS=CURRENT, NEXT_TIME is set toNULL. |
| CON_ID | NUMBER | 0,1,n三种情况 |
日志文件的六种状态UNUSED,CURRENT,ACTIVE,CLEARING,CLEARING_CURRENT,INACTIVE代表的意思分别如下所述:
- UNUSED - Online redo log has never been written to. This is the state of a redo log that was just added, or just after a RESETLOGS, when it is not the current redo log.
- CURRENT - Current redo log. This implies that the redo log is active. The redo log could be open or closed.
- ACTIVE - Log is active but is not the current log. It is needed for crash recovery. It may be in use for block recovery. It may or may not be archived.
- CLEARING - Log is being re-created as an empty log after an
ALTER DATABASE CLEAR LOGFILEstatement. After the log is cleared, the status changes toUNUSED. - CLEARING_CURRENT - Current log is being cleared of a closed thread. The log can stay in this status if there is some failure in the switch such as an I/O error writing the new log header.
- INACTIVE - Log is no longer needed for instance recovery. It may be in use for media recovery. It may or may not be archived.
LGWR如何重复使用redo log files

上图就是Oracle LGWR进程向redo log files中写入redo记录的过程,可见,Oracle数据库每次只是用一个redo log file来存储redo log buffer中的redo记录。LGWR正在写入的那个redo log file就是current redo log file。
可用于实例恢复的redo log files就是active redo log files。
不再用于实例恢复的redo log files就是inactive redo log files。
如果数据库当前是Archivelog模式,那么直到有一个后台归档进程ARCn已经归档成功,数据库才能重用或者覆盖active online log file。
如果数据库当前是NoArchivelog模式,当最后一个redo log file写满的时候,LGWR会继续按顺序覆盖下一个inactive redo log file。
查询使用的日志文件的组数及每组的状态
SQL> select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 CURRENT
2 INACTIVE
3 INACTIVE
有代码可知当前所用的日志文件组数为3组,其中第一组是curren状态,第二三组是inactive状态。
我们也可以使用以下命令手动切换当前LGWR操作的redo log file。
SQL> alter system switch logfile;
系统已更改。
SQL> select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 ACTIVE
2 CURRENT
3 INACTIVE
可见当前LGWR操作的redo log file已经由之前的第一组修改为第二组了,并且第一组的redo log file变成了Active,也就是说可以用于实例恢复。
过了一会之后再次查询redo log file状态出现的结果如下:
SQL> select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 INACTIVE
2 CURRENT
3 INACTIVE
此时会发现后台进程会自动将第一个处于active的redo log file变成inactive。这是为什么呢?原来是后台归档进程ARCn将active redo log file归档成归档日志文件,相应的状态就由active变成了inactive。此时group1就不再用于实例恢复了。这个过程用下图来解释:

Multiplexed Redo Log Files

Oracle数据库允许多路复用重做日志,也就是说,重做日志的两个或多个相同的拷贝可以自动保持在不同的地点。为了最大效益,存储的位置应在分开的磁盘。即使重做日志的所有副本都在同一磁盘上,这种冗余措施也是可以防止I / O错误,文件损坏,等等。当使用复用重做日志时,LGWR会将相同的redo log信息同时写入多个相同的重做日志文件,从而解决重做日志的单点故障问题。
图中A_LOG1和B_LOG1是第1组的成员,A_LOG2和B_LOG2是第2组的两个成员,等等。一组中的每个成员都必须是相同的大小,并且是状态也是同步的(active or inactive)。
SCN--system change number
Oracle中的SCN(system change number)和我们的北京时间的意义是相同的,SCN是Oracle中的时间号。
为什么Oracle不用时间来界定呢?
我在北京时间8:00的时候执行一条DML语句,然后修改机器上的时间为7:00,再执行一条DML语句。如果用机器上的时间区分的话,那Oracle根本区分不出来这两条DML语句的执行顺序——而这一点对于Oracle是很重要的。所以它采用自己产生的SCN来区分所有操作的先后顺序。
关于SCN的具体讲解可以参见:http://blog.chinaunix.net/uid-18974058-id-3068592.html
日志文件
日志文件使用操作系统块大小
- 通常是512bytes
- 格式依赖于
- 操作系统
- Oracle版本
Redo日志组成
- 数据头
- redo record
Redo record
一个redo record记录包括
- Redo记录台
- 一个或多个改变向量
每个redo record包含每个原子改变的undo和redo
某些改动不需要undo(临时表,直接加载...)
redo log总结
redo log是Oracle中极其重要的组件,它的目的在于保证数据的安全性
redo log的丢失可能导致数据库中数据的丢失
应该讲Oracle至于归档模式下
日志挖掘-logminer
参考:
Oracle官网-Using LogMiner to Analyze Redo Log Files
用途
- 对Oracle在线redo和归档日志进行分析
目的
- 修正误操作
- 审计
dbms_logmnr
- 可以基于日志文件分析(一个或者多个)
- 可以基于时间段分析
- 可以基于SCN分析
记得帮我点赞哦!
精心整理了计算机各个方向的从入门、进阶、实战的视频课程和电子书,按照目录合理分类,总能找到你需要的学习资料,还在等什么?快去关注下载吧!!!

念念不忘,必有回响,小伙伴们帮我点个赞吧,非常感谢。
我是职场亮哥,YY高级软件工程师、四年工作经验,拒绝咸鱼争当龙头的斜杠程序员。
听我说,进步多,程序人生一把梭
如果有幸能帮到你,请帮我点个【赞】,给个关注,如果能顺带评论给个鼓励,将不胜感激。
职场亮哥文章列表:更多文章

本人所有文章、回答都与版权保护平台有合作,著作权归职场亮哥所有,未经授权,转载必究!
Oracle重做日志和日志挖掘的更多相关文章
- Oracle重做日志文件
一.联机重做日志的规划管理 1.联机重做日志 记录了数据的所有变化(DML,DDL或管理员对数据所作的结构性更改等) 提供恢复机制(对于意外删除或宕机利用日志文件实现数据恢复) 可以被分组管理 11 ...
- Oracle重做日志恢复数据模拟实验
一 系统环境: 1.操作系统:oracle Linux 5.6 2.数据库: Oracle 11g 二 Oracle 重做日志的作用: [模拟介质恢复] 1. 关闭数据库归档模式: [oracle@t ...
- 初识oracle重做日志文件
转自 http://blog.csdn.net/indexman/article/details/7746948 以下易容翻译自oracle dba官方文档,不足之处还望指出. 管理重做日志文件 学习 ...
- Oracle Redo 以及 Archived日志简述
Oracle通过Redo Archived实现数据的归档 什么是Redo日志 Redo日志记录了数据的变更,用于在数据库出现故障后,进行数据恢复. 功能主要由三个组件实现:Redo Log Buffe ...
- DBA_Oracle LogMiner分析重做和归档日志(案例)
2014-08-19 Created By BaoXinjian
- Oracle体系结构之联机日志文件管理
日志文件分类:重做日志文件 归档日志文件 警告日志文件 跟踪日志文件 redo_log_file文件作用: 1)维护数据一致性 2)记录了数据库里的更改操作 redo_log_friles以组为单位, ...
- oracle使用存储过程实现日志记录.sql
--这段sql语句是用来实现oracle后台记录操作日志的,代替或者补充应用系统的操作日志. --1.对应的日志记录表----------------------------------------- ...
- (转) ORACLE 正确删除归档日志的方法
ORACLE 正确删除归档日志的方法 我们都知道在controlfile中记录着每一个archivelog文件的相关信息,当然们在OS下把这些物理文件delete掉后,在我们的controlfile中 ...
- ORACLE DG添加redo日志成员
ORACLE DG在线日志添加日志成员 SQL>select SEQUENCE#,first_time,next_time,APPLIED, THREAD# from v$archived_lo ...
随机推荐
- 用Python绘制一套“会跳舞”的动态图形给你看看
在读技术博客的过程中,我们会发现那些能够把知识.成果讲透的博主很多都会做动态图表.他们的图是怎么做的?难度大吗?这篇文章就介绍了 Python 中一种简单的动态图表制作方法. 看这优美的舞姿 很多人学 ...
- LinuX操作系统基础------>软件的安装方式,chmod权限,vi编辑器的使用
RPM包管理 -rpm命令管理 RPM包管理 -yum在线管理 文件权限管理 vi编辑器的使用和常用的快捷键 1.RPM包管理: 一种用于互联网下载包的打包及安装工具,RPM包管理分为rpm命令管理和 ...
- webMvcConfigurer的详情
摘要 Spring的WebMvcConfigurer接口提供了很多方法让我们来定制SpringMVC的配置.而且Spring还提供了WebMvcConfigurerAdap ...
- idea如何打war包(不使用maven)
用多了maven的小伙伴,应该快忘了怎么不用maven打war包了吧,我也快忘了,所以趁我还记得,赶紧记录下来,多年后,当我回忆起往事........ 而且网上的教程也太坑了吧,牛头不搭马嘴,这害死多 ...
- C#LeetCode刷题之#867-转置矩阵(Transpose Matrix)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3756 访问. 给定一个矩阵 A, 返回 A 的转置矩阵. 矩阵的 ...
- Android SharedPreferences存储详解
什么是SharedPreferences存储 一种轻量级的数据保存方式 类似于我们常用的ini文件,用来保存应用程序的一些属性设置.较简单的参数设置. 保存现场:保存用户所作的修改或者自定义参数设定, ...
- Windows下 Navicat Premium 15安装教程(图文,含注册)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://www.cnblogs.com/zhangzhicheng1996/ ...
- Mybatis中选择语句的使用:<choose>标签、分区排序 Row_num() over ()函数的使用呢
1.Mybatis中数据库语句的选择 使用: <choose> <when test="relationType=='L'"> ...
- 【HDU3038】How Many Answers Are Wrong - 带权并查集
描述 TT and FF are ... friends. Uh... very very good friends -________-b FF is a bad boy, he is always ...
- SVN的基本使用
2020年7月6日 为什么需要版本控制? 需要清晰地保存某些文件的不同修订版本 控制文件的发屐过程,找出导致 BUG 的原因 轻松将项目或文件恢复到指定版本 极大方便团队之间协同开发,防止出现混乱 在 ...