DBA_2PC_PENDING
Oracle会自动处理分布事务,保证分布事务的一致性,所有站点全部提交或全部回滚。一般情况下,处理过程在很短的时间内完成,根本无法察觉到。
但是,如果在commit或rollback的时候,出现了连接中断或某个数据库 站点CRASH的情况,则提交操作可能会无法继续,此时DBA_2PC_PENDING和DBA_2PC_NEIGHBORS中会包含尚未解决的分布事务。 对于绝大多数情况,当恢复连接或CRASH的数据库重新启动后,会自动解决分布式事务,不需要人工干预。只有分布事务锁住的对象急需被访问,锁住的回滚段阻止了其他事务的使用,网络故障或CRASH的数据库的恢复需要很长的时间等情况出现时,才使用人工操作的方式来维护分布式事务。 手工强制提交或回滚将失去二层提交的特性,Oracle无法继续保证事务的一致性,事务的一致性应由手工操作者保证
使用ALTER SYSTEM DISABLE DISTRIBUTED RECOVERY,可以使Oracle不再自动解决分布事务,即使网络恢复连接或者CRASH的数据库重新启动。
ALTER SYSTEM ENABLE DISTRIBUTED RECOVERY恢复自动解决分布事务。

Oracle解决异布lock的方法!
通常由于网络的不稳定或则数据库的 bug,在使用dblink时产生了异步lock,下面就谈谈异步lock的解决方法:
1)查询 dba_2pc_pending ,确定异步lock当前的状态。
select local_tran_id, global_tran_id, state, mix, host, commit#  fromdba_ 2pc_pending;

LOCAL_TRAN_ID|GLOBAL_TRAN_ID        |STATE    |MIX|HOST      |COMMIT#
-------------|----------------------|---------|---|----------|-------
1.10.255     |V817REP.BE.ORACLE.COM.|committed|no |BE-ORACLE-|202241
             |89f6eafb.1.10.255     |         |   |NT/bel449 |

此时通过state=committed, 表示此session已提 交,只是在提交后,接受不到global session的transaction信息了,所以产生异步lock,此时对一般不造成table的lock。
通过调用 execute DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('1.10.255'); 可解决此问题。
当然state还有以下几种状态:
collecting:在收集数据过程中,产生异常
解决方法: execute DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('1.10.255');

prepared: 在接受到异步commit/rollback指令前, 产生异常
解决方法: rollback force tran_id/commit force tran_id; -- 可根据异步transaction的状况决定使用方法。

forced rollback: 在使用rollback force出现
解决方法: execute DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('1.10.255');

forced commit:在使用commit force出现
解决方法: execute DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('1.10.255');

** NOTE1: If using Oracle 9i or later and DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY fails with
   ORA-30019: Illegal rollback Segment operation in Automatic Undo mode, use the following workaround

SQL> alter session set "_smu_debug_mode" = 4;
SQL>execute DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('local_tran_id');

测试 :
模拟的是分布式事务在2pc提交过程产生in-doubt 的问题解决方式
环境:orcl(ORCL01.TEST.COM),solo(ORCL02.TEST.COM) version 10.2.0.3
15:45:29sys@SOLO > drop public database link solo_link;

数据库链接已删除。

15:45:57sys@SOLO >  create public database link solo_link connect to scott identified by scott using 'solo';

数据库链接已创建。

15:46:18sys@SOLO > updateemp@solo_link set sal=sal*2 ;

15:46:38sys@SOLO > commit;
如果这个时候solo出现网络故障。orcl执行commit 被挂起,这个时候如果网络恢复则问题会自动解决。
而这时如果却执行了一个shutdown abort
再启动之后,这个时候查询scott.emp表会报错:
ERROR at line 1:
ORA-01591: lock held by in-doubt distributed transaction 5.32.251

这个时候查询dba_2pc_pending数据字典会看到5.32.251 的state是prepared
并且同过查询dba_2pc_neighbors知道该事务对应的database是pu_link.test.com对应的数据库
SQL> col local_tran_id format a13
SQL> col global_tran_id format a30
SQL> col state format a8
SQL> col mixed format a3
SQL> col host format a10
SQL> col commit# format a10
SQL> select local_tran_id, global_tran_id, state, mixed, host, commit#
2 from dba_2pc_pending;
LOCAL_TRAN_ID GLOBAL_TRAN_ID                            STATE       MIX   HOST       COMMIT#
--------------------   ------------------------------------------     --------      ---    ----------   ----------
5.32.251               ORCL.TEST.COM.8705ca3e.5.32.251  prepared         no    dg1          498537

SQL> col local_tran_id format a13
SQL> col in_out format a6
SQL> col database format a25
SQL> col dbuser_owner format a15
SQL> col interface format a3
SQL> select local_tran_id, in_out, database, dbuser_owner, interface
2 from dba_2pc_neighbors;

LOCAL_TRAN_ID IN_OUT DATABASE                  DBUSER_OWNER    INT
--------------------    --------- -------------------------     ------------------          ---
5.32.251             in                                                SYS                           N
5.32.251               out         PU_LINK.TEST.COM     SYS                           C

这时候就需要使用手动提交或回滚  commit或者rollback
根据state列的值prepared我们知道,orcl是prepared阶段,则solo肯定不能到commit阶段.
为了事务的一致性最好 rollback force '5.32.251';
            
