自治事务pragma autonomous_transaction的使用场景(1、程序日志)

oracle自治事务(autonomous transaction) Thomas Kyte说过自治事务除了用作演示工具外,唯一的用途就是作为一种错误日志机制。使用场景是:想记录异常程序块中的一个错误,只需要将它写入一个表并commit,而不用commit其他任何内容。 阅读详情

PRAGMA在PLSQL里有4个关键词的用法:

(1)autonomous_transaction-自治事务,该程序块的commit或rollback不影响外层事务;

(2)exception_init--错误代码与declare的标识符关联;

(3)restrict_references--程序包的纯度级别;

(4)serially_reusable--程序包级别的数据在引用之间不保留。

到目前为止,我只使用过自治事务一种,在平时的开发经历中,自治事务主要用于2个场景:一是程序日志,二是触发器。先看一下自治事务在日志里的妙用:

在PLSQL程序开发过程中,一般都需要记录一些中间数据或者执行时间等,但是在一个大的事务中间,需要把日志保存下来而不影响整个事务的提交或回退,就只能用自治事务了。一般新实施一个数据库时,我都先把日志程序准备好,以下是实施步骤:

Step1.建一个公用的数据库用户

比如common,pubdata,monitor等,假设是用common用户


Step2.建一个日志表


Step3.记录日志的存储过程(自治事务)


Step4.授权给public用户,使得所有数据库用户都可以使用

刚才在存储过程中已经加了 authid definer(定义者权限),存储过程中涉及的表就不用再授权了。

为了对其他用户更透明,为这个存储过程建个同义词。


Step5.现在可以使用任何数据库用户来调用这个日志程序了


执行的结果如下:


可见

1.日志表对其他用户是不可见的,当然也可以创建全局同义词开放给其他用户

2.在出错前的自治事务记录的日志是保存成功的,

有一点这个程序没有体现,在DO SOMETHING WRONG之前的主程序的事务应该是被回滚的。

Oracle 自治事务详解(pragma autonomous_transaction) 文章目录 1 概述1.1 事务图示 2 示例:错误日志 1 概述 1. '自治事务' 是什么? (1) 自己管理自己(事务之间,各自为政,互不干扰) (2) 自己的 commit、rollback 不会影响到其它事务,也不会被其它事务所影响 2. 常用场景 (1) 错误日志。记录错误日志的 commit,不会影响到业务数据 3. 语法 在语句声明部分 declare,加入下列语句即可 pragma autonomous_transaction; .. 阅读详情

相关推荐

Oracle自治事务pragma autonomous_transaction的介绍

transaction has no link to the calling transaction, so only commited data can be shared by both transactions. 自治事务允许你离开调用的事务上下文,执行一个独立的事务,然后返回调用的事务而不会影响到调用事务的状态。自治事务和调用事务不同,只有提交的事务才会在事务见共享。 The foll...

danwind的专栏 246

存储过程中的pragma autonomous_transaction作用

  转自:https://blog.youkuaiyun.com/pan_tian/article/details/7675800   这段时间遇到一个问题,程序里明明插入了一条记录,但在后边的一段Procedure中却查不到刚刚插入的记录,最后发现这个Procedure的定义中加入了PRAGMA AUTONOMOUS_TRANSACTION。 PRAGMA AUTONOMOUS_TRANSACTI...

lolichan的博客 9976

Oracle自治事务——从问题到实践的深度解析

Oracle自治事务(Autonomous Transaction)是一种特殊的事务机制,允许在PL/SQL中创建独立于主事务的子事务。通过在存储过程或函数中声明PRAGMA AUTONOMOUS_TRANSACTION,子事务可以自主提交或回滚,不受主事务影响。典型应用场景包括:1)必须保留的操作日志(即使主事务失败);2)不可撤销的审计追踪记录;3)异步通知等关键操作。自治事务解决了传统ACID事务强一致性带来的局限性,确保关键操作独立持久化,为系统提供了更灵活的事务控制能力。

qq_39980997的博客 1781

ORA-14551: 无法在查询中执行 DML 操作

在函数中,往临时表插入数据报错: ORA-14551: 无法在查询中执行 DML 操作 ORA-06512: 在 "NSTCSA.NS_ST_GETRAISEFUNDX", line 29   增加下面的字符串: PRAGMA AUTONOMOUS_TRANSACTIO

r_youxia_dayu的专栏 2827

Oracle自治事务的介绍(Autonomous_Transactions)

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

差分运放电路输出电压偏置设计解析

