У нас есть база данных, которую мы не можем восстановить, потому что любая изменить базу данных, чтобы перевести ее в режим single_user (или в автономный режим), не удастся, потому что она заблокирована распределенной транзакцией.
sp_lock -2 показывает следующее:
spid dbid ObjId IndId Type Resource Mode Status
-2 7 0 0 DB S GRANT
Так что явно что-то заблокировано.
exec sp_who2
не показывает соединений для этой базы данных.
select req_transactionUOW
from master..syslockinfo
where req_spid = -2
Ничего не возвращает (кроме обычного 00000000-0000-0000-0000-000000000000)
В координаторе MSDTC нет транзакций, помеченных как «сомнительные». Есть одна активная транзакция, но мы не можем зафиксировать или прервать ее, поскольку она не «вызывает сомнения».
Как нам принудительно снять эту блокировку? Или как отменить эту транзакцию в MSDTC
Оказывается, это ошибка в sql server 2016 и java-приложениях:
Для включения исправления необходимо включить флаг трассировки (3924)
Также есть ошибка с этим исправлением, поэтому убедитесь, что sql server обновлен до последней версии CU.
и дополнительное исправление для этого исправления
https://support.microsoft.com/en-us/help/4519668/fix-access-violation-occurs-when-you-enable-tf-3924-to-clean-orphaned
После обновления до SP2 CU10 и включения флага трассировки (3924) я больше не мог воспроизвести проблему.