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


12

我想知道是否有人可以验证我对这三个术语与Oracle数据库之间的区别的理解。

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

从我的收集:

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

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

Answers:


6

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

概念文档

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

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

    关联的撤消表空间的内部事务表记录了该事务已提交。事务的相应唯一SCN被分配并记录在事务表中。请参见“可串行隔离级别”。

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

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

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

  • Oracle数据库删除保存点。

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.