我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么使用Oracle的自治事务

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么使用Oracle的自治事务

这篇文章主要介绍“怎么使用Oracle的自治事务”,在日常操作中,相信很多人在怎么使用Oracle的自治事务问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Oracle的自治事务”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

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就会造成死锁。三秒后死锁报错,结束。外层事物继续执行。

四、自治事务使用建议

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

到此,关于“怎么使用Oracle的自治事务”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么使用Oracle的自治事务

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

ThinkPHP中的事务怎么使用

今天小编给大家分享一下ThinkPHP中的事务怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、事务的概念事务是一系
2023-07-05

oracle自带split函数怎么使用

Oracle并没有内置的split函数,但可以使用其他方法来实现类似功能。比如可以使用REGEXP_SUBSTR函数来实现类似split的功能。示例如下:SELECT REGEXP_SUBSTR('apple,banana,or
oracle自带split函数怎么使用
2024-04-09

oracle自增序列函数怎么使用

Oracle自增序列函数生成唯一递增数字序列,常用于生成表记录主键。语法包括CREATESEQUENCE语句,可定义序列名称、递增值、起始值、最大值、最小值、缓存大小和循环/非循环选项。可通过NEXTVAL获取下一个值,CURRVAL获取当前值。序列的属性可通过ALTERSEQUENCE修改,是数据库中轻量级对象之一。
oracle自增序列函数怎么使用
2024-05-14

Go语言中的事务怎么使用

本篇内容主要讲解“Go语言中的事务怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go语言中的事务怎么使用”吧!事务实践服务端在进行和数据库交互时,对于一些场景我们可能会使用事务来保证数据
2023-07-06

Vue组件的自定义事件和全局事件总线怎么使用

这篇“Vue组件的自定义事件和全局事件总线怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue组件的自定义事件和全局
2023-07-05

Oracle中怎么使用自动存储管理

在Oracle数据库中,自动存储管理(Automatic Storage Management,ASM)可以通过以下步骤来进行配置和使用:在安装Oracle数据库时选择安装ASM组件。创建ASM实例:在Oracle数据库服务器上创建一个A
Oracle中怎么使用自动存储管理
2024-04-19

怎么使用Linux自带的gssftp服务

这篇文章给大家分享的是有关怎么使用Linux自带的gssftp服务的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。RedHat和CentOS都自带了一个gssftp服务,使用方式如下:[root@linux loc
2023-06-16

SQLServer中怎么使用事务控制

在SQL Server中,可以使用BEGIN TRANSACTION,COMMIT和ROLLBACK语句来实现事务控制。以下是一个简单的示例:BEGIN TRANSACTIONUPDATE table_nameSET column1 =
SQLServer中怎么使用事务控制
2024-03-12

怎么使用RocketMQ事务消息解决分布式事务

本篇文章为大家展示了怎么使用RocketMQ事务消息解决分布式事务,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。初步认识RocketMQ的核心模块rocketmq模块rocketmq-broker:
2023-06-04

oracle的regexp怎么使用

Oracle的正则表达式函数REGEXP可以使用以下方式进行使用:REGEXP_LIKE:用于判断一个字符串是否与正则表达式匹配。语法如下:REGEXP_LIKE(source_string, pattern, match_paramet
oracle的regexp怎么使用
2024-04-09

oracle的schema怎么使用

在Oracle中,Schema是一种逻辑容器,用于组织和管理数据库对象(如表、视图、索引等)。每个Schema都有一个唯一的名称,并且可以在一个数据库中创建多个Schema。要使用Oracle的Schema,首先需要创建一个Schema。
oracle的schema怎么使用
2024-04-09

编程热搜

目录