重做日志 -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](https://docs.oracle.com/datab…
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 LOGFILE
statement. 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。
<!–more–>
查问应用的日志文件的组数及每组的状态
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
cnblogs-LogMiner 配置使用手册
用处
- 对 Oracle 在线 redo 和归档日志进行剖析
目标
- 修改误操作
- 审计
dbms_logmnr
- 能够基于日志文件剖析(一个或者多个)
- 能够基于时间段剖析
- 能够基于 SCN 剖析
记得帮我点赞哦!
精心整顿了计算机各个方向的从入门、进阶、实战的视频课程和电子书,依照目录正当分类,总能找到你须要的学习材料,还在等什么?快去关注下载吧!!!
朝思暮想,必有回响,小伙伴们帮我点个赞吧,非常感谢。
我是职场亮哥,YY 高级软件工程师、四年工作教训,回绝咸鱼争当龙头的斜杠程序员。
听我说,提高多,程序人生一把梭
如果有幸能帮到你,请帮我点个【赞】,给个关注,如果能顺带评论给个激励,将不胜感激。
职场亮哥文章列表:更多文章
自己所有文章、答复都与版权保护平台有单干,著作权归职场亮哥所有,未经受权,转载必究!