码迷,mamicode.com
首页 > 数据库 > 详细

oracle事务知识点小结

时间:2014-07-25 02:40:44      阅读:440      评论:0      收藏:0      [点我收藏+]

标签:blog   http   使用   strong   数据   io   width   2014   

DML语句流程 
1 获取事务锁和ITL
2 锁定候选行
3 生成redo
4 生成undo
5 生成redo record写入log buffer并更改数据块


事务提交
1 分配SCN
2 更新事务表,将事务槽状态改为0x09
3 回收undo块
4 创建commit redo record
5 将redo从log buffer刷新
6 释放表锁和行锁




一个事务由1个TX和若干TM组成,而回滚savepoint不会释放TX锁;


ITL通过XID指向事务槽,进而指向undo记录,其UBA也指向undo记录;
两者区别在于:事务槽指向undo chain起始位置,而UBA指向事务最近一次改动;
 

bubuko.com,布布扣


Undo chain:同一事务的undo record形成单向链表,新生成的插入队首;
一个undo块只能由1个事务使用;
 

bubuko.com,布布扣



构造CR块
会话A对块做DML尚未提交,会话B此时读取该块则会探测到1个open ITL,检查回滚段头的事务表发现状态为active,则需构造1个CR块;
克隆当前块,通过回滚段头和回滚块撤销其最近操作;
通过x$bh.state可查看buffer状态
0 FREE no valid block image 
1 XCUR a current mode block, exclusive to this instance 
2 SCUR a current mode block, shared with other instances 
3 CR  a consistent read (stale) block image 
4 READ buffer is reserved for a block being read from disk 
5 MREC a block in media recovery mode 
6 IREC a block in instance (crash) recovery mode



延迟块清除
事务提交时只保证将事务槽状态改为inactive,若此时块已经不在buffer中,则ITL仍为open;
下次读取时依据事务槽信息更新ITL的flag和Commit SCN,以及释放行锁和fsc(free space credit),期间会产生redo;
有2种例外:
1 事务表槽已被重用,即wrap#>XID.wrap#,则使用回滚段头的CSCN作为upper bound SCN;
2 回滚段已删除,则用undo$中的SCN更新(ITL的flag为CU--);
http://www.laoxiong.net/about-block-delay-cleanout-and-consistent-reads.html 


快速块清除
提交时块仍在内存,更新其ITL的commit SCN(锁标志不更新)和flag(-U--),涉及的块最多达到buffer cache的10%;
若块已经同步到磁盘即状态为clean,此操作会让其重新为dirty需要二次刷新;
下次读取该块时,通过检查事务槽确认已提交,则将ITL关闭;若对应回滚段已删除,则从undo$中寻找SCN记录;



事务恢复
1 rollback
反向扫描所有的undo记录(latest first)并依次应用,ITL会随之更新;
2 进程crash
PMON负责恢复;可通过10012事件查看;
3 数据库crash
SMON负责恢复;再次启动时,优先恢复system回滚段的事务 ,先将其他回滚段事务设为DEAD,待数据库OPEN后再次扫描这些回滚段并执行回滚;
可通过x$ktuxe.ktuxecfl=’DEAD’查询死事务,其事务槽的cflags=0x10;
10013事件可跟踪数据库启动时的事务恢复;10015则dump事务恢复前后的回滚段头;
10153可禁止数据块启动时回滚死事务;



隐含参数
_offline_rollback_segments & _corruupted_rollback_segments
指定的回滚段在数据库启动时不会被扫描,其包含的active事务也不会被回滚;
若块包含open ITL指向_offline回滚段,重新读取该块时会访问事务表,若事务已提交则执行块清除,若active只可构造CR块;


转载
:http://blog.itpub.net/15480802/viewspace-1086960/

oracle事务知识点小结,布布扣,bubuko.com

oracle事务知识点小结

标签:blog   http   使用   strong   数据   io   width   2014   

原文地址:http://www.cnblogs.com/future2012lg/p/3866744.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!