oracle事务知识点整理-创新互联-成都创新互联网站建设

关于创新互联

多方位宣传企业产品与服务 突出企业形象

公司简介 公司的服务 荣誉资质 新闻动态 联系我们

oracle事务知识点整理-创新互联

这篇文章主要介绍“oracle事务知识点整理”,在日常操作中,相信很多人在oracle事务知识点整理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”oracle事务知识点整理”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

创新互联建站专注于三原企业网站建设,成都响应式网站建设,商城开发。三原网站建设公司,为三原等地区提供建站服务。全流程按需求定制制作,专业设计,全程项目跟踪,创新互联建站专业和态度为您提供的服务

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指向事务最近一次改动;
 

oracle事务知识点整理


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

oracle事务知识点整理



构造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块;

到此,关于“oracle事务知识点整理”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联-成都网站建设公司网站,小编会继续努力为大家带来更多实用的文章!


分享文章:oracle事务知识点整理-创新互联
新闻来源:http://kswsj.cn/article/dhscjo.html

其他资讯