Weblogic执行transaction recover碰到的奇怪问题

这几天做transaction recover测试的时候,发现个很难理解的问题。

具体问题场景如下:

1:一个standby client程序,调用userTransaction.begin()后,顺序操作两个XA resource,这两个resource为同一个Oracle database, 不过操作使用的connection来源于不同的data source。connection1向表test中插入一条数据,connection2向表test1中插入一条数据。最后执行 userTransaction.commit()。

2:userTransaction.commit()执行的时,需要执行两阶段提交,首先是global prepare,如果所有的resource都prepare ok的话,weblogic这时候会写入tx record(写入到tlog中)。然后执行global commit。测试过程中,在执行完global prepare后,在global commit处设定break point,然后停止database。数据库停止后,去除global commit的break point, 此时weblogic需要向每个resource发出commit指令。因为部分resource此时是unavailable的,weblogic无法收到每个resource commit完成的响应,该tx信息会一直保存在tlog中,等待server重起的时候recover。

3:按照正常逻辑global prepare完成后,该tx应该是只能commit,而不能rollback的,但在测试中发现,weblogic在recover的时候 ,会去rollback这个tx。

下面是测试中记录的数据信息。

1:数据库重起后,weblogic重起前,可以看到database中该tx信息如下:

2:weblogic tlog中的信息,

+------------------------------------------------------------------------------+
| Transaction Log Dump |                                                       |
+------------------------------------------------------------------------------+
| Class Name = weblogic.transaction.internal.ResourceCheckpoint                |
| Object = ResourceCheckpoint={OracelXADS, OracleXADS1}                        |
+------------------------------------------------------------------------------+

时间: 2024-10-28 05:20:34

Weblogic执行transaction recover碰到的奇怪问题的相关文章

[20121227]dataguard下执行延迟recover的问题.txt

[20121227]dataguard下执行recover managed standby database disconnect from session delay 720.txt recover managed standby database disconnect from session delay 720 ;alter database recover managed standby database disconnect from session delay 720 ; 100.3

国内首位中间件Oracle ACE:WebLogic执行线程耗尽解决方案

作者介绍 王超,国内第一位中间件ORACLE ACE,东方宏达中间件技术总监,原ORACLE|BEA 资深中间件现场支持工程师,14年现场支持工作经验,WebLogic 6.1/7.0/8.1/9.2/10.3/11g/12c.Tuxedo技术认证专家.深厚的中间件架构规划.性能调优.问题解决经验,常年为为电信.金融等领域客户提供现场技术支持. 1WebLogic执行线程耗尽 1.1.概述  WebLogic服务器执行线程耗尽后就不再响应后续请求,WebLogic即出现挂起现象. WebLogi

一个Webservice执行Oracle SQL带参数奇怪的问题

问题描述 在webservice中遇到一个很奇怪的问题,(1)SQL直接赋值的方式,SQL执行很快,sSQL="SELECTCOL1,COL2FROMTABELWHERECOL3='"+sData+"'";DataSetdsTemp=newDataSet();dsTemp=Common.ExecuteSQL(sSQL);(2)SQL用参数的方式,哪怕是最简单的SQL执行都需要5秒以上,这样就是很奇怪了,SQL语句执行,一般都建议使用参数形式,现在使用参数反而执行速度

java执行bat命令碰到的阻塞问题的解决方法_java

使用Java来执行bat命令,如果bat操作时间过长,有可能导致阻塞问题,而且不会执行bat直到关闭服务器.如: 复制代码 代码如下: Runtime r=Runtime.getRuntime();          Process p=null;          try{              String path = "D:/test.bat";       p = r.exec("cmd.exe /c  "+path);       p.waitFor

C# menustrip碰到的奇怪问题

问题描述 C#大家有没有碰到这样的问题,MDI子窗体里放一个MENUSTRIP,运行时,发现子窗体的MENUSTRIP显示到父窗体上了,而子窗体放置menustrip的位置是空的.怎么才能让子窗体上的menustrip正常显示! 解决方案 解决方案二:MDI主窗口的menuStrip1的AllowMerge设置为false就不会和子窗口的菜单合并了解决方案三:是啊融合一块去了

Java泛型使用中碰到的奇怪问题

先上代码 public class HackingGeneric { static class Base { } interface A<T> { void save(T t); } interface B { void save(Base t); } interface C extends A<Base>, B { } static class D implements C { @Override public void save(Base base) {} } public s

碰到个奇怪的问题连接数据库的

问题描述 我所连接的数据库不是在工作目录下的config/database.yml 中的database:+上要连得库.这样就可以.连到那个库里的嘛我什么我先前作过1个mybook的例子连接mybook这个库.然后重新用RAILS SQL大开个文档将里面的database.yml中所要连接的database:后修改掉换成我要连接的库aaa 但我发现他连的还是先前mybook这个库这是怎么回事是我理解错了连接库不是在atabase.yml中改的还是怎么回事 问题补充:哎就是数据库改不过来头大了 解

Weblogic中因为IP变更导致SubCoordinator not available,Transaction Rollba

Weblogic中因为IP变更导致SubCoordinator not available,Transaction RollbackException问题调查 这几天在做一些Transaction方面的研究,碰到一个诡异的问题.问题大概是这样的,之前我的测试一直在公司做,今天把工作带到家里了,结果因为如下问题,导致我没法工作了. weblogic.transaction.RollbackException: SubCoordinator 'server_2+10.182.216.189:7021

关于Weblogic中XAER_NOTA XAException的两种解释

某些时候,在weblogic执行XA操作的时候,我们会碰到如下的错误: java.sql.SQLException: Unexpected exception while enlisting XAConnection java.sql.SQLException: XA error: XAER_NOTA : The XID is not valid start() failed on resource 'weblogic.jdbc.jta.DataSource': XAER_NOTA : The