Экстремальное время ожидания при переводе базы данных SQL Server в автономный режим
Я пытаюсь выполнить некоторое автономное обслуживание (восстановление базы данных dev из live backup) в моей базе данных dev, но команда "Take Offline" через SQL Server Management Studio выполняет очень медленно - порядка 30 минут плюс время. Я просто нахожусь в своем уме, и я не могу найти никаких ссылок в интернете относительно того, что может вызвать проблему скорости или как ее исправить.
некоторые сайты предположили, что открытые соединения с базой данных причина это замедление, но единственное приложение, которое использует эту базу данных, - это экземпляр IIS моей машины разработчика, и служба остановлена-больше нет открытых соединений.
Что может быть причиной этого спада, и что я могу сделать, чтобы его ускорить?
17 ответов:
после некоторого дополнительного поиска (новые условия поиска, вдохновленные ответом gbn и комментарием u07ch на ответ KMike) я нашел это, которое успешно завершилось за 2 секунды:
ALTER DATABASE <dbname> SET OFFLINE WITH ROLLBACK IMMEDIATE(обновить)
когда это все еще не удается со следующей ошибкой, вы можете исправить это, как вдохновленный этот блог:
ALTER DATABASE failed because a lock could not be placed on database 'dbname' попробуйте еще раз позже.
вы можете запустить следующую команду, чтобы узнать, кто держит блокировку в вашей базе данных:
EXEC sp_who2и использовать все
SPIDвы найдете в следующей команде:KILL <SPID>запустить снова. Теперь он должен работать.
скорее всего, есть подключение к БД откуда-то (редкий пример: асинхронное обновление статистики)
чтобы найти соединения, используйте sys.ѕуѕргосеѕѕеѕсистемная
USE master SELECT * FROM sys.sysprocesses WHERE dbid = DB_ID('MyDB')для принудительного отключения, используйте ОТКАТ НЕМЕДЛЕННО
USE master ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
есть ли у вас открытые окна SQL Server Management Studio, которые подключены к этой БД?
поместите его в однопользовательский режим, а затем повторите попытку.
в моем случае, после стольких ожиданий его завершения у меня не было терпения и просто закрылась студия управления. Перед выходом он показал сообщение об успехе, БД находится в автономном режиме. Файлы были доступны для переименования.
выполнить хранимую процедуру sp_who2
Это позволит вам увидеть, если есть какие-либо блокировок.. убить их должно починить.
в SSMS: щелкните правой кнопкой мыши значок SQL server, Монитор активности. открытый процесс. Найдите обработанное соединение. Щелкните правой кнопкой мыши на процессе, убить.
всякий раз, когда вы сталкиваетесь с этим типом вещей, вы всегда должны думать о своем журнале транзакций. Состояние alter db с немедленным откатом указывает, что это так. Проверьте это:http://msdn.microsoft.com/en-us/library/ms189085.aspx
косточки на контрольно-пропускных пунктах и т. д. Вам нужно решить, стоит ли сохранять транзакции в вашем журнале или нет, а затем выбрать режим для запуска вашей БД соответственно. Там действительно нет причин для вас, чтобы ждать, но и нет причин для вас потерять данные - вы можете иметь оба.
чтобы обойти это, я остановил веб-сайт, который был подключен к БД в IIS, и сразу же "замороженная" панель "take db offline" стала размороженной.
закрытие экземпляра SSMS (SQL Service Manager), из которого был сделан запрос, решило проблему для меня.....
в моем случае я посмотрел на некоторые таблицы в БД до выполнения этой операции. Моя учетная запись пользователя поддерживала активное подключение к этой БД в SSMS. Как только я отключился от сервера в SSMS (оставив диалоговое окно "отключить базу данных" открытым), операция прошла успешно.
в SSMS, установите базу данных только для чтения, а затем обратно. Соединения будут закрыты, что освобождает замки.
в моем случае был сайт, который имел открытые соединения с базой данных. Этот метод был достаточно прост:
- Правой Кнопкой Мыши базу данных -> свойства -> параметры
- Set
Database Read-Onlyистина- Нажмите кнопку " Да " в диалоговом окне предупреждение SQL Server закроет все подключения к базе данных.
- повторно открыть Параметры и повернуть только для чтения отступить
- теперь попробуйте переименовать базу данных или перевести ее в автономный режим.
для меня я просто должен был войти в монитор активности работы и остановить две вещи, которые обрабатывались. Затем он сразу же отключился. В моем случае, хотя я знал, что эти 2 процесса были и все было в порядке, чтобы остановить их.
в моем случае база данных была связана со старой установкой Sharepoint. Остановка и отключение связанных служб в диспетчере серверов "отцепили" действие take offline, которое выполнялось в течение 40 минут, и оно было немедленно завершено.
вы можете проверить, если какие-либо службы в настоящее время используют базу данных.
в следующий раз, в диалоговом окне Take Offline, не забудьте установить флажок "удалить все активные соединения". Я также был на SQL_EXPRESS на локальной машине без подключений, но это замедление произошло для меня, если я не проверил этот флажок.
Я попробовал все предложения ниже и ничего не получалось.
- EXEC sp_who
убить
базы данных изменить набор single_user указан с отката непосредственной
БАЗЫ ДАННЫХ ИЗМЕНИТЬ УСТАНОВИТЬ В АВТОНОМНОМ РЕЖИМЕ С ОТКАТА НЕПОСРЕДСТВЕННОЙ
результат: обе вышеуказанные команды также застряли.
4 . Щелкните правой кнопкой мыши базу данных -> свойства -> параметры Установить значение True только для чтения базы данных Щелчок "Да" в диалоговом окне предупреждение SQL Server закроет все подключения к базе данных.
результат: окно застряло при выполнении.
в крайнем случае, я перезапустил службу SQL server из configuration manager, а затем запустил ALTER DATABASE SET OFFLINE с немедленным откатом. Это сработало как шарм
Comments