ITPub博客

首页 > 数据库 > Oracle > Oracle 的自治事务

Oracle 的自治事务

原创 Oracle 作者:Alcener 时间:2018-10-22 22:55:53 0 删除 编辑

Oracle 的自治事务

背景:最近在项目中遇到一个查询偶尔会卡三四秒,但是没有任何报错,查询的数据量很小,也不是每次都卡,比较奇怪。最终发现是自治事务搞的鬼。


一、自治事务的含义

自治事务: AUTONOMOUS TRANSACTION

在某个事物中独立开辟一个事务,内部事务操作不会影响同一会话的外部事务未提交的内容,同时内部事务也不受外部事务影响。

例如在A事务中开启一个b事务,A不管最后成功提交,还是失败会滚,b事务都能独立于A自己提交。


二、自治事务的用法

1、存储过程的开头


PRAGMA AUTONOMOUS_TRANSACTION

来声明自治事务

2、自治事务结尾必须提交或回滚,否则报错:


ORA-06519: active autonomous transaction detected and rolled back


3、 自治事务一般用于记录日志。不管业务(普通事务)成功提交或者失败回滚。日志(自治事务)都需要提交以记录必要的参数。


三、自治事务使用不当造成的死锁

最近在项目中遇到一个查询偶尔会卡三四秒,但是没有任何报错,查询的数据量很小,也不是每次都卡,比较奇怪。最终发现是自治事务搞的鬼。


外层事务=一个查询接口+一个自治事务B

一个查询接口A:先从临时表删除满足条件m的记录N1。然后在后续的内部自治事务中insert 一条记录N2,并提交。

一个自治事务B:从临时表删除满足条件m的记录N1,并提交。

最后外层大事务rollback。


1、当临时表没有对应删除的数据的时候,执行是正常的。

2、当临时表恰好有需要删除的数据时,那外层事务就把N1锁掉了,自治事务B再删除N1就会造成死锁。三秒后死锁报错,结束。外层事物继续执行。


四、自治事务使用建议

自治事务和普通事务最好业务分离,不要操作同一张表。最佳应用场景还是用于记录日志。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31414991/viewspace-2217169/,如需转载,请注明出处,否则将追究法律责任。

上一篇: ORACLE学习笔记
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2018-08-25

  • 博文量
    2
  • 访问量
    1871