2009-11-09 42 views
0

有時我得到執行存儲過程時從SQL Server 2005以下內容:SQL Server 2005中 - 無法恢復嵌套事務

 
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Cannot roll back T1. No transaction or savepoint of that name was found. 
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(Unknown Source) 
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source) 
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(Unknown Source) 
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(Unknown Source) 
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(Unknown Source) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(Unknown Source) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(Unknown Source) 
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(Unknown Source) 
    at com.mchange.v2.c3p0.impl.NewProxyCallableStatement.executeUpdate(NewProxyCallableStatement.java:2160) 
    at com.sm.persistence.dao.TransactionRejectDAO.callSpMoveTransaction(TransactionRejectDAO.java:631) 
    ... 6 more 

任何想法?

當連接池機制試圖關閉準備語句:

 
Nov 9, 2009 9:32:55 AM com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement close 
WARNING: SQLServerPreparedStatementID:201 (ConnectionID:139 TransactionID:0x1A00000039000000): Error (ignored) closing PreparedHandle:0 
com.microsoft.sqlserver.jdbc.SQLServerException: The server failed to resume the transaction. Desc:390000001a. 
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source) 
    at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(Unknown Source) 
    at com.microsoft.sqlserver.jdbc.TDSParser.parse(Unknown Source) 
    at com.microsoft.sqlserver.jdbc.TDSParser.parse(Unknown Source) 
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$1PreparedHandleClose.doExecute(Unknown Source) 
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(Unknown Source) 
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(Unknown Source) 
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(Unknown Source) 
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.closePreparedHandle(Unknown Source) 
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.close(Unknown Source) 
    at com.mchange.v1.db.sql.StatementUtils.attemptClose(StatementUtils.java:41) 
    at com.mchange.v2.c3p0.stmt.GooGooStatementCache.synchronousDestroyStatement(GooGooStatementCache.java:413) 
    at com.mchange.v2.c3p0.stmt.GooGooStatementCache.closeAll(GooGooStatementCache.java:351) 
    at com.mchange.v2.c3p0.impl.NewPooledConnection.closeAllCachedStatements(NewPooledConnection.java:673) 
    at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:543) 
    at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:234) 
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:470) 
    at com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask.run(BasicResourcePool.java:964) 
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547) 
Nov 9, 2009 9:32:55 AM com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement close 
WARNING: SQLServerPreparedStatementID:186 (ConnectionID:139 TransactionID:0x1A00000039000000): Error (ignored) closing PreparedHandle:0 

該存儲的過程包含嵌套事務T1我相信這是不必要的。這可能是問題嗎?

感謝

回答

1

第一個錯誤是由於這樣的事實,你有一個名爲您嘗試回滾到嵌套事務 - 命名嵌套事務(命名方式輸入類似「BEGIN TRANSACTION」,這在你的情況= T1)是允許的,但不支持回滾到一個命名的嵌套事務並導致錯誤。

有關更多信息,請參閱this主題。

+0

謝謝。我會改變它並讓你知道 – DaTroop 2009-11-10 08:12:32

1

如果您必須回滾嵌套事務,則可以使用SAVE事務。 見here