SQL Server 2012 не может отключить изоляцию моментальных снимков
Используя код ниже, я не могу отключить изоляцию снимка. Я использую коробку SQL Server 2012. Я могу создать новую пустую базу данных, включить изоляцию моментальных снимков, но не могу снова ее отключить.
Строка allow_snapshot_isolation OFF просто вращает колеса.
ALTER DATABASE SNAP SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE SNAP SET allow_snapshot_isolation OFF
ALTER DATABASE SNAP SET read_committed_snapshot off
ALTER DATABASE SNAP SET MULTI_USER
3 ответа
Я следил ниже за той же проблемой, которую я получал
USE master;
GO
ALTER DATABASE MYDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE MYDB MODIFY NAME = MYDB_1;
GO
ALTER DATABASE MYDB_1 SET READ_COMMITTED_SNAPSHOT OFF;
GO
ALTER DATABASE MYDB_1 MODIFY NAME = MYDB;
GO
ALTER DATABASE MYDB SET MULTI_USER;
Вы уверены, что в базе данных не было выполнено никаких других транзакций? Помните о неявных транзакциях, которые используются, например. драйверами JDBC (когда для Autocommit установлено значение false).
Невозможно отключить изоляцию моментального снимка, если ожидается выполнение какой-либо из предыдущих транзакций. Это потому, что он должен быть уверен, что любая другая транзакция не будет пытаться использовать предыдущие версии строк. Однако можно создавать запросы, охватывающие несколько баз данных, поэтому установка изоляции моментальных снимков не только заботится о транзакциях в одной базе данных.
Вы можете проверить, если это так, используя sp_who2
а также SELECT * FROM sys.sysprocesses
и поиск вашего изменения процесса. sp_who2
будет показывать, что процесс приостановлен и с помощью sys.sysprocesses
вы, вероятно, узнаете, что его последним типом является DISABLE_VERSIONING.
Таким образом, ваше решение - откатить все транзакции (или закрыть соединения в случае неявных транзакций). Имейте в виду, что если вы используете пул соединений из какой-то программы, у вас может быть, например, 40 неявных транзакций, открытых в двух или трех дБ. Если они были открыты после включения режима моментального снимка, то отключить его будет невозможно до конца.
Я выполнил приведенный ниже запрос MSSQL , чтобы отключить ALLOW_SNAPSHOT_ISOLATION для базы данных :
ALTER DATABASE master SET ALLOW_SNAPSHOT_ISOLATION OFF;
GO;
Затем я получил эту ошибку ниже :
ИЗОЛЯЦИЯ SNAPSHOT всегда включена в этой базе данных.
И я выполнил приведенный ниже запрос MSSQL , чтобы включить READ_COMMITTED_SNAPSHOT для
master
база данных :
ALTER DATABASE master SET READ_COMMITTED_SNAPSHOT ON;
GO;
Затем я получил эту ошибку ниже :
Опция READ_COMMITTED_SNAPSHOT не может быть установлена в базе данных master.
Потому что в документации сказано ниже:
Параметр ALLOW_SNAPSHOT_ISOLATION автоматически включается в базах данных master и msdb и не может быть отключен.
Пользователи не могут включить параметр READ_COMMITTED_SNAPSHOT в master, tempdb или msdb.