Симптомы

При использовании транзакций XA, драйвер JDBC Microsoft SQL Server и Microsoft SQL Server в качестве серверной базы данных вы может изолированы незавершенных транзакций в SQL Server Если диспетчер транзакций обнаруживает сбой или проблемы с подключением.

Кроме того возможно возникновение следующих распространенных проблем:

  • Ожидающих транзакций в течение длительного времени на экземпляре SQL Server. Они могут иметь значение null или -2 идентификатора сеанса в базе данных.

  • Операции заблокированы в течение длительного времени транзакцией, которая имеет идентификатор сеанса -2 . В этом случае время ожидания блокировки и потоки для закрепления.

Причина

Если между SQL Server и диспетчер транзакций теряется сетевое подключение для неподготовленных транзакции, то драйвер JDBC для SQL Server не обеспечивает очистки этих операций, и они могут продолжать использовать ресурсы и не дает другим транзакциям. Из-за реализации XA драйвера JDBC для SQL Server SQL Server не удается обнаружить непредвиденного отключения диспетчеров транзакций. Таким образом для SQL Server, эти транзакции остаются в системе до тайм-аут транзакции XA или перезапуска базы данных. Тайм-аут использует бесконечности на экземпляре SQL Server, а не настраивается в базе данных.

Временное решение

Чтобы устранить эту проблему, используйте один из следующих методов:

  • Перезапустите сервер базы данных при возникновении сбоев любой виртуальной машины Java (JVM) или подключения к сети в силу своей эти потерянные транзакции.

  • По отдельности остановите потерянные транзакции в базе данных, чтобы очистить свои ресурсы. Чтобы убедиться, что транзакция считается потерянной, убедитесь в том, что он не в состоянии под сомнением (Подготовка) или тот, который в настоящее время завершения транзакции. Все транзакции, которые последнего до перезапуска связанного JVM и успешное восстановление цикла следует потерянными.

  • Задайте значение времени ожидания транзакций XA, длина которого превышает длинной операции принудительной остановки сразу же превышает значение времени ожидания. Это можно сделать, вызвав метод XAResource.setTransactionTimeout() .

  • Для многих руководителей независимых транзакций объект XAResource не доступно для непосредственно вызывающего кода и диспетчер транзакций не устанавливает значение тайм-аута транзакции. В этом случае можно использовать внешнее приложение присвоено новое значение по умолчанию времени ожидания транзакции. Это новое значение по умолчанию будет использоваться все транзакции, которые не задан тайм-аут транзакции.

Нужна дополнительная помощь?

Совершенствование навыков
Перейти к обучению
Первоочередный доступ к новым возможностям
Присоединение к программе предварительной оценки Майкрософт

Были ли сведения полезными?

Насколько вы удовлетворены качеством перевода?
Что повлияло на вашу оценку?

Спасибо за ваш отзыв!

×