应用对象
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 之间的连接丢失时未准备好的交易记录,则 SQL Server JDBC 驱动程序不会不清理这些交易记录,并且他们可能会继续使用资源并阻止其他事务。由于 SQL Server 的 XA 实现 JDBC 驱动程序中,SQL Server 无法检测异常的事务管理器断开。因此,SQL Server 为这些交易记录保留系统中直到 XA 事务超时或重新启动数据库。超时的 SQL Server 实例上使用无穷,并且不可配置数据库上。

解决方法

若要解决此问题,请使用下列方法之一:

  • 重新启动数据库服务器,当您遇到任何 Java 虚拟机 (JVM) 崩溃或网络连接问题,导致在这些孤立的事务。

  • 分别以清理其资源的数据库上停止孤立的事务。若要验证事务孤立的请确保它不是在怀疑 (准备) 或一个目前完成事务。JVM 并成功恢复周期最后通过重新启动相关的任何事务应被孤立。

  • 设置超过最长事务以使其停止超过超时值时,就立即对 XA 事务的超时值。您可以通过调用XAResource.setTransactionTimeout()方法来执行此操作。

  • 对于许多第三方事务经理,由调用代码不直接访问XAResource对象和事务管理器不会设置事务超时值。在这种情况下,外部应用程序可用于将事务超时时间设置为新的默认值。此新的默认设置将适用于所有未指定事务超时的事务。

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。