Как избежать взаимоблокировки при отключении фиксации моментального снимка в 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
пункт. Работает нормально когда убираю.