Как избежать взаимоблокировки при отключении фиксации моментального снимка в SQL Server?

Для сценария тестирования мне нужно отключить моментальный снимок чтения на экземпляре сервера SQL. После теста мне нужно отменить изменения. Я использую оператор IF, чтобы определить, какое действие выполнить. Вот скрипт, который я использую:

USE [master]
GO

IF 'Mycondition'
BEGIN
    ALTER DATABASE [MyDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    ALTER DATABASE [MyDB] SET READ_COMMITTED_SNAPSHOT OFF WITH NO_WAIT
    ALTER DATABASE [MyDB] SET MULTI_USER WITH NO_WAIT
END
ELSE
BEGIN
    ALTER DATABASE [MyDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    ALTER DATABASE [MyDB] SET READ_COMMITTED_SNAPSHOT ON WITH NO_WAIT
    ALTER DATABASE [MyDB] SET MULTI_USER WITH NO_WAIT
END
GO

Однако при запуске этого сценария периодически возникают тупики. Иногда операция проходит, а иногда возникает тупик, и моя база данных застревает в однопользовательском режиме. Могу ли я в любом случае убедиться, что этого не произойдет? Я рассмотрел удаление WITH NO_WAIT пункт, но это, похоже, не помогло.

1 ответ

Похоже, я что-то пропустил, когда я удалил WITH NO_WAIT пункт. Работает нормально когда убираю.

Другие вопросы по тегам