Мне нужно перезапустить базу данных, потому что некоторые процессы не работают. Я планирую перевести его в офлайн и снова в онлайн.
Я пытаюсь сделать это в Sql Server Management Studio 2008:
use master;
go
alter database qcvalues
set single_user
with rollback immediate;
alter database qcvalues
set multi_user;
go
Я получаю следующие ошибки:
Msg 5061, Level 16, State 1, Line 1
ALTER DATABASE failed because a lock could not be placed on database 'qcvalues'. Try again later.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.
Msg 5061, Level 16, State 1, Line 4
ALTER DATABASE failed because a lock could not be placed on database 'qcvalues'. Try again later.
Msg 5069, Level 16, State 1, Line 4
ALTER DATABASE statement failed.
Что я делаю не так?
sql
sql-server-2008
ssms
ДЖО СКИТ
источник
источник
Ответы:
После того, как вы получите сообщение об ошибке, запустите
Найдите базу данных в списке. Возможно, соединение не было прервано. Если вы обнаружите какие-либо подключения к базе данных, запустите
где
<SPID>
- SPID для сеансов, подключенных к базе данных.Попробуйте выполнить свой сценарий после удаления всех подключений к базе данных.
К сожалению, у меня нет причины, по которой вы видите проблему, но вот ссылка, которая показывает, что проблема возникла в другом месте.
http://www.geakeit.co.uk/2010/12/11/sql-take-offline-fails-alter-database-failed-because-a-lock-could-not-error-5061/
источник
set single_user
попытка, которая еще не завершена.KILL
тоже не решит.KILL (87)
приводит кMsg 102, Level 15, State 1, Line 1 Incorrect syntax near '('.
эээ ....Мне удалось воспроизвести эту ошибку, выполнив следующие действия.
Подключение 1 (оставьте включенным на пару минут)
Подключения 2 и 3
источник
Попробуйте это, если он находится в стадии перехода ...
http://learnmysql.blogspot.com/2012/05/database-is-in-transition-try-statement.html
источник
SET OFFLINE
оператором, как указано в OP (возможно, есть сценарии, в которых это работает, но это не для меня)Я добавлю это сюда на случай, если кому-то повезет так же, как мне.
При просмотре списка процессов sp_who2 обратите внимание на процессы, которые выполняются не только для задействованной базы данных, но и для главной . В моем случае проблема, которая блокировала базу данных, была связана с хранимой процедурой, запускающей xp_cmdshell.
Проверьте, есть ли у вас процессы в состоянии KILL / RollBack для базы данных master
Если у вас такая же проблема, просто команда KILL, вероятно, не поможет. Вы можете перезапустить SQL-сервер или, что лучше, найти cmd.exe в процессах Windows в ОС SQL-сервера и убить его.
источник
В SQL Management Studio перейдите в Безопасность -> Логины и дважды щелкните свой Логин. Выберите Server Roles в левом столбце и убедитесь, что установлен флажок sysadmin.
В моем случае я вошел в систему под учетной записью без этой привилегии.
НТН!
источник
Убийство идентификатора процесса сработало для меня. При запуске команды «EXEC sp_who2» в новом окне запроса ... и фильтрации результатов для «занятой» базы данных, уничтожение процессов с помощью команды «KILL» помогло добиться цели. После этого все снова заработало.
источник
Просто чтобы добавить свои два цента. Я оказался в той же ситуации, ища минимально необходимые привилегии входа в базу данных для успешного выполнения оператора:
Кажется, что оператор ALTER успешно завершается при выполнении с логином системного администратора , но для этого требуется часть очистки соединений, когда выполняется под логином, который имеет «только» ограниченные права, например:
PS Я потратил часы, пытаясь выяснить, почему «ALTER DATABASE ..» не работает, когда выполняется под логином с ролью dbcreator + ALTER ANY DATABASE привилегиями. Вот моя ветка MSDN !
источник
Я знаю, что это старый пост, но недавно я столкнулся с очень похожей проблемой. К сожалению, я не смог использовать ни одну из команд изменения базы данных, потому что нельзя было установить монопольную блокировку. Но я так и не смог найти открытое соединение с db. В конце концов мне пришлось принудительно удалить состояние работоспособности базы данных, чтобы заставить ее перейти в состояние восстановления вместо восстановления.
источник
В редких случаях (например, после завершения тяжелой транзакции) запущенный системный процесс CHECKPOINT, удерживающий блокировку FILE для файла базы данных, предотвращает переход в режим MULTI_USER.
источник
В моем сценарии не было процесса, блокирующего базу данных под sp_who2. Однако мы обнаружили, что, поскольку база данных намного больше, чем другие наши базы данных, ожидающие процессы все еще выполнялись, поэтому база данных в группе доступности по-прежнему отображается красным / отключенным после того, как мы попытались «возобновить данные», щелкнув правой кнопкой мыши приостановленную базу данных.
Чтобы проверить, запущены ли все еще процессы, просто выполните эту команду: выберите процент завершения из sys.dm_exec_requests, где процент_complete> 0
источник