差分运算放大电路是信号处理中的基础模块,通过差分对管结构实现共模抑制与差模放大。其核心原理基于运放的虚短虚断特性,当电阻网络满足对称条件时,输出电压与输入差分成正比。在工业测量系统中,由于ADC通常仅支持正电压输入,需要通过偏置电路将双极性信号平移至正电压范围。典型设计采用精密基准电压源和匹配电阻网络,既保持信号完整性又满足系统接口要求。本文以-100V高压测量为例,详细解析了分压网络设计、参考电压选取以及电阻匹配等关键技术要点,为传感器接口电路设计提供实践参考。

weixin_35750747的博客 470

Oracle 方言 PL/SQL 编程、异常、自治事务(pragma autonomous_transaction)

目录 PL/sql 基本概念 PL/sql 变量 PL/sql 块中流程控制 PL/sql 查询数据 PL/sql 异常处理 PL/sql 基本概念 1、sql 是一种标准的数据库访问语言,但无法编程,PL/SQL 是 Oracle 公司开发的"方言",允许编程,是对 SQL 的一种补充。在存储过程、游标、触发器等等中都有用到 plsql。 2、PL/SQL 的主要目的是对数据库进......

蚩尤后裔-汪茂雄 5053

人工智能情感分析实战:文本情绪识别

人工智能情感分析,特别是文本情绪识别,已成为理解和处理人类情感信息的重要工具。通过数据预处理、特征提取、模型训练与评估等步骤,我们可以有效地从文本数据中提取情感信息,为各种应用场景提供有价值的洞察。随着技术的不断进步和创新,情感分析的应用前景将更加广阔,为我们的生活和工作带来更多便利和机遇。

shejizuopin的博客 1098

Oracle 自治事务 pragma autonomous_transaction

自治事务是一个独立于主程序的事务,它不会对主事务的控制产生影响。非自治事务中的COMMIT,ROLLBACK是会影响整个事务的。 CREATE TABLE T_ERROR_LOG(ID VARCHAR(50), ERROR_LOG VARCHAR(50)); -- 自治事务(独立事务) CREATE OR REPLACE PROCEDURE PROC_AUTONOMOUS_ERRO

CTO成长之路——Rosanu 1270

point transformer v3结构

分割结构: embedding->enc->dec embedding->enc0->enc1->enc2->enc3->enc4->dec3->dec2->dec1->dec0 embedding ->block0->block1 ->dow->block0->block1 ->dow->block0->block1 ->dow->block0->block1-&gt

weixin_45625419的博客 582

java modbus通讯协议_Modbus通 讯 协 议

电磁流量计Modbus通 讯 协 议(版本号:9000-K V9.1.1)2020年01月01日通讯协议针对KFD电磁流量计工业应用设计,版本:9000-K V9.1.1,该版本主要用于实时数据采集、流量测量、流量累计控制及部分参数的修改。一、主机系统通讯部件要求1.国际标准RS-485通讯接口部件,不小于11Bytes 的通信缓冲区(FIFO),支持1200、2400、4800、96...

weixin_39956612的博客 1012

oracle 自制事务 PRAGMA AUTONOMOUS_TRANSACTION

数据库事务是一种单元操作,要么是全部操作都成功,要么全部失败。在Oracle中,一个事务是从执行第一个数据管理语言(DML)语句开始,直到执行一个COMMIT语句,提交保存这个事务,或者执行一个ROLLBACK语句,放弃此次操作结束。事务的“要么全部完成,要么什么都没完成”的本性会使将错误信息记入数据库表中变得很困难,因为当事务失败重新运行时,用来编写日志条目的INSERT语句还未完成。针对这种困境

gongzhufanlulu的博客 859

【Lammps】MS将cif通过msi2lmp.exe转为data文件

在Materials Studio中打开cif文件,在Modules工具行选择Forcite>calculation>Energy中选用cvff力场,点击more,不要运行run,在more中取消勾选calculate automatically,点击calculate,然后叉掉后在file>export导出car文件,同步生成了mdf文件。对于MS中没有的立场,选择之后点calculate会报错,右键选择label,然后根据Forcite选择原子,会发现有力场的有标号,没有力场的MS没有对选择标号。

zhangguoliang624的博客 3674

【转】PRAGMA AUTONOMOUS_TRANSACTION oracle 自治事务

原文地址:http://blog.sina.com.cn/s/blog_4f925fc30100h8ld.html 数据库事务是一种单元操作,要么是全部操作都成功,要么全部失败。在Oracle中,一个事务是从执行第一个数据管理语言(DML)语句开始,直到执行一个COMMIT语句,提交保存这个事务,或者执行一个ROLLBACK语句,放弃此次操作结束。   事务的“要么全部完成,要么什么...

大地 383

ONNX Runtime C# YOLO全链路压测:从300ms到22ms的15个底层优化技巧

