提交过程发生异常错误血脂异常是怎么回事事?

Javasqlservernonxadcheckautocommitconnclosethread&服务器无法继续该事务 【&错误】原因--JAVA调用SQLSERVER存储过程时过程发生异常内部事务未提交_CTO技术网
&服务器无法继续该事务 &错误原因--JAVA调用SQLSERVER存储过程时过程发生异常内部事务未提交
&&& 通过JAVA调用SQLSERVER存储过程时,存储过程内部发生了类型转换异常,在类型转换异常发生之前已经将事务打开了,并且在类型转换那一行没有采用像如下错误处理:
&&& if @@error&&0 then
&&&&&&& goto err
&&& 导致了过程在发生异常的时候直接中断返回JAVA,此时过程内部的事务并没有提交,根据MICROSOFT的文档如果存储过程内部有事务并且事务没有提交,那么JAVA的事务也不会提交,JAVA的事务须在过程事务提交以后才会被提交。当前系统也采用了连接池,此时JAVA容器直接将没有提交事务的连接再次放回连接池中,这样就影响到了后续的交易,如果后续交易使用到了该连接就会报&无法提交事务&的异常,以下是我在博客园(/b/237188/)看到的一篇文章,对这样的错误讲得非常清楚:
&&&&&&&&&& 有个客户跟我说,他们把weblogic从923升级到923以后,总是提示failed to resume transaction的。当时没有看到任何信息,以为跟JTA超时有关,让客户把JTA timeout加大,同时把下面的设置加入jdbc-config.xml中。客户反馈过来说:还是不行。 :(&&&& &keep-xa-conn-till-tx-complete&true&/keep-xa-conn-till-tx-complete&&&& &rollback-local-tx-upon-conn-close&true&/rollback-local-tx-upon-conn-close&&&&&&&&&比较郁闷,后来想想,客户的jdbc是使用non-XA的driver, 同时将emulate-2pc设为了true,上面连个参数是针对XA的,测试没有效果应该是正常的。:)& 客户把具体错误信息给我发了过来,如下:####& 上午10时35分28秒 CST& &Error& &JDBC& &SZSEWEB-YSXAPP& &appServer11& &[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'& &&WLS Kernel&& && && &4& &BEA-001112& &Test "SELECT 1" set up for pool "szseWebDataSource" failed with exception: "java.sql.SQLException: [BEA][SQLServer JDBC Driver][SQLServer]服务器无法继续执行该事务。说明: 3c。".&&&&&&&&&&奇怪了,对于non-XA的connection, weblogic做测试的时候,应该是不会其transaction的,而且是直接拿底层的物理connection来做个select,怎么会有transaction resume呢? 是不是底层物理连接出现了问题? 跟客户沟通了一下,大概了解了他们的应用:通过jdbc调用SQL Server的stored procedure,而stored procedure中会起自己的transaction。 Tx中的操作分两种类型:1:业务简单,数据量大2:数据不大,但业务比较复杂总之,TX中的SQL执行时间比较长。&&&&&&&&开始怀疑跟客户的stored procedure有关,建议他先去掉里面的TX,果然奏效。因为transaction一直是我比较模糊的董东,也不敢跟客户说:你不能这么写,这么写是不可以的。毕竟自己底气不足啊。不是很清楚jdbc connection的auto commit提交的到底是哪个事务,是driver的tx,还是stored procedure里的tx。应该是前者吧。花了一上午,自己搭了个测试环境,终于复现了这个问题:存储过程:
1&create&proc&dbo.TestProc
3&begin&transaction
4&&&&&waitfor&delay&'00:02:00'
5&&&&&insert&into&dbo.TestT_1&values('test')
6&commitJDBC 代码:
&&1&package&com.bea.cs.test.
&&3&import&com.bea.cs.test.utils.JNDIR
&&4&import&java.sql.*;
&&5&import&java.io.*;
&&6&import&javax.transaction.*;
&&8&public&class&SQLServerJDBCTest&{
&10&&&&&public&static&void&main(String&args[])
&12&&&&&&&&&SQLServerJDBCTest&test&=&new&SQLServerJDBCTest();
&13&&&&&&&&&
&14&&&&&&&&&for(int&loop=0;&loop&15;&loop
&15&&&&&&&&&&&&&test.callProc("jdbc/SQLServerNonXADS",&loop);
&16&&&&&&&&&&&&&
&17&&&&&&&&&try{
&18&&&&&&&&&&&&&Thread.currentThread().sleep(10000);
&19&&&&&&&&&}catch(Exception&e){}
&20&&&&&&&&&
&21&&&&&&&&&for(int&loop=0;&loop&15;&loop
&22&&&&&&&&&&&&&test.checkAutoCommit("jdbc/SQLServerNonXADS");
&25&&&&&public&void&checkAutoCommit(String&dsName)
&27&&&&&&&&&CheckAutoCommitThread&cacThread&=&new&CheckAutoCommitThread(dsName);
&28&&&&&&&&&cacThread.start();
&31&&&&&class&CheckAutoCommitThread&extends&Thread
&33&&&&&&&&&private&String&dsName&=&
&34&&&&&&&&&
&35&&&&&&&&&public&CheckAutoCommitThread(String&ds){
&36&&&&&&&&&&&&&dsName&=&
&37&&&&&&&&&}
&38&&&&&&&&&
&39&&&&&private&void&callProc(String&dsName,&int&loop)
&41&&&&&&&&&ProcThread&procThread&=&new&ProcThread(dsName,&loop);
&42&&&&&&&&&procThread.start();
&45&&&&&class&ProcThread&extends&Thread
&47&&&&&&&&&private&String&ds&=&
&48&&&&&&&&&private&int&id&=&-1;
&49&&&&&&&&&
&50&&&&&&&&&public&ProcThread(String&dsName,&int&loop)
&51&&&&&&&&&{
&52&&&&&&&&&&&&&ds&=&dsN
&53&&&&&&&&&&&&&id&=&
&54&&&&&&&&&}
&55&&&&&&&&&
&56&&&&&&&&&public&void&run()
&57&&&&&&&&&{
&58&&&&&&&&&&&&&String&url&=&"t3://10.130.2.90:7001";
&59&&&&&&&&&&&&&String&sql&=&"{&call&TestProc()&}";
&60&&&&&&&&&&&&&Connection&conn&=&
&61&&&&&&&&&&&&&JNDIRetriver&retriever&=&new&JNDIRetriver(url);
&62&&&&&&&&&&&&&try{
&63&&&&&&&&&&&&&&&&&conn&=&retriever.getJBDCConnection(ds);
&64&&&&&&&&&&&&&&&&&boolean&autoCommit&=&conn.getAutoCommit();
&65&&&&&&&&&&&&&&&&&CallableStatement&cstmt&=&conn.prepareCall(sql);
&66&&&&&&&&&&&&&&&&&
&67&&&&&&&&&&&&&&&&&//start&a&thread&to&close&current&connection,&so&that&a&connection
&68&&&&&&&&&&&&&&&&&//that&attachs&a&tx&will&be&returned&to&connection&pool&and&when
&69&&&&&&&&&&&&&&&&&//it's&retrieved&from&connection&pool&by&other&client,&the&error
&70&&&&&&&&&&&&&&&&&//will&be&reproduced.
&71&&&&&&&&&&&&&&&&&ConnCloseThread&closeThread&=&new&ConnCloseThread(conn,&id);
&72&&&&&&&&&&&&&&&&&closeThread.start();
&73&&&&&&&&&&&&&&&&&long&start&=&System.currentTimeMillis();
&74&&&&&&&&&&&&&&&&&System.out.println(&"execute-"& &id& &"starts&at:&"& &start/1000.0);
&75&&&&&&&&&&&&&&&&&cstmt.execute();
&76&&&&&&&&&&&&&&&&&long&end&=&System.currentTimeMillis();
&77&&&&&&&&&&&&&&&&&System.out.println("statement&"& &id& &"&execute:&"& &(end-start)/1000.0);
&78&&&&&&&&&&&&&&&&&conn.close();
&79&&&&&&&&&&&&&}catch(Exception&e)
&80&&&&&&&&&&&&&{
&81&&&&&&&&&&&&&&&&&try{
&82&&&&&&&&&&&&&&&&&&&&&System.out.println("connection&is&closed&for&exception:&"& &e.getMessage());
&83&&&&&&&&&&&&&&&&&&&&&conn.close();
&84&&&&&&&&&&&&&&&&&}catch(Exception&e1){}
&85&&&&&&&&&&&&&&&&&e.printStackTrace();
&86&&&&&&&&&&&&&}
&87&&&&&&&&&}&&&&
&90&&&&&class&ConnCloseThread&extends&Thread
&92&&&&&&&&&private&Connection&connection&=&
&93&&&&&&&&&private&int&id&=&-1;
&94&&&&&&&&&
&95&&&&&&&&&public&ConnCloseThread(Connection&conn,&int&loop){
&96&&&&&&&&&&&&&connection&=&
&97&&&&&&&&&&&&&id&=&
&98&&&&&&&&&}
&99&&&&&&&&&
100&&&&&&&&&public&void&run()
101&&&&&&&&&{
102&&&&&&&&&&&&&try{
103&&&&&&&&&&&&&&&&&Thread.currentThread().sleep(10000);
104&&&&&&&&&&&&&&&&&//connection.rollback();
105&&&&&&&&&&&&&&&&&long&start&=&System.currentTimeMillis();
106&&&&&&&&&&&&&&&&&System.out.println(&"closeConn-"& &id& &"starts&at:&"& &start/1000.0);
107&&&&&&&&&&&&&&&&&connection.close();
108&&&&&&&&&&&&&&&&&long&end&=&System.currentTimeMillis();
109&&&&&&&&&&&&&&&&&System.out.println("close&connection&"& &id& &"&takes:&"& &(end&-start)/1000.0);
110&&&&&&&&&&&&&}catch(Exception&e){}
111&&&&&&&&&}
115&&&&&&&& 测试结果和预想的有点出入:ConnCloseThread中关闭连接的时候,不是立刻返回的。Connection.close()会触发mit(),而因为调用的存储过程中,存储过程起了自己的事务,mit()必须等到存储过程结束才能完成(这个是microsoft论坛上看到的)。如果所有connection.close()都等到tx commit或rollback完成才执行的话,这个问题就不会出现了。看看我的测试结果:statement 5 execute:表示从存储过程调用开始,到调用返回的时间close connection 5 takes:表示关闭连接耗费的时间(也就是mit()等待存储过程事务结果的时间)statement 5 execute: 125.922close connection 5 takes: 148.39statement 14 execute: 130.031close connection 14 takes: 148.39statement 2 execute: 134.031close connection 2 takes: 148.39statement 6 execute: 138.14close connection 6 takes: 148.406statement 8 execute: 142.14close connection 8 takes: 148.406statement 0 execute: 146.156close connection 0 takes: 148.406statement 3 execute: 162.39close connection 3 takes: 168.625statement 11 execute: 166.39close connection 11 takes: 168.625
statement 13 execute: 120.0close connection 13 takes: 115.359statement 12 execute: 150.265close connection 12 takes: 148.406statement 9 execute: 154.281close connection 9 takes: 148.406statement 1 execute: 158.39close connection 1 takes: 148.406statement 4 execute: 170.5close connection 4 takes: 168.625statement 10 execute: 174.515close connection 10 takes: 168.625statement 7 execute: 178.609close connection 7 takes: 168.625
####&Oct 28, :26 PM CST& &Error& &JDBC& &fjin01& &AdminServer& &[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'& &&anonymous&& && && &2& &BEA-001112& &Test "SELECT 1" set up for pool "SQLServerNonXADS" failed with exception: "java.sql.SQLException: [BEA][SQLServer JDBC Driver][SQLServer]The server failed to resume the transaction. Desc:3b.".&####&Oct 28, :26 PM CST& &Error& &JDBC& &fjin01& &AdminServer& &[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'& &&anonymous&& && && &2& &BEA-001112& &Test "SELECT 1" set up for pool "SQLServerNonXADS" failed with exception: "java.sql.SQLException: [BEA][SQLServer JDBC Driver][SQLServer]The server failed to resume the transaction. Desc:3e.".&####&Oct 28, :26 PM CST& &Error& &JDBC& &fjin01& &AdminServer& &[ACTIVE] ExecuteThread: '31' for queue: 'weblogic.kernel.Default (self-tuning)'& &&anonymous&& && && &2& &BEA-001112& &Test "SELECT 1" set up for pool "SQLServerNonXADS" failed with exception: "java.sql.SQLException: [BEA][SQLServer JDBC Driver][SQLServer]The server failed to resume the transaction. Desc:.".&####&Oct 28, :26 PM CST& &Error& &JDBC& &fjin01& &AdminServer& &[ACTIVE] ExecuteThread: '4' for queue: 'weblogic.kernel.Default (self-tuning)'& &&anonymous&& && && &2& &BEA-001112& &Test "SELECT 1" set up for pool "SQLServerNonXADS" failed with exception: "java.sql.SQLException: [BEA][SQLServer JDBC Driver][SQLServer]The server failed to resume the transaction. Desc:3a.".&####&Oct 28, :26 PM CST& &Error& &JDBC& &fjin01& &AdminServer& &[ACTIVE] ExecuteThread: '29' for queue: 'weblogic.kernel.Default (self-tuning)'& &&anonymous&& && && &2& &BEA-001112& &Test "SELECT 1" set up for pool "SQLServerNonXADS" failed with exception: "java.sql.SQLException: [BEA][SQLServer JDBC Driver][SQLServer]The server failed to resume the transaction. Desc:.".&####&Oct 28, :26 PM CST& &Error& &JDBC& &fjin01& &AdminServer& &[ACTIVE] ExecuteThread: '19' for queue: 'weblogic.kernel.Default (self-tuning)'& &&anonymous&& && && &2& &BEA-001112& &Test "SELECT 1" set up for pool "SQLServerNonXADS" failed with exception: "java.sql.SQLException: [BEA][SQLServer JDBC Driver][SQLServer]The server failed to resume the transaction. Desc:.".&####&Oct 28, :26 PM CST& &Error& &JDBC& &fjin01& &AdminServer& &[ACTIVE] ExecuteThread: '20' for queue: 'weblogic.kernel.Default (self-tuning)'& &&anonymous&& && && &2& &BEA-001112& &Test "SELECT 1" set up for pool "SQLServerNonXADS" failed with exception: "java.sql.SQLException: [BEA][SQLServer JDBC Driver][SQLServer]The server failed to resume the transaction. Desc:3f.".&
&&&&&&&&从测试结果来看,凡是close connection耗时比execute statement短的,连接(物理连接)都会报出该问题。分析原因:通过weblogic datasource获取的connection并不是物理connection,而是由weblogic wrapped的connection。这些conection在被close后,并不会关闭物理连接,而只是将物理连接还池。我们对connection的所有操作,最终都会被delegated到底层物理连接上,即commit(),rollback()最终都是在物理连接上执行。如果上面的connection.close(),底层物理连接没有等到存储过程事务结束就返回的话,那么物理连接上应该还带有此次操作的事务,而weblogic这边不会关系物理连接的情况,直接将连接放入connection pool供其它客户端使用。这时候如果设定了test on reserve的话,下次客户端从data source获取连接时,weblogic会检查这个物理连接,作一个select操作的,这个有问题的连接就会暴露出来,也就是上面的异常。这个问题如果使用driver manager来获取连接的话(如果每次都关闭的话),则不会出现,因为使用的物理连接每次都是不同的。还好,weblogic会帮忙重新创建有问题的连接。原因大概了解了,但这是谁的问题呢? 为什么connection.close()不等存储过程的事务结束?&&&&&&&&结论:一般而言,我们不建议通过JDBC调用存储过程的时候,在存储过程中定义事务,应该将tx的管理工作交给jdbc去做。 non-xa如此,xa亦如此,毕竟事务嵌套了以后,管理起来是个问题,完整性更是个问题。
如果文章对你用,请支持万事如意网址导航。
[责任编辑:linzhao]
(请登录发言,并遵守)我来说两句:验证码 &&请照此输入(点击图片刷新验证码)&&&&最多输入10000个字符最佳答案:
  809的错误原因是:证书还没有到有效开始时间。如果做了延期或者是新发证书,请用户等待2~3分钟后再使用。&&2人赞同
其它答案:共0条相关内容等待您来回答5219813124编辑推荐财税资讯会计中心税务中心财税问答政策法规共享中心产品服务会计人生互动交流论坛精华怎么回事啊,提交订单时显示:“内部错误,订单生成失败,错误码为:ERROR:此优惠券已经被使用过了,请联系乐服务热线400-696-5566”80—?_回龙观社区网
《购物天地》显示文章详细内容:
等&&&&级:正式居民
经&验&值:234
魅&力&值:56
龙&&&&币:206
积&&&&分:183.4
注册日期:
怎么回事啊,提交订单时显示:“内部错误,订单生成失败,错误码为:ERROR:此优惠券已经被使用过了,请联系乐服务热线400-696-5566”80—?
&&此文章已经被查看0次 &&
&相关文章:
-&(19228字节&阅读:4195次&跟贴:124
-&(阅读:178次& 10:27)
-&(阅读:262次& 10:28)
-&(阅读:163次& 10:28)
-&(阅读:249次& 10:28)
-&(阅读:187次& 10:28)
-&(阅读:142次& 10:30)
-&(阅读:170次& 10:35)
-&(阅读:199次& 10:40)
-&(阅读:205次& 10:45)
-&(阅读:202次& 10:54)
-&(阅读:203次& 10:55)
-&(阅读:187次& 10:58)
-&(阅读:180次& 10:34)
-&(阅读:179次& 10:34)
-&(阅读:150次& 10:35)
-&(阅读:142次& 10:36)
-&(阅读:202次& 10:36)
-&(阅读:125次& 10:36)
-&(阅读:187次& 10:36)
-&(阅读:176次& 10:37)
-&(阅读:178次& 10:37)
-&(阅读:202次& 10:38)
-&(27字节&阅读:1006次& 10:38)
-&(阅读:220次& 10:38)
-&(阅读:190次& 10:39)
-&(9字节&阅读:176次& 10:42)
-&(阅读:187次& 10:43)
-&(阅读:183次& 10:44)
-&(阅读:177次& 10:45)
-&(阅读:220次& 10:46)
-&(阅读:165次& 10:46)
-&(阅读:265次& 10:47)
-&(阅读:252次& 10:48)
-&(阅读:246次& 10:48)
-&(阅读:236次& 10:49)
-&(阅读:165次& 10:49)
-&(阅读:331次& 10:50)
-&(阅读:164次& 10:50)
-&(阅读:186次& 10:50)
-&(阅读:190次& 10:52)
-&(阅读:1896次& 10:53)
-&(阅读:232次& 10:55)
-&(阅读:191次& 10:55)
-&(阅读:157次& 10:54)
-&(阅读:207次& 10:54)
-&(阅读:185次& 10:55)
-&(阅读:193次& 10:57)
-&(阅读:231次& 11:00)
-&(阅读:239次& 11:01)
-&(阅读:230次& 11:05)
-&(阅读:348次& 11:15)
-&(阅读:175次& 11:11)
-&(阅读:176次& 11:12)
-&(阅读:183次& 12:07)
-&(阅读:204次& 11:14)
-&(阅读:158次& 11:16)
-&(阅读:246次& 11:18)
-&(阅读:226次& 11:25)
-&(阅读:197次& 11:46)
-&(阅读:179次& 11:24)
-&(阅读:168次& 11:28)
-&(阅读:162次& 11:54)
-&(阅读:249次& 12:34)
-&(阅读:169次& 12:39)
-&(42字节&阅读:195次& 13:12)
-&(阅读:198次& 13:16)
-&(阅读:196次& 13:19)
-&(阅读:197次& 13:23)
-&(阅读:273次& 13:26)
-&(阅读:186次& 13:35)
-&(阅读:230次& 13:42)
-&(阅读:211次& 13:45)
-&(阅读:240次& 13:50)
-&(阅读:174次& 13:51)
-&(阅读:254次& 14:04)
-&(阅读:145次& 14:00)
-&(阅读:210次& 14:03)
-&(阅读:158次& 14:03)
-&(阅读:220次& 14:04)
-&(阅读:179次& 14:06)
-&(阅读:162次& 14:13)
-&(阅读:208次& 14:07)
-&(阅读:192次& 14:07)
-&(阅读:198次& 14:09)
-&(阅读:174次& 14:11)
-&(阅读:187次& 14:20)
-&(阅读:411次& 14:19)
-&(阅读:202次& 14:21)
-&(阅读:182次& 14:33)
-&(阅读:199次& 14:35)
-&(阅读:211次& 14:37)
-&(阅读:322次& 14:39)
-&(阅读:209次& 14:43)
-&(阅读:268次& 14:44)
-&(阅读:158次& 14:48)
-&(阅读:265次& 14:49)
-&(阅读:183次& 14:50)
-&(阅读:191次& 14:55)
-&(阅读:172次& 14:59)
-&(阅读:186次& 14:58)
-&(87字节&阅读:203次& 15:00)
-&(阅读:196次& 15:01)
-&(阅读:170次& 15:05)
-&(阅读:408次& 15:04)
-&(阅读:185次& 15:21)
-&(阅读:193次& 15:23)
-&(阅读:221次& 15:26)
-&(阅读:164次& 15:28)
-&(阅读:175次& 15:33)
-&(阅读:170次& 15:44)
-&(阅读:320次& 15:47)
-&(阅读:200次& 15:54)
-&(阅读:165次& 15:58)
-&(阅读:212次& 15:57)
-&(阅读:167次& 16:01)
-&(阅读:237次& 16:11)
-&(阅读:187次& 16:02)
-&(阅读:250次& 16:05)
-&(阅读:210次& 16:14)
-&(阅读:196次& 16:19)
-&(阅读:272次& 16:20)
-&(阅读:174次& 16:23)
-&(阅读:206次& 16:30)
-&(阅读:174次& 19:12)
您必须登录论坛才可以发表文章:
记住密码:
京ICP证040069号 昌公网安备号 法律顾问:所有回答(1)
建议将完整的错误信息贴出来
园豆:32224
园豆:32224
&&&您需要以后才能回答,未注册用户请先。}

我要回帖

更多关于 dns异常是怎么回事 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信