`
grzrt
  • 浏览: 183044 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle之自治事务

 
阅读更多

昨天处理项目中的一个业务需求要用到触发器实现,触发器中涉及到在inserting、deleting、updating之后来触发对表的操作, 对于inserting、updating中的操作都可以正常实现,就是deleting的时候,要求更新其他表,更新的值是对触发器表自身的查询操作, 本人在有限的水平范围之内试过N中方式来达到需求,最后无果,无奈之下只有找经理帮忙看看问题,最终问题被解决了,果然是用到了自己不太熟悉的 oracle自治事务,而且这个自治事务因为是独立的事务操作,考虑到事务回滚,必须单独写成一个触发器来完成,最后问题被老大解决掉了,每次问题希望都 是成长的机会,会有收获,于是乎就到网上找了下自治事务(简称AT)相关方面的说明及用法,下午就到园子里来mark下,供自己学习及各位园友参考;

1、自治事务使用情况

无法回滚的审计 : 一般情况下利用触发器禁止某些对表的更新等操作时,若记录日志,则触发器最后抛出异常时会造成日志回滚。利用自治事务可防止此点。
避免变异表: 即在触发器中操作触发此触发器的表
在 触发器中使用ddl 写数据库:对数据库有写操作(insert、update、delete、create、alter、commit)的存储过程或函数是无法简单的用 sql来调用的,此时可以将其设为自治事务,从而避免ora-14552(无法在一个查询或dml中执行ddl、commit、rollback)、 ora-14551(无法在一个查询中执行dml操作)等错误。需要注意的是函数必须有返回值,但仅有in参数(不能有out或in/out参数)。
开发更模块化的代码: 在大型开发中,自治事务可以将代码更加模块化,失败或成功时不会影响调用者的其它操作,代价是调用者失去了对此模块的控制,并且模块内部无法引用调用者未提交的数据。

2、Oracle 自制事务是指的存储过程和函数可以自己处理内部事务不受外部事务的影响,用pragma autonomous_transaction来声明,要创建一个自治事务,您必须在匿名块的最高层或者存储过程、函数、数据包或触发的定义部分中,使用 PL/SQL中的PRAGMA AUTONOMOUS_TRANSACTION语句。在这样的模块或过程中执行的SQL语句都是自治的。

View Code

3、自治事务可以嵌套,嵌套深度等只受init.ora参数transactions(同时并发的事务数,缺省为sessions的1.1倍)制 约。因为自治事务是与主事务(简称MT)相分离的,所以它不能检测到被修改过的行的当前状态。这就好像在主事务提交之前,它们一直处于单独的会话里,对自 治事务来说,它们是不可用的。然而,反过来情况就不同了:主事务能够检测到已经执行过的自治事务的结果。

4、如果AT试图访问被MT控制的资源,可能有deadlock发生.Package 不能被声明为AT,只有package所拥有的function和procedure 才能声明为AT。主 事务与自治事务是完全不同的事务,因此无法共享锁等。结束一个自治事务必须提交一个commit、rollback或执行ddl, 否则会产生Oracle错误ORA-06519: active autonomous transaction detected and rolled back 。保存点无法在自治事务中回滚到父事务中的一个保存点,只能在内部使用保存点。

5、可能遇到的错误
ora-06519 – 检查到活动自治事务,回滚——退出自治事务时没有提交、回滚或ddl操作
ora-14450 – 试图访问正在使用的事务级临时表
ora-00060 – 等待资源时检查到死锁

 

原文:http://www.cnblogs.com/Ronger/archive/2012/02/15/2352527.html

分享到:
评论

相关推荐

    Oracle自治事务的介绍(Autonomous_Transactions)

    Oracle自治事务的介绍(Autonomous_Transactions)PRAGMA_AUTONOMOUS_TRANSACTION

    Oracle中怎样用自治事务保存日志表

    自治事务是与主事务相分离的,所以它不能检测到被修改过的行的当前状态。这就好像在主事务提交之前,它们一直处于单独的会话里,对自治事务来说,它们是不可用的。然而,反过来情况就不同了:主事务能够检测到已经...

    oracle自治事务(Trigger)

    在触发器中使用自制事务及调用存储过程 Declare Pragma Autonomous_Transaction; ...

    oracle触发器调用存储过程

    oracle 触发器 调用 存储过程 Oracle自治事务(Autonomous Transaction)

    Oracle 10g应用指导

    对子程序的调用者权限、管道表函数、传递触发器标识:new和:old以及自治事务也给出了具体的解决方法。第8 章 LOB与面向对象的数据管理. 第9章 Oracle的监听器和网络设置。包括Oracle网络体系结构,Oracle Net参数文件...

    ORACLE9i_优化设计与系统调整

    第一部分 ORACLE系统优化基本知识 23 第1章 ORACLE结构回顾 23 §1.1 Oracle数据库结构 23 §1.1.1 Oracle数据字典 23 §1.1.2 表空间与数据文件 24 §1.1.3 Oracle实例(Instance) 24 §1.2 Oracle文件 26 §1.2.1...

    Oracle+10g应用指导与案例精讲

    对子程序的调用者权限、管道表函数、传递触发器标识:new和:old以及自治事务也给出了具体的解决方法。第8 章 LOB与面向对象的数据管理. 第9章 Oracle的监听器和网络设置。包括Oracle网络体系结构,Oracle Net参数文件...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    CruiseYoung提供的带有详细书签的电子... 14.12 自治事务 409 14.13 小结 413 第15章 测试与质量保证 415 15.1 测试用例 416 15.2 测试方法 417 15.3 单元测试 418 15.4 回归测试 422 15.5 模式修改 422 15.6...

    ORACLE之常用FAQ V1.0(整理)

    [Q]怎么样设置自治事务 5 [Q]怎么样在过程中暂停指定时间 5 [Q]怎么样快速计算事务的时间与日志量 5 [Q]怎样创建临时表 6 [Q]怎么样在PL/SQL中执行DDL语句 6 [Q]怎么样获取IP地址 7 [Q]怎么样加密存储过程 7 [Q] 7 ...

    Oracle 9i&10g编程艺术:深入数据库体系结构(全本)含脚本

    8.6.1 自治事务如何工作? 273 8.6.2 何时使用自治事务? 276 8.7 小结 279 第9章 redo与undo 281 9.1 什么是redo? 281 9.2 什么是undo? 282 9.3 redo和undo如何协作? 285 9.4 提交和回滚处理 289 9.4.1 ...

    Oracle编程艺术

    第 1章 开发成功的Oracle应用程序...................................................... 61 1.1 我的方法................................................................................ 63 3 / 976 1.2 ...

    OATP-AES-Interoperable:Oracle ATP AES256-CBC与其他软件之间的互操作性

    Oracle自治事务处理数据库(Oracle ATP)AES256-CBC与其他数据库之间的互操作性 动机 现代软件系统之间的互操作性对于客户而言尤其重要。 借助我的Always Free Oracle ATP中的Oracle RESTful数据服务(ORDS)技术,...

    oracle chm帮助文件下载

    怎么获得今天是星期几,还关于其它日期函数用法 [Q]随机抽取前N条记录的问题 [Q]抽取从N行到M行的记录,如从20行到30行的记录 [Q]怎么样抽取重复记录 [Q]怎么样设置自治事务 [Q]怎么样在过程中暂停指定时间 [Q]...

    ONE ON ONE 中文版第二部分

    9:数据装载 10:优化策略和工具 11:优化器方案稳定性 12:分析函数 13:物化试图 14:分区 15:自治事务 16:动态SQL 17:intermedia 18:基于C的外部过程 19:JAVA存储过程 20:使用对象关系特性 21:精细存取控制...

    ONE ON ONE 中文版第一部分

    9:数据装载 10:优化策略和工具 11:优化器方案稳定性 12:分析函数 13:物化试图 14:分区 15:自治事务 16:动态SQL 17:intermedia 18:基于C的外部过程 19:JAVA存储过程 20:使用对象关系特性 21:精细存取控制...

    在Oracle中记录信息

    本文介绍了在记录有关Oracle数据库中的操作的信息时可以使用的技术,例如自治事务和操作信息。

    autonomousdatabase:自治数据库脚本

    Oracle自治数据库是一个创新的数据平台,包括事务数据,关系数据,nosql和分析数据。 在这段时间内,我们将构建一个包含事务处理应用程序和分析应用程序的集成数据平台。 在此期间,我们将执行的主要主题是: 1....

    PLSQL最佳实践

    PLSQL个人总结最佳实践。

Global site tag (gtag.js) - Google Analytics