摘要:本文分享了工业质检场景下C#调用YOLOv8s ONNX模型的性能优化实战经验。原始单帧推理耗时300ms无法满足产线需求,通过全链路分析定位瓶颈(预处理85ms、推理180ms、后处理30ms)。重点优化措施包括:使用OpenCVSharp CUDA加速预处理(85ms→12ms),开启ONNX Runtime ALL级别图优化,选用TensorRT执行提供程序(180ms→22ms),以及优化内存管理和线程调度。最终实现单帧总耗时22ms±2ms,GPU利用率提升至85%,完整满足产线120块板/

2601_94871597的博客 402

规控面试常见问题

规划控制算法常见问题。

每天进步一点点。 984

自治事务pragma autonomous_transaction的使用场景(2、触发器)

除了用于记录日志,自治事务pragma autonomous_transaction另一个常用的使用场景是在触发器里。 下面是我在某个工作流系统中创建的触发器,目的是触发在申请人的流程被下一环节受理时、以及流程被退回时提取相关信息发送短信提醒。 此时,我在前台进行操作后,收到一个错误: ORA-04091,变异表(mutating),因为在触发器里引用了被触发的表。解决方案就

观想的专栏 5687

波浪补偿控制(AHC)之波浪发生器(CODESYS完整源代码)

波浪发生器平台详细算法和结构介绍请参看下面博客文章:CODESYS平台如何建立FC和FB,请参看下面博客文章:

RXXW_Dor的博客 402

oracle 自治事务 PRAGMA AUTONOMOUS_TRANSACTION

在触发器中操作触发此触发器的表,用PRAGMA AUTONOMOUS_TRANSACTION选项。15.1为何使用自治事务 无法回滚的审计一般情况下利用触发器禁止某些对表的更新等操作时,若记录日志,则触发器最后抛出异常时会造成日志回滚。利用自治事务可防止此点。避免变异表即在触发器中操作触发此触发器的表在触发器中使用DDL 写数据库对数据库有写操作(INSERT、UPDATE、DELETE、CREA

strawbingo的专栏 5446

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Oracle自治事务详解

在PLSQL中,例如下面func1调用func2的场景,如果正常无自治事务的场景,func1的insert1会被func2的commit提交掉, 即使func1最后有rollback,insert 1也提交了。 根因就是func2内部的事务控制语句,影响了外部调用者。 再看一下Oracle提供的自治事务功能,增加了`PRAGMA AUTONOMOUS_TRANSACTION;`语法后,func2的事务控制语句完全独立出来,和func1不在有任何关系。 即insert 1不会被func2的commit影响..

InternalsOf 4730

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【Oracle专栏】自治事务AT实验、知识点整理

Oracle独立事务(Autonomous Transaction)是一种与主事务隔离的特殊事务机制,通过 PRAGMA AUTONOMOUS_TRANSACTION 声明实现,是一个PL/SQL编程特性,允许在PL/SQL程序中创建独立的、自动提交的事务。其核心特性:执行时主事务会被挂起,独立事务的提交或回滚不会影响主事务状态。对于需要执行多个操作但又不想因为其中一个操作失败而影响整个程序执行的情况非常有用。

weixin_42081167的博客 678

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Oracle之自治事务

昨天处理项目中的一个业务需求要用到触发器实现,触发器中涉及到在inserting、deleting、updating之后来触发对表的操作,对于inserting、updating中的操作都可以正常实现,就是deleting的时候,要求更新其他表,更新的值是对触发器表自身的查询操作,本人在有限的水平范围之内试过N中方式来达到需求,最后无果,无奈之下只有找经理帮忙看看问题,最终问题被解决了,...

aygecxzg86489的博客 142

PRAGMA AUTONOMOUS_TRANSACTION(oracle自治事务)

数据库事务是一种单元操作,要么是全部操作都成功,要么全部失败。在Oracle中,一个事务是从执行第一个数据管理语言(DML)语句开始,直到执行一个COMMIT语句,提交保存这个事务,或者执行一个ROLLBACK语句,放弃此次操作结束。   事务的“要么全部完成,要么什么都没完成”的本性会使将错误信息记入数据库表中变得很困难,因为当事务失败重新运行时,用来编写日志条目的INSERT语句还未完

1002

自治事务 PRAGMA AUTONOMOUS_TRANSACTION

在触发器中操作触发此触发器的表,用PRAGMA AUTONOMOUS_TRANSACTION选项。15.1为何使用自治事务 无法回滚的审计一般情况下利用触发器禁止某些对表的更新等操作时,若记录日志,则触发器最后抛出异常时会造成日志回滚。利用自治事务可防止此点。避免变异表即在触发器中操作触发此触发器的表在触发器中使用DDL 写数据库对数据库有写操作(INSERT、UPDATE、DELETE、CREA...

溺水的鱼 - Later equals never. 166
上一篇: 动态SQL拼装技巧
下一篇: 自治事务pragma autonomous_transaction的使用场景(2、触发器)
观想
博客等级 码龄24年 70粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值