Как предотвратить зависание транзакций SQL Server? - PullRequest
0 голосов
/ 02 ноября 2018

Я использую удаленные соединения для соединения клиента и сервера, после 6 месяцев бесперебойной работы транзакция зависла, возможно, из-за обрыва соединения во время выполнения транзакции.

Как можно предотвратить зависание транзакции в случае потери соединения? Разве SQL не должен отменять транзакцию, если через некоторое время не завершится?

UPDATE:

Я использую изоляцию SQL Server по умолчанию (чтение передано), и это способ ее репликации:

Я попытался установить SET XACT_ABORT, как было предложено, но не повезло, проблема остается, это последовательность событий, чтобы повторить эту проблему:

  1. Установите точку останова в середине транзакции и начните отладки

  2. Как только транзакция достигла точки останова, отключите компьютер из сети (симуляция произошла ненормально разъединение)

  3. Продолжите отладку процесса и подождите, пока .NET SqlClient киньте ошибку (нет сети)

  4. Подключите ПК к сети (имитация подключения к интернету возвращается)

  5. SQL Server не завершает или не выполняет откат транзакции, поэтому таблицы, используемые в первой середине транзакции, заблокированы

1 Ответ

0 голосов
/ 02 ноября 2018

Вам необходимо установить значение XACT_ABORT, если ON, если инструкция Transact-SQL вызывает ошибку во время выполнения, вся транзакция завершается и откатывается.

Проверьте его ссылку для получения дополнительной информации

! https://docs.microsoft.com/en-us/sql/t-sql/statements/set-xact-abort-transact-sql?view=sql-server-2017

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...