通常,当用户发出更改数据项的指令时,Oracle会通过以下四个关键步骤进行更改:
1。创建一个描述数据块更改的重做更改向量。
2。创建撤消记录,以便在撤消表空间中插入撤消块。
第3。创建一个描述撤消块更改的重做更改向量。
4。更改数据块。
为什么我们需要第3步来完成变更?
答案 0 :(得分:0)
假设您有未完成(未提交)的交易。 Oracle已完成您在问题中所说的所有事情。
现在机器崩溃了。
DBA,在恢复计算机之后(或在新计算机上,取决于:))恢复最后一次备份,并在新实例上应用所有重做日志。重做也是在步骤1中完成的。但是这项工作没有提交,因此引擎需要将其回滚。为此,它需要回滚段。但如果您未在步骤3中记录,则回滚段将不存在。
我知道你现在会问:为什么它会为未提交的工作应用日志?当我读到它时,这也是我的问题。我不确定,但也许这样做更容易。也许更难检查日志的每个条目是否是已提交事务的一部分。但是,这就是Oracle的工作方式:我应用所有重做日志,然后回滚未提交的事务。