当前位置: 首页 > news >正文

26-Oracle 23 ai Automatic Transaction Rollback(行锁终结者)

一、时不时就冒出来的锁,各种kill​

​小伙伴们,有没有经常遇见各种事务锁,需要KILL,业务、开发各种发来的信息,kill一个session,有时候还会因为一个带崩另一个。

在ACID的事务中,为了数据安全。当会话持有行锁未提交(如未提交的UPDATE),会阻塞其他会话的DML操作。DBA的小伙伴就需要人肉手动介入终止会话(KILL SESSION),导致业务中断且效率低下。

​Oracle 23 ai 带来了自动事务回滚(Automatic Transaction Rollback)​​ 通过事务优先级机制,自动终止低优先级阻塞事务,实现按照预先制定的规则进行优先级自治,解放DBA的小能手。

二、技术实现
1. ​事务定义优先级机制
  • ​三个优先级​:HIGH(默认)、MEDIUM、LOW
  • ​判定规则​:高优先级事务被低优先级阻塞时,若超时未获锁,自动回滚低优先级事务(会话保持存活)​
--核心参数​:
ALTER SESSION SET TXN_PRIORITY = LOW;                 -- 设置会话事务优先级
ALTER SYSTEM SET PRIORITY_TXNS_HIGH_WAIT_TARGET=10;   -- 高优先级等待阈值(秒)
ALTER SYSTEM SET PRIORITY_TXNS_MEDIUM_WAIT_TARGET=20; -- 中优先级等待阈值(秒)
2. ​自动回滚流程
  • 触发条件​:高优事务等待时间 > PRIORITY_TXNS_HIGH_WAIT_TARGET
  • 执行动作​:
自动回滚低优先级阻塞事务
阻塞会话抛出错误(需要应用层设置捕获):
    • ORA-63300: 事务被自动回滚
    • ORA-63302: 必须执行ROLLBACK后才允许新操作
  • 会话状态​:会话不会终止!需显式执行ROLLBACK后继续工作。
3. ​多层阻塞处理
  • 若存在多个低优事务阻塞链,按等待顺序逐级回滚
  • ​比如:T1(LOW) → 阻塞 → T2(LOW) → 阻塞 → T3(HIGH)T3等待10秒 → 回滚T1 → T2获得锁 → T3再等10秒 → 回滚T2 → T3成功

三、使用场景 

场景

配置方案

关键业务操作

会话设置TXN_PRIORITY=HIGH+ 系统级调低PRIORITY_TXNS_HIGH_WAIT_TARGET

批处理任务

会话设置TXN_PRIORITY=LOW避免影响在线业务

应用超时控制

结合PRIORITY_TXNS_HIGH_WAIT_TARGET替代应用层超时机制

灰度测试

设置TXN_AUTO_ROLLBACK_MODE=TRACK(仅监控不实际回滚)

四、23 ai 实操脚本 

