简述oracle的日志缓冲区,2.4 重做日志缓冲区

2.4  重做日志缓冲区

Oracle重做日志的概念是记录每个数据块插入某个值或者删除某个值的语句。假设某个Update语句更新了10个数据块,则按照Oracle重做日志的概念,会针对每个数据块记录一对删除旧值和插入新值的语句,因为有10个数据块,所以会有10对类似的语句被记录下来。而为了减少I/O的次数,Oracle在内存结构里的系统全局区中,划分一块内存块专门存放这些变更的数据,这块区域就叫做重做日志缓冲区(Redo Log Buffer),所以说,重做日志缓冲区是用来跟踪并记录最近变更过的数据记录的。这里所指的变更是包含DML与DDL的语句:Insert、Update、Delete、Create、Alter,以及Drop,也就是说服务器进程(Server Process)及后台进程(Background Process)对Oracle的变更记录会写到重做日志缓冲区,也即在数据库高速缓冲区中所做的变更,都会产生重做日志,而这些变更的数据都在内存中的重做日志缓冲区中以Redo Entry(重做条目,也可称为Redo Record)的方式存储。Redo Entry是Oracle从用户会话占用的内存里将这些变更的记录复制到重做日志缓冲区内,其在内存中是一段连续的内存块,Oracle利用后台进程中的LGWR在适当的时机将重做日志缓冲区中的信息(也就是Redo Entry)写回到联机重做日志文件内,以便万一数据库崩溃,可以进行必要的恢复。后台进程LGWR将Redo Entry写回到联机重做日志文件的时机如下:

当用户下了提交指令时,就会触发LGWR将重做日志缓冲区内的数据写回到联机重做日志文件内。

先期写入协议机制,此原理是在后台进程DBWR将脏缓冲区写回到数据文件之前,也就是在执行检查点(Checkpoint)作业前,重做日志缓冲区内相关的Redo Entry都必须完成写入动作,以备不时之需;如果DBWR发现某些Redo Entry尚未写入联机重做日志文件,就会通知LGWR前来处理,之后DBWR才会真正的处理。同时,Oracle会定期执行检查点操作,以保证数据文件的内容与联机重做日志文件的内容一致。

提示

检查点的机制是避免在数据库恢复时,读取的Redo操作过多,导致恢复的时间过长,因此,Oracle是通过检查点来缩减恢复时间的,当检查点发生时,它会先确认当前的SCN(System Chang Number)号,此时的SCN被称为Checkpoint SCN,之后Oracle会通知后台进程DBWR把修改过的数据,也就是此检查点SCN之前的脏缓冲区,从数据库高速缓冲区内写到数据文件上;在检查点设置完成后,后台进程CKPT会更新控制文件和数据文件的文件头,记录检查点的相关信息。SCN号是Oracle的相当重要的概念,关于SCN号的详细内容,请参阅第6.1节。

LGWR每隔三秒会确认一下重做日志缓冲区内的空间,当空间剩余不到2/3时,就会触发LGWR,将重做日志缓冲区内的数据写回到联机重做日志文件内。

当重做日志缓冲区内的数据达到1 MB时,就会触发LGWR,将重做日志缓冲区内的数据写回到联机重做日志文件内。

发生联机重做日志切换(Log Switch)时,就会触发LGWR,将重做日志缓冲区内的数据写回到联机重做日志文件内。

【责任编辑:book TEL:(010)68476606】

点赞 0

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值