Oracle:当用户发出更改数据项的指令时,为什么Oracle创建一个重做更改向量来描述对撤消块的更改

zy1mlcev  于 2023-05-16  发布在  Oracle
关注(0)|答案(1)|浏览(117)

通常,当用户发出更改数据块的指令时,Oracle会通过4个关键步骤来进行更改:
1.创建描述对数据块的改变的重做改变向量;
1.创建用于插入到撤消表空间中的撤消块中的撤消记录;
1.创建描述对撤消块的更改的重做更改向量;
1.更改数据块。
为什么我们需要步骤3来完成变更?

z3yyvxxp

z3yyvxxp1#

假设您有一个未完成(未提交)的事务。甲骨文已经做了你在问题中说的所有事情。
现在机器崩溃了。
DBA在恢复机器(或在新机器上,具体取决于:))后恢复最后一次备份,并将所有重做日志应用到新示例上。在重做中也是步骤1中所做的。但该工作未提交,因此引擎需要将其回滚。为此,它需要回滚段。但是如果你没有在第3步中记录回滚段,那么回滚段就不会存在。
我知道你现在会问:为什么它会将日志应用于未提交的工作?这也是我读到这篇文章时的问题。我不确定,但也许这样做更容易。也许更难检查日志的每个条目是否是已提交事务的一部分。Oracle是这样工作的:我应用所有重做日志,然后回滚未提交的事务。

相关问题