-- STEP1:系统参数配置 (需SYSDBA)
ALTER SYSTEM SET PRIORITY_TXNS_HIGH_WAIT_TARGET=10 SCOPE=BOTH;
ALTER PLUGGABLE DATABASE FREEPDB1 CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE FREEPDB1 OPEN;
--
DOCUSER@localhost:1521/FREEPDB1> select name2       from   V$SYSSTAT3*      where  name like '%txns rollback%';NAME
_________________________________________________
txns rollback priority_txns_high_wait_target
txns rollback priority_txns_medium_wait_target--
-- STEP2:创建测试表
CREATE TABLE lock_test1 (id NUMBER PRIMARY KEY, val VARCHAR2(20));
INSERT INTO lock_test1 VALUES (1, 'Init');-- STEP3:会话1(低优事务阻塞)
ALTER SESSION SET TXN_PRIORITY=LOW;
UPDATE lock_test1 SET val='Blocking' WHERE id=1;  -- 不提交!-- STEP4:会话2(高优事务被阻塞)
ALTER SESSION SET TXN_PRIORITY=HIGH;
UPDATE lock_test1 SET val='HighPriority' WHERE id=1;  -- 进入等待-- STEP5:监控等待链(新会话,重新开个终端)
SELECT sid, event "等待事件",blocking_session "阻塞会话",txn_priority "事务优先级",seconds_in_wait "已等待(秒)"
FROM v$session 
WHERE event LIKE '%enq: TX%';-- 等待10秒后观察:会话1自动回滚,会话2更新成功
-- 会话1后续操作:
SELECT * FROM lock_test1;  -- 抛出ORA-63300
ROLLBACK;
-- 需要执行以清除错误状态
五、监控与错误处理​
5.1 关键动态视图:
-- 事务视图中可以查看事务优先级及等待目标
SELECT txn_priority, priority_txns_wait_target 
FROM v$transaction;
--
DOCUSER@localhost:1521/FREEPDB1> SELECT txn_priority, priority_txns_wait_target2* FROM v$transaction;TXN_PRIORITY       PRIORITY_TXNS_WAIT_TARGET
_______________ ____________________________
HIGH                                       0--
-- 实时锁阻塞分析
SELECT sid, event "Event",seconds_in_wait "Wait Secs",blocking_session "Blocker"
FROM v$session 
WHERE event LIKE '%enq: TX%';
--
DOCUSER@localhost:1521/FREEPDB1> SELECT2    sid,3    event "Event",4    seconds_in_wait "Wait Secs",5    blocking_session "Blocker"6  FROM v$session7* WHERE event LIKE '%enq: TX%';no rows selected
--

5.2 应用层捕获信息,容错设计: 

--Java应用层捕获,开发的小伙伴,.net的就不提供了
try {stmt.executeUpdate("UPDATE...X...X"); 
} catch (SQLException e) {if(e.getErrorCode() == 63300 || e.getErrorCode() == 63302) {conn.rollback();  // 关键:显式回滚后重试retryOperation(); }
}
六、回顾-小改变大受益,Oracle真要进入自治时代了
  • 1.​业务无损​:仅回滚事务不终止会话,连接池无需重建
  • 2.​精准控制​:优先级+超时阈值实现手术式阻塞解除
  • 3.​运维革命​:告别ALTER SYSTEM KILL SESSION的手动人手粗暴的操作
  • 4.​高可用增强​:有效应对应用逻辑缺陷导致的锁扩散
TIPS:
  • - 默认优先级为HIGH,需主动配置低优事务才会触发自动回滚
  • - 应用必须处理ORA-63300和ORA-63302错误
  • - 等待时间非严格上限(多层阻塞时逐级超时)

 

相关文章:

  • 如何正确的用Trae 打开 Unity 3D 项目
  • 神经网络全景图:五大核心架构详解与本质区别
  • QB/T 8103-2024 氯化聚氯乙烯板材检测
  • java并发包中的ReentrantLock锁详解篇
  • Java Collection接口解析
  • C++与C有什么不同
  • 数据集-目标检测系列- 狮子 数据集 lion >> DataBall
  • Python实战:高效连接与操作Elasticsearch的完整指南
  • [灵感源于算法] 链表类问题技巧总结
  • Ubuntu 实现可视化组raid和升级raid
  • Git 介绍、安装以及基本操作
  • 【PhysUnits】17.7 readme.md更新
  • 仓库物资出入库管理系统源码+uniapp小程序
  • 大模型笔记_检索增强生成(RAG)
  • 在 Azure 机器学习中注册 MLflow 模型
  • 汉诺塔 (easy)
  • Spark提交流程
  • JAVA毕业设计227—基于SpringBoot+hadoop+spark+Vue的大数据房屋维修系统(源代码+数据库)
  • PHP:互联网时代的常青编程语言
  • C++ 中的 iostream 库:cin/cout 基本用法
  • 绍兴公司做网站/搜索引擎提交入口大全
  • 有免费建站的网站吗/泰安seo培训
  • 建网站首页图片哪里找/网络营销的工具有哪些
  • 网站代码 输入文字 跳出内容/怎么给网站做优化
  • 怎么利用网站做外链接/品牌推广方案策划书
  • 都匀市城乡建设局网站/武汉网站建设方案优化