Oracle的dbwr进程和lgwr进程,DBWR和LGWR的关系

1.1DBWR的作用:将修改后的dirty缓冲数据写入到文件中,

触发的条件主要有:

No free buffers;

checkpoint(会触发内存中的数据都往磁盘上写)

drop table/truncate table

1.2LGWR(Log writer,日志写入进程):将日志数据从日志缓存中写入到redolog文件中。是顺序写

触发的条件:

at commit;

when one-third full

every 3 seconds

defore DBWR writers

其中较重要的就是当你一COMMIT时,只要返回成功就说明已经log_buffer写到日志文件中,

还有一个就是LGWR进程一定是先于DBWR的。

DBWN(db_buffer与db_file)和 LGWR(log_buffer与log_file) 以及写入相应的文件中的关系:

从是否COMMIT来看分两种

一:未进行COMMIT,

则:有三种情况

1,两者将缓存中的数据都写入到 盘中,则:断点后开机,oracle会到日子文件中根据PBA和SCN标记,记录从该点起开始进行数据回滚,因为没有进行COMMINT,所以该数据不该改变存入到db_file文件中,因此oracle 从日志文件中读取出要undo/roll_backward的语句,进行反向处理,将写入到磁盘中的数据去除,回滚到之前的数据。如:你对一个表格进行了先插入一条数据再修改了该条数据,还未COMMINT,现在断电,再开机时,oracle按事物发生的顺序进行执行,而该先插入后修改的操作是一个事物(要不都成功,要不都失败),但在这个事物的内部会先从后面的语句反着执行,再执行前面的语句,即先修改后删除。

至于日志文件具体从哪点开始进行恢复或undo 这还有待研究!!!(这是很重要的)

2.日志缓存写入到日志文件中,但数据缓存没有写入到db_file中,则日志文件中的语句不重新执行,对它不作任何处理,因为您没有进行commit,该改变的数据是不该存在的,即不该将改变的数据写入到磁盘中。

3.若是两者缓冲都没有写入则数据没法恢复!!

二:进行了COMMIT由于进行了commit,则日志缓冲一定写入到redolog日志文件中,所有数据一定能恢复.但是若commit之后数据还在db_buffer中并没有写入到db_file中,则这就要开机的时候从日子文件中,根据从某个点开始进行恢复,即是redo/roll-forward,安照事物发生的先后顺序重新执行一次。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值