当Oracle将SGA中未提交的数据刷新到磁盘时,重做撤消

时间:2014-03-31 11:12:23

标签: oracle background-process

当没有更多缓冲区或这是一个检查点时,DBWn负责将脏块写入磁盘。因此,当我更新我的数据并且没有提交时,DBW会发信号通知将缓冲区刷新到磁盘。在DBW可以刷新脏块之前,将通知LGWR将重做日志缓冲区刷新到联机重做日志。

我的问题是:在我的设置中刷新重做日志缓冲区的内容是什么?这是撤消的重做吗?如果实例在此时崩溃,我不知道如何在实例恢复中使用此重做。

感谢。

1 个答案:

答案 0 :(得分:0)

这听起来像是在重做令人困惑的重做 - 这两者并不是一回事。

当您发出某种DML语句(insert,update,ect)时,此语句将作为重做日志的一部分进行记录。如果在将此更改写入实际数据文件之前发生了某些事情,则会保留此信息。当DBW运行时,它会记录系统更改号(SCN),这就是Oracle知道不再需要重做信息的方式。

撤消信息记录在撤消表空间中(以前的回滚虽然存在一些技术差异)。这仅用于两种情况 - 您不提交事务或系统出现故障。第一种情况是相当不言自明的。在第二种情况下,Oracle将首先通过“重做”重做日志中的语句(从上一次成功的SCN开始)执行前滚,然后通过“撤消”撤消表空间中的任何非提交数据来执行回滚。这将使实例返回到上一个良好状态。

这可能会有些简化,但我希望它能回答你的问题。