select local_tran_id, global_tran_id, state, mixed, host, commit#
2 from dba_2pc_pending;

LOCAL_TRAN_ID GLOBAL_TRAN_ID                            STATE         MIX HOST       COMMIT#
-------------             -------------------------------------------       -----------     ---   ----------     ----------
5.32.251               ORCL01.TEST.COM.8705ca3e.5.32. forced rollback  no    dg1
                             251

DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('5.32.251');

DBA_2PC_PENDING相关推荐

  1. 2pc oracle dba_2pc_pending,dba_2pc_pending视图中的信息不清除会对以后有影响吗?如何根本解决问题?...

    oracle9206+solaris9 alert日志信息: Wed Jun 18 16:01:40 2008 Error 2068 trapped in 2PC on transaction 25. ...

  2. How To Resolve Stranded DBA_2PC_PENDING Entries [ID 401302.1]

    修改时间 21-NOV-2011     类型 BULLETIN     状态 PUBLISHED   Applies to: Oracle Server - Enterprise Edition - ...

  3. oracle添加语句 commit,Oracle COMMIT语句

    在Oracle中,COMMIT语句可以用来提交当前事务的所有更改.提交后,其他用户将能够看到您的更改.本文要为大家带来的就是COMMIT语句的用法. COMMIT语句语法: Oracle / PLSQ ...

  4. atomikos mysql,记一次 Atomikos 分布式事务的使用

    由于项目上的需要,我要同时往orcale数据库与sqlserver数据中插入数据,需要在一个事务之内完成这两个库的提交.参考了一下网上的各种JTA(Java Transaction API)实现之后, ...

  5. 浅述Oracle分布式事务概念

    着系统的复杂性不断增加,我们所面对的分布式系统渐渐增加.分布式文件系统.分布式消息队列系统等等层出不穷,在一些行业特别是互联网行业应用广泛.分布式数据库也是目前使用比较常用的分布式系统之一. 简单来说 ...

  6. 【转】错误: ORA-01591: 锁被未决分布式事务处理 7.2.428982 持有--解决方案

    SQL 错误: ORA-01591: 锁被未决分布式事务处理 7.2.428982 持有 01591. 00000 -  "lock held by in-doubt distributed ...

  7. 计算机报名显示事务已被锁死,ORA-01591错误处理: 锁定已被有问题的分配事务处理20.18.156406挂起(转载)...

    现象:dms中几乎所有的入库出库都报错 2005-12-10 09:12:53 [ERROR] com.topup.ent.kroraina.model.sysmgmt.usersqlquery.US ...

  8. ora-01591:锁被未分布式事物处理/Distrib tran

    伴随报错内容:         Distrib tran xxx.xxx.xx.x.xxxx          1.使用Oracle DBA用户,查询如下数据字典:select * from dba_ ...

  9. oracle回滚事务的关键字,Oracle ROLLBACK语句(回滚事务)

    Oracle ROLLBACK语句(回滚事务) 在Oracle中,ROLLBACK语句可以用来撤销当前事务或有问题的事务.本教程就将教大家如何使用ROLLBACK语句. ROLLBACK语法 ROLL ...

最新文章

  1. /* * 编程第三题(20分) 打印所有的水仙花数。所谓水仙花数是指一个三位数,其各位数字的立方和等于该数本身。(例153=1*1*1+3*3*3+5*5*5) */
  2. WebClient UI MVC data binding的实现
  3. 遍历磁盘扩展分区_win7系统如何创建磁盘管理扩展分区【图文教程】
  4. angularJs的继承
  5. postman接口测试:获取信息
  6. Cron表达式的正则表达式
  7. ASP.Net学习笔记011--ASP.Net揭秘之div版本自增
  8. 【Java例题】8.2 手工编写字符串统计的可视化程序
  9. 学python买什么书-19年学习Python有什么好的书籍推荐吗?
  10. ARP 地址分类 NAT技术
  11. 百度云上传本地图片到对象存储BOS——python版
  12. 【洛谷】P1428:小鱼比可爱
  13. redhat linux 系统修复,简述rhel7系统修复
  14. 2020年度个税汇算清缴怎么办理?直接上干货!
  15. 香港 - 寻找轻鬆攻略游(蒲台岛)
  16. 支付宝花呗提前还款————附操作图片
  17. 基于 STM32对音频数据的 Flash 读取与 DAC 播放
  18. 20189200余超 2018-2019-2 移动平台应用开发实践作项目代码分析
  19. Activity + Fragment 页面重叠问题
  20. yum php fpm5.6,烂泥:yum安装php5.6

热门文章

  1. 基于JavaEE的聊天室实现显示表情包图片
  2. 腾讯、百度、滴滴最新算法面经
  3. Android - LruCache
  4. 台哥算法练习 - 12345变为一万两千三百四十五
  5. 神策军丨转岗难 + 怕后悔?5 年老员工亲述转岗成功秘诀!
  6. Linux网络相关命令
  7. echarts饼图学习
  8. 详解三维重建立体匹配:视差计算和优化
  9. 《仙剑奇侠传3》流程攻略
  10. java有理数的除法运算,Java互评-有理数的设计