PLSQL_自治事务和嵌套事物的理解和用法(案例)

简介: 2014-06-01 Created By BaoXinjian 一、摘要 嵌套事物:指在一个Parent事务中嵌套的一个或多个Sub Transaction.并且主事务与其相互影响,这种事务就称为嵌套事务。

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

ERP技术讨论群: 288307890
技术交流,技术讨论,欢迎加入
Technology Blog Created By Oracle ERP - 鲍新建
相关文章
|
6月前
|
存储 人工智能 关系型数据库
4年10亿美金,Neon用Serverless PG证明:AI需要的不是“大”,而是“隐形”
AnalyticDB PostgreSQL 版基于Neon架构隆重推出满足 AI 时代应用开发需求的Serverless版本,并且在这之上搭载了结构化分析、向量检索、BM25全文检索和图检索,通过一套引擎满足 AI 应用丰富的数据诉求,支持MCP和OpenAI协议,为企业全面拥抱 AI 配备了数据存储、分析和应用的 “关键” 能力,帮助企业火箭式启动跑赢时代。
|
人工智能 开发者
FacePoke:AI时代的面部表情编辑新体验
**FacePoke** 是一款引人注目的开源工具,利用先进的人工智能技术,让用户通过简单的拖拽界面实时编辑面部表情。它支持实时编辑与动画,提供直观的操作体验,适用于艺术项目、视频制作和社交内容等多种场景。FacePoke 的开源特性还允许开发者自由修改和扩展功能。无论是艺术家还是内容创作者,都能轻松提升数字内容的情感表达。
|
存储 数据采集 机器学习/深度学习
知识管理:从文档到数据的技术之旅
【6月更文挑战第25天】知识管理正由文档转向数据,克服传统方式如信息碎片化和检索效率低下的问题。借助大数据和AI,实现知识体系化、智能检索和数据价值挖掘。技术路径涉及数据采集、存储、挖掘、分析及可视化。未来,知识图谱、智能问答系统和个性化推荐将推动知识管理进一步发展,提升企业竞争力。
|
Prometheus Cloud Native
Mac下安装 Prometheus+Grafana
Mac下安装 Prometheus+Grafana
938 0
|
关系型数据库 数据库 PostgreSQL
POSTGRESQL中时间戳的奥秘timestamptz
探索 PostgreSQL 中的时间戳类型:timestamp 代表无时区的时间点,而 timestamptz 包含时区信息,可转换。了解它们的区别对于数据库操作至关重要。使用 `AT TIME ZONE` 关键字可实现两者间的转换。关注木头左,获取更多数据库知识!
POSTGRESQL中时间戳的奥秘timestamptz
|
Prometheus Kubernetes Cloud Native
prometheus|云原生|轻型日志收集系统loki+promtail的部署说明
prometheus|云原生|轻型日志收集系统loki+promtail的部署说明
1674 0
|
关系型数据库 PostgreSQL 索引
PostgreSQL通过索引获取heap tuple解析
PostgreSQL通过索引获取heap tuple解析
326 0
|
编译器 C语言 C++
C/C++中int128的那点事
C/C++中int128的那点事
942 0
C/C++中int128的那点事
|
Prometheus 监控 Cloud Native
Grafana安装教程
Grafana安装教程
3580 0
Grafana安装教程
|
JSON Prometheus 监控
Granafa监控仪表盘:自定义简约型-只显示资源总览,各个主机详情
Granafa监控仪表盘:自定义简约型-只显示资源总览,各个主机详情
Granafa监控仪表盘:自定义简约型-只显示资源总览,各个主机详情