Базы данных SQL-сервера изменить с отката непосредственной


Иногда при (например) установке базы данных в автономный режим с помощью выполнения следующей команды возникает исключение, так как подключен один или несколько клиентов:

ALTER DATABASE <dbname> SET OFFLINE

Согласно этому ответу одно решение состоит в том, чтобы использовать with rollback immediate в конце:

ALTER DATABASE <dbname> SET OFFLINE WITH ROLLBACK IMMEDIATE

Byt почему на самом деле это отключение других клиентов? Это звучит как очень неочевидный способ принудительного отключения, хотя он работает.

2 3

2 ответа:

Вы не можете перевести базу данных в автономный режим, пока на ней выполняются транзакции других пользователей, поэтому вам придется отключить пользователей тем или иным способом, чтобы перевести базу данных в автономный режим.

Если бы Вы были вежливы, вы могли бы попросить всех ваших пользователей закончить делать то, что они делали, прежде чем вы отключите базу данных

Но если это не практично, включая вариант

WITH ROLLBACK IMMEDIATE

Означает, что все текущие транзакции откатываются (база данных сбрасывается в исходное состояние). точка, с которой началась транзакция). Вы также можете использовать

WITH ROLLBACK AFTER 60 SECONDS

Но мне никогда не приходилось

Если бы вы могли перевести базу данных в автономный режим во время выполнения незавершенных транзакций, то база данных была бы в нестабильном состоянии с изменением, которое не было сделано или отменено

От MSDN

С ::=

Указывает, когда следует откатывать незавершенные транзакции, когда база данных переходит из одного состояния в другое. Если условие о расторжении договора опущено, оператор ALTER DATABASE ожидает неопределенно долго, если есть есть ли какая-то блокировка в базе данных. Только одно условие о прекращении может быть указано, и оно следует установленным положениям.

Где завершение будет ROLLBACK IMMEDIATE в вашем случае.