Applies To
SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Standard SQL Server 2008 Enterprise SQL Server 2008 Developer SQL Server 2008 Express

狀況

當您使用 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物件,與交易管理員並不會設定的交易逾時值。在此情況下,外部應用程式可用來將交易逾時設定為新的預設值。這個新的預設值將用於所有其他未指定交易逾時的交易。

Need more help?

Want more options?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。