美文网首页
分布式事务回滚

分布式事务回滚

作者: Reiko士兵 | 来源:发表于2019-07-29 16:57 被阅读0次
  1. 分布式事务
  2. ORA-01453
一、起因

用户请求批量回滚分布式事务,发来查询sql如下:

SELECT 'rollback force '''
       || local_tran_id
       || ''';'
FROM   dba_2pc_pending
WHERE  db_user = '&username'
       AND state = 'collecting';

随后查出来一百多条结果,执行其中的返回语句,发现会话hang住了,另开一窗口查询hang住的会话的等待事件,为“free global transaction table entry”。

二、解决方案

设置隐藏参数

alter system set "_smu_debug_mode" = 4;commit;

构造批量处理的查询函数

--后面的commit很重要,去掉会报ora-01453
SELECT 'exec DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('''
       || LOCAL_TRAN_ID
       || '''); commit;'
FROM   dba_2pc_pending
WHERE  db_user = '&username'
       AND state = 'collecting';

执行结束后将隐藏参数改回

alter system set "_smu_debug_mode" = 0;commit;
三、总结

状态为 collecting 的分布式事务无需 rollback force 即可purge清除,状态为 prepared 的分布式事务需要先 rollback force 才能purge。

相关文章

  • 分布式事务回滚

    分布式事务 ORA-01453 一、起因 用户请求批量回滚分布式事务,发来查询sql如下: 随后查出来一百多条结果...

  • seata源码阅读-AT模式

    demo用例 角色划分:TM: 事务管理,开启、提交、回滚分布式事务RM: 资源管理,注册、汇报、执资源,负责接收...

  • 事务相关的问题总结

    一、事务回滚问题 二、事务失效问题 三、事务失效的解决办法 方式一:自己手动创建事务,提交事务,回滚事务(Spri...

  • laravel transaction 数据库事务

    laravel 提供专门的闭包的数据库事务,可以自动回滚事务也可以手动回滚事务

  • @Transactional 解析与限制场景

    列表1事务不会回滚列表2事务不会回滚@Transactional 注解解析定义@Target({ElementTy...

  • mysql 事务回滚,online ddl

    回滚当事务中有DDL时,事务回滚会出错,当事务中只有DML时,回滚一般不会出问题DDL:新建表等操作DML:数据插...

  • 事务回滚

    情况1:如果没有在程序中手动捕获异常 情况2:如果在程序中自己捕获了异常 现在如果我们需要手动捕获异常,并且也希望...

  • seata代码控制回滚和临时挂起分布式事物

    一、说明 此处只是简单的记录一下,使用了 Seata后,如何手动 回滚分布式事物和临时挂起分布式事务,Seata的...

  • 数据库 | MySQL | 8. 事务

    begin:开启事务commit:确认/提交事务rollback:回滚事务

  • junit 单元测试事务自动回滚

    junit 单元测试事务会自动回滚。通过@Rollback(true)注解来实现,默认是true,事务会回滚,可以...

网友评论

      本文标题:分布式事务回滚

      本文链接:https://www.haomeiwen.com/subject/yhzbrctx.html