LGWR在DBWR之前写modified blocks到日志文件???

[复制链接]
查看11 | 回复8 | 2011-8-6 00:48:09 | 显示全部楼层 |阅读模式
在看SG,有一个关于满足LGWR进行写之前所具备条件的说明,其中一句:Before DBWn writes modified blocks in the database buffer cache to the data files
好像有时DBWN会在LGWR写之前先写吧????






回复

使用道具 举报

千问 | 2011-8-6 00:48:09 | 显示全部楼层
不会的。
回复

使用道具 举报

千问 | 2011-8-6 00:48:09 | 显示全部楼层
应该都是lgwr先写入到重做日志中,dbwr会先在缓冲区中保存一段时间吧.
回复

使用道具 举报

千问 | 2011-8-6 00:48:09 | 显示全部楼层
不会的。。。。数据文件中可能 存在还没有提交的数据 ,但是这些没有提交的数据在日志文件中也是有重作信息的。。。如果在重做日志中没有信息。而就写入了data file , 那就导致数据的不一致性了。。我的见解。。。
回复

使用道具 举报

千问 | 2011-8-6 00:48:09 | 显示全部楼层
最初由 l.qiang 发布
[B]不会的。。。。数据文件中可能 存在还没有提交的数据 ,但是这些没有提交的数据在日志文件中也是有重作信息的。。。如果在重做日志中没有信息。而就写入了data file , 那就导致数据的不一致性了。。我的见解。。。 [/B]

在实例进行故障恢复时是会进行 rollforward和rollback, 如果日志文件中都有了重做信息,干吗还要rollfback?????只需要rollforward就可以啦????
回复

使用道具 举报

千问 | 2011-8-6 00:48:09 | 显示全部楼层
如果database buffer cache里的数据被修改了,COMMIT以后肯定先写到ONLINE REDO LOG FILE里面,然后等DATABASE BUFFER CACHE里的数据被修改到一定量或者满足一定的出发条件(比如CKPT),这样的话DBWR才写,而每当DBWR写的前面,必定会让LGWR再次触发。你想想嘛,如果系统一旦挂了,而DATABASE BUFFER CACHE里的数据没有写到DATAFILE里面的话,那么系统就是根据ONLINE REDO LOG FILE才能够来回复已经执行过的东西,而那些没有被COMMIT的事务,则没有办法了,只能全部回滚到原来的样子,但这部分是UNDO TABLESPACE和SMON的事情了,SG上不是每个后台进程都有很多被触发的条件嘛,自己再看啦。至少我不才,在我什么概念都没的时候,我这章来回看了N多边,很有意思觉得
回复

使用道具 举报

千问 | 2011-8-6 00:48:09 | 显示全部楼层
对于数据块进行修改时,应该是先写日志后,才能修改。
LGWR与DBWR谁先进行写操作那可不一定。
回复

使用道具 举报

千问 | 2011-8-6 00:48:09 | 显示全部楼层
有一条规则叫日志先写原则,这与事务提交有关,事务提交时,必定先写redo buffer到redo log。
至于DBWR什么时候写,它有几个条件,满足任何一个,才进行写入数据文件。
回复

使用道具 举报

千问 | 2011-8-6 00:48:09 | 显示全部楼层
应该遵循日志优先写原则吧,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行