2015-04-19 1398 views
1

我們已經看到從DB2主機此以下情況除外:不會的QueryTimeout不SqlTransactionRollbackException工作。我們確實設置了CallableStatement.querytimeout,但在這種情況下它確實不起作用。有什麼建議麼?謝謝。DB2主機:SQLCODE = -911,SQLSTATE = 40001

DB2 SQL Error: SQLCODE=-911, SQLSTATE=40001, SQLERRMC=00C9008E;00000801;NULLID.SYSSTAT.5359534C564C3031, DRIVER=3.61.109; nested exception is com.ibm.db2.jcc.am.SqlTransactionRollbackException: DB2 SQL Error: SQLCODE=-911, SQLSTATE=40001, SQLERRMC=00C9008E;00000801;NULLID.SYSSTAT.5359534C564C3031, DRIVER=3.61.109

以下例外情況也是如此。查詢超時不起作用。

nested exception is com.ibm.db2.jcc.am.SqlException: UNSUCCESSFUL EXECUTION CAUSED BY AN UNAVAILABLE RESOURCE. REASON 00E30083, TYPE OF RESOURCE 00000802, AND RESOURCE NAME BINDLOCK

回答

0

這是一個超時等待鎖(BINDLOCK01到20)解鎖。

檢查你正在嘗試加載該表沒有被其他長期運行的工作做一個更新/插入鎖定/刪除查詢。

IBM Knowledge Center建議添加頻繁的提交操作在可能的情況。

Toad World提供了一些進一步的戰略優化鎖定時間:

Recommendation: ACQUIRE(USE) and RELEASE(DEALLOCATE) provide good concurrency when using page or row locking and to maximize performance.

To hold exclusive locks as short a time as possible, it is advisable to group INSERT, UPDATE, and DELETE statements together in a host language program followed by a COMMIT. If these SQL statements are interspersed with host language code, the locks are held while executing the host language code.

作爲最後的手段,如果你不想來優化您的查詢,並假設它不是僵局,你可以disable lock timemouts

在DB2 for * NIX/Windows上,將'LOCKTIMEOUT'參數更改爲'-1'。 (不知道它是一款面向z/OS,或潛在影響。)

歡迎堆棧溢出。

+0

感謝您的回覆,jabolotai。 – user3692238

+0

不客氣,希望它有助於解決您的問題。如果存在,請不要忘記標記爲正確的答案。 – aportr

+0

謝謝你的回覆,jabolotai。從Java應用程序開發人員的角度來看,我想我的問題是,查詢執行時會發生這些異常嗎?如果是,爲什麼我們沒有考慮從Java應用程序中設置的querytimeout設置。這裏的查詢是使用存儲過程調用讀取數據。 – user3692238

相關問題