PLSQL_自治事务和嵌套事物的理解和用法(案例)
2014-06-01 Created By BaoXinjian
一、摘要
嵌套事物:指在一个Parent事务中嵌套的一个或多个Sub Transaction.并且主事务与其相互影响,这种事务就称为嵌套事务。以Commit作为事务的结束
自治事物:指在function,procedure等subprograms中对事务进行自治管理,当在别的pl/sql block里去调用这些subprograms的时候这些subprograms并不随着父pl/sql block的失败而回滚,而是自己管自己commit。以Commit作为事务的结束。自治事务常用于写入LOG或TRAC信息便于查找错误。
个人感觉,一般嵌套事物因为采用savepoint&rollback这种方式进行回滚,会破坏程式的可读性及模块化,特别有多个savepoint&rollback在程式中,可能连自己写的人会混淆,更何况项目运维过程中的维护人员,所以一般在写程式标准中,会禁止使用嵌套事物
而自治事物可将程式的模块化,一般来说是推荐的写法,将主事物和子事物进行隔离,所以后面也会对自治事物做详细的解读
二、嵌套事物 SavePoint
1. 基本作用:建立回滚节点,之后如回滚直接回滚此节点,此节点之前仍会Commit
2. 基本语法
SAVE_POINT my_savepoint;
... ...
ROLLBACK to my_savepoint;
3. 因是开发过程中不推荐的写法,所以案列就略去了;)
三、自治事物 autonomous_transation
1. 基本作用:
当proc1调用proc2后,proc1执行Rollback后,proc2仍旧会进行Commit;
采用的基本语法是在申明proc2时加入 pragma autonomous_transaction;
2. 基本语法
申明proc2为自治事务
1 create or replace procedure proc2 23 as pragma autonomous_transaction; 45 begin 67 insert into log_info values (user, sysdate, 'insert'); 89 commit; 10 11 end;
3. 自治事务的一个例子
3.1 申明一个自治事物xxautonomouse_insert
1 procedure xxautonomouse_insert is 2 3 pragma autonomous_transaction; 4 5 begin 6 7 insert into xxap_viktor_autonomous 8 9 values(001, 'xxap_invoice_20140410_01'); 10 11 commit; --自治事务中commit 12 13 end;
3.2 申明一个主事物,在主事物中调用自治事物,
1 procedure xxautonomouse_main is 2 3 begin 4 5 xxautonomouse_insert; 6 7 insert into xxap_viktor_autonomous 8 9 values(002, 'xxap_invoice_20140410_02'); 10 11 rollback; --主事务中rollback 12 13 end;
3.3 在主事物中进行rollback,并不影响自治事务的commit和rollback,实现了事物间的隔离
4. 自治事务的概念
(1) 带 ALTER SESSION 的自治事务 自治事务应该与主事务共享一个会话,因此通过 ALTER SESSION 语句,对该会话的任何修改,对自治事务和主事务应该都是可见的。但自治事务执行与主事务不同的上下文中。任何从自治块中引发的自治子程序调用都与自治事务共享相同的事务上下文
(2) 自治事务与死锁 必须以下面的这种方式定义自治事务: 死锁在自治事务试图访问一个被主事务占用的资源时发生,这时主事务会挂起,直到自治事务结束。自治事务死等主事务释放资源,结果可能导致死锁
(3) 定义自治事务的条件 只有顶层匿名块才能包括 PRAGMA AUTONOMOUS_TRANSTRACTION(4) COMMIT 或 ROLLBACK 行为与自治事务 自治事务是以 commit 或 rollback 语句结束的。因此,应该在自治事务程序的内部显式地包含一个 commit 或 rollback 语句。如果没有这样做,任何一个未确定的事务都会回滚。这是一个事务级的回滚,而不是一个语句级的回滚
(5) 异常与自治事务 当自治事务以一个异常的方式退出时,就发生一个事务级的回滚,自治事务中所有未确定的改变都会回滚
(6) 多个自治事务 一个自治事务的上下文中,初始化多个自治事务。可以在一个自治块内定义多个 commit 或 rollback 语句来完成这项任务,当包含一个 rollback 时,它就会属于当前事务,而不属于主事务
(7) 自治事务的并发问题 自治事务与主事务是并发运行的,初始化文件 init.ora 中的 transactions 参数决定着每个会话中并发事务的数量
Thanks and Regards
参考:lxzo123 http://blog.csdn.net/lxzo123/article/details/5942003
参考:hwhuang http://zohan.group.iteye.com/group/wiki/2297-oracle-transaction
Thanks and Regards
转载于:https://www.cnblogs.com/eastsea/p/3763153.html
PLSQL_自治事务和嵌套事物的理解和用法(案例)相关推荐
- Oracle之自治事务
昨天处理项目中的一个业务需求要用到触发器实现,触发器中涉及到在inserting.deleting.updating之后来触发对表的操作,对于inserting.updating中的操作都可以正常实现 ...
- oracle 自治事物,自治事务 - 努力创造未来! - BlogJava
自治事务前的事务管理(一般事务管理) 像 DML 这样的数据库扣作都是在事务的上下文环境中执行的.事务是一个或多个 SQL 语句的序列,执行一定的工作逻辑单元.事务.定义的特定会话可以由 commit ...
- [20160608]自治事务引起死锁.txt
[20160608]自治事务引起死锁.txt --链接http://www.itpub.net/thread-2060966-2-1.html上的讨论,很久以前也遇到过 --(http://blog. ...
- PostgreSQL Oracle兼容性之 - plpgsql 自治事务(autonomous_transaction)补丁
PostgreSQL Oracle兼容性之 - plpgsql 自治事务(autonomous_transaction)补丁 作者 digoal 日期 2016-11-04 标签 PostgreSQL ...
- Oracle自治事务
本文章来自http://hi.baidu.com/sqlercn/item/10f170c96fbbfad7964452b8 Oracle自治事务介绍 在正常情况下一但发出commit或是rollba ...
- oracle自治事务的写法_Oracle的自治事务
自治事务(autonomous transaction)允许你创建一个"事务中的事务",它能独立于其父事务提交或回滚.利用自治事务,可以挂起当前执行的事务,开始一个新事务,完成一些 ...
- 关于Oracle AUTONOMOUS TRANSACTION(自治事务)的介绍
AUTONOMOUS TRANSACTION(自治事务)的介绍 在基于低版本的ORACLE做一些项目的过程中,有时会遇到一些头疼的问题,比如想在执行当前一个由多个DML组成的transaction(事 ...
- 对事务的特性ACID的理解
对事务的特性ACID的理解 数据库的事务必须具备ACID特性,ACID是指 Atomicity(原子性).Consistensy(一致性).Isolation(隔离型)和Durability(持久性) ...
- 编程式事务和声明式事物
编程式事务 声明式事物
最新文章
- java 匿名类调用方法_java – 从匿名类调用新定义的方法
- 买淘宝特价版,产业升级的证明
- FLASH开发[02]
- 精通Android自定义View(五)自定义属性值使用详情
- pair的用法 make_pair
- 使用cos组建上传文件
- PyTorch搭建简单神经网络实现回归和分类
- python简单程序实例-python下10个简单实例代码
- linux挂载目录已存在可以么,Linux如何更改硬盘已挂载目录
- springboot怎么返回404_自定义SpringBoot REST API 404返回信息
- QTableWidget
- Flutter 自定义 ImageButton
- linux时间转excel,linux时间戳转换【操作模式】
- USB3.0视频输出方案
- 关于“强化学习 策略梯度方法 方差大 的原因与解决方法”问题的思考
- Toolbar中setNavigationIcon的返回图标太大,图标大小调整解决方法
- vue 报错:Templates should only be responsible for mapping the state to the UI. Avoid placing tags with
- Android UnitTest
- mysql个人办公使用_Access数据库是给办公人员用的~闲杂人等不要来凑热闹
- DeFi+NFT出圈姿势盘点,NFT借贷等应用领域值得关注