Oracle 数据库中的提交与快速提交与提交清除

BYS*_*YS2 12 rdbms oracle oracle-11g-r2 oracle-11g oracle-10g

我想知道是否有人可以验证我对这 3 个与 Oracle 数据库相关的术语之间差异的理解。

许多来源混淆了这些术语并且没有详细解释它们,因此查找信息有点困难。

从我收集到的:

  1. 提交和快速提交是一回事,所有提交都是快速提交。
  2. 快速提交本质上仅更新撤消/回滚段标头的事务表中的标志以指示事务已提交。然而,实际块没有被重新访问,这意味着位于数据块头部的感兴趣事务列表(ITL)中的撤消字节地址(UBA)仍然指向相应撤消段的事务表。此外,相应行的锁字节不会被释放,并且 ITL 中的锁计数不变(行仍然被锁定)。
  3. 在一个提交清除,块重新与ITL与提交SCN更新。然而,ITL 中的锁计数和每行存储的锁字节仍然没有更新(行仍然被锁定,就像在快速提交中一样),即使块被更改,这也不会生成重做。
  4. 正常提交的块(== 快速提交)将在下次触摸时进行延迟块清除(并生成重做)。
  5. 进行了提交清除的块将在下次触摸时进行延迟日志记录块清除(并生成重做)。

希望有人可以验证这些要点!谢谢!

Vin*_*rat 6

你有基本的权利。只有一种类型的提交(没有正常的快速的……)。

概念文档

当事务提交时,会发生以下操作:

  • 为 COMMIT 生成系统更改号 (SCN)。

    事务已提交的关联撤消表空间的内部事务表记录。交易对应的唯一SCN被分配并记录在交易表中。请参阅“可序列化隔离级别”。

  • 日志写入器(LGWR)进程将重做日志缓冲区中剩余的重做日志条目写入在线重做日志,并将事务SCN写入在线重做日志。这个原子事件构成了事务的提交。

  • Oracle 数据库释放对行和表持有的锁。

    允许排队等待未提交事务持有的锁的用户继续他们的工作。

  • Oracle 数据库删除保存点。

  • Oracle 数据库执行提交清除。

    如果包含来自已提交事务的数据的修改块仍在 SGA 中,并且没有其他会话正在修改它们,则数据库将从块中删除与锁相关的事务信息。理想情况下,COMMIT 会清除块,以便后续的 SELECT 不必执行此任务。

因此,如果块仍在 SGA 中,则在提交期间将执行清除(完全重做)。

在活动系统中,具有未提交事务的块被写入磁盘并从 SGA 刷新是很常见的。在这种情况下,块保持原样,下一个接触该块的查询将执行延迟块清除(您的第 5 点并非在所有情况下都会发生)。