狀況
當您使用 XA 交易、 Microsoft SQL Server JDBC 驅動程式,與 Microsoft SQL Server 與後端資料庫時,您可能已遺棄待在 SQL Server 上執行的交易如果交易管理員發生當機或連線問題。
此外,可能會遇到下列常見的徵狀︰
-
擱置的交易,則 SQL Server 的執行個體上一段時間。它們可能會有空值或-2的工作階段 ID,在資料庫中。
-
交易被封鎖一段時間的交易時發生-2的工作階段 id。這會導致鎖定逾時 」 或 「 若要凍結的執行緒。
原因
如果 SQL Server JDBC 驅動程式不會清除這些交易,然後就能繼續使用資源,並封鎖其他交易,交易管理員與 SQL Server 之間的連線將會遺失未準備的交易。因為 SQL Server 的 XA 實作 JDBC 驅動程式中,SQL Server 無法偵測異常的中斷連線的交易管理員。因此,SQL Server 的這些交易之前留在系統中 XA 交易逾時或在重新啟動資料庫。逾時的 SQL Server 執行個體上使用的無限值,而且不可以在資料庫上設定。
因應措施
若要解決這個問題,請使用下列方法之一︰
-
當您遇到任何 JAVA 虛擬機器 (JVM) 當機或網路連線問題,導致這些被遺棄的交易時,請重新啟動資料庫伺服器。
-
清除其資源資料庫上,個別停止成為孤兒的交易。確認交易遭遺棄,,請確定它不是疑問 (已備妥) 或一個目前完成的交易。任何 JVM 和成功的復原週期,最後透過重新啟動相關的交易應該被孤立出來。
-
設定對 XA 異動逾時值超過您最長的交易,才能迫使他們停止,一旦超過逾時值。您可以藉由呼叫XAResource.setTransactionTimeout()方法來這麼做。
-
許多協力廠商的交易管理員,呼叫程式碼無法直接存取XAResource物件,與交易管理員並不會設定的交易逾時值。在此情況下,外部應用程式可用來將交易逾時設定為新的預設值。這個新的預設值將用於所有其他未指定交易逾時的交易。