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

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

构造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事务知识点小结的更多相关文章

  1. SpringBoot 系列教程之事务隔离级别知识点小结

    SpringBoot 系列教程之事务隔离级别知识点小结 上一篇博文介绍了声明式事务@Transactional的简单使用姿势,最文章的最后给出了这个注解的多个属性,本文将着重放在事务隔离级别的知识点上 ...

  2. 【体系结构】有关Oracle SCN知识点的整理

    [体系结构]有关Oracle SCN知识点的整理 1  BLOG文档结构图   BLOG_Oracle_lhr_Oracle SCN的一点研究.pdf 2  前言部分 2.1  导读和注意事项 各位技 ...

  3. 【SpringBoot MQ 系列】RabbitMq 核心知识点小结

    [MQ 系列]RabbitMq 核心知识点小结 以下内容,部分取材于官方教程,部分来源网络博主的分享,如有兴趣了解更多详细的知识点,可以在本文最后的文章列表中获取原地址 RabbitMQ 是一个基于 ...

  4. Oracle事务

    Oracle事务的ACID特性 原子性Atomicity:事务中的所有动作要么都发生,要么都不发生. 一致性Consistency:事务将数据库从一种状态转变为下一种一致状态. 隔离性Isolatio ...

  5. 浅谈Oracle事务【转载竹沥半夏】

    浅谈Oracle事务[转载竹沥半夏] 所谓事务,他是一个操作序列,这些操作要么都执行,要么都不执行,是一个不可分割的工作单元.通俗解释就是事务是把很多事情当成一件事情来完成,也就是大家都在一条船上,要 ...

  6. Oracle事务之一:锁和隔离

    Oracle事务之一:锁和隔离 一. 事务概述 事务管理是数据库处理的核心.数据库既要保证用户能并发地执行事务,还要保证数据库的一致性. 当第一条可执行的SQL开始执行,就隐形地开始了一个事务,直到遇 ...

  7. C++重要知识点小结---3

    C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.html C++重要知识点小结---2:http://www.cnblogs.co ...

  8. C++重要知识点小结---2

    C++重要知识点小结--1 :http://www.cnblogs.com/heyonggang/p/3246631.html 1.C++允许程序员声明一个不能有实例对象的类,这样的类惟一的用途是被继 ...

  9. oracle事务和锁

    数据库事务概括 1. 说明 一组SQL,一个逻辑工作单位,执行时整体修改或者整体回退. 2.事务相关概念 1)事务的提交和回滚:COMMIT/ROLLBACK 2)事务的开始和结束 开始事务:连接到数 ...

随机推荐

  1. codevs 2216 行星序列 线段树+延迟标记(BZOJ 1798)

    2216 行星序列  时间限制: 2 s  空间限制: 256000 KB     题目描述 Description “神州“载人飞船的发射成功让小可可非常激动,他立志长大后要成为一名宇航员假期一始, ...

  2. python 字典的合并

    d1 = {, } d2 = {, } d = d1.copy() d.update(d2) print(d)

  3. 在 if 条件句中使用向量

    上述例子的函数中,都只输入了单一值.如果我们提供一个向量,那么这个函数将产生警告,这是因为 if 语句不能与多值向量共存.check_ _positive(c(1,-1,0))## Warning i ...

  4. vue2.0 组件和v-model

    本文适合初学组件编写的同学阅读. 乍一看这个标题,可能会有疑问:v-model和组件也能扯到一起? 我打算写这篇文章的时候,也是这么想的.咱们按简历的那一套STAR法则来梳理一下这篇文章: 情景[Si ...

  5. Java 集合-Map接口和三个子类实现

    2017-10-31 22:05:59 Map 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. HashMap是基于散列表实现的,插入.删除和定位元素时间复杂度平均能达到O ...

  6. 随机梯度下降算法求解SVM

    测试代码(matlab)如下: clear; load E:\dataset\USPS\USPS.mat; % data format: % Xtr n1*dim % Xte n2*dim % Ytr ...

  7. 自定义jQuery的animate动画

    //擦除效果 jQuery.extend(jQuery.easing, { easeOutBack : function(x, t, b, c, d, s) { s = s || 1.3; retur ...

  8. 处理ListView数据为空的情况

    如何处理需要填充的数据为空的情况? ListView及其他继承自AdapterView的类都有一个简便的处理这种情况的方法:setEmptyView(View). 当ListView的Adapter为 ...

  9. MIPS 汇编指令学习

    MIPS 寄存器 MIPS comes with 32 general purpose registers named $0. . . $31Registers also have symbolic ...

  10. Beta阶段第1周/共2周 Scrum立会报告+燃尽图 03

    作业要求与 [https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284] 相同 版本控制:https://git.coding.net/li ...