日期:2014-05-16 浏览次数:20461 次
为了保证事务的回退和满足多用户的 CR , oracle 引入了 undo 机制, 由于 undo 是循环使用的,在一个事务完成过程中,它与 redo 相互配合,其中 undo 在一次事务中需要完成以下工作:
(1) ???? Transaction 开始前 回滚段获取一个 ITL( 事务槽 ) ,分配空间, 记录事务信息
(2) ???? Transaction 提交后, redo 完成记录,同时还清除回滚段的事务信息 包括行级锁, ITL 信息 (commit 标志, SCN 等 )
清除这些事务段的信息的过程就叫做 块清除, 在完成块清除时 , 我们本事务修改的数据块就会存在两种可能 (1) 所有的数据块还保存在 buffer? cache 中, (2) 部分数据块或者是全部数据块由于 LRU 管理 已经被刷出了 buffer cache 。 oracle 为了考虑到块清除的成本,以及性能,会作以下两种方式的块清除处理:
(1) ?????? 快速块清除 (fast block cleanout ),? 当事务修改的数据库 全部保存在 buffer cache 并且修改数据块的数据量没有超过 cache buffer? 的 10% ,快速清除事务信息。
(2) ?????? 延迟块清除 (delayed block cleanout) 当修改的数据块的阀值超过 10%? 或者本次事务相关的数据块已经被刷出了 buffer cache , oracle 会下次访问此