Я знаю, что есть вопросы, которые решают проблему зависания базы данных RESTORING
и использовали эти решения для ручного перевода базы данных в оперативный режим, но мой сценарий несколько иной.
У меня есть автоматическое восстановление с использованием скриптов Powershell, которое восстанавливает копию производства в экземпляре DEV. Сценарии остаются неизменными в течение года, и иногда процесс восстановления завершается, но восстановленная база данных застревает в RESTORING
состоянии (иногда сценарий работает нормально, иногда происходит сбой, как этот).
Каждый раз, когда я вручную запускаю процесс, он работает, или если я вручную восстанавливаю базу данных из пользовательского интерфейса SSMS или через T-SQL, он завершается без проблем.
Я нашел ответы, которые рекомендовали запускать CHECKDB
на восстановленной БД, но ничего не вышло как причина этой проблемы.
Поскольку сценарии восстановления восстанавливают ПОЛНУЮ резервную копию базы данных и используют "WITH RECOVERY"
опцию, я пытаюсь выяснить, что может остановить процесс восстановления, хотя на самом деле я восстанавливаю его, используя "WITH RECOVERY"
.
Любые предложения действительно приветствуются, так как я пытаюсь понять, почему это происходит время от времени.
Я бы очень хотел решить основную причину проблемы, а не лечить симптомы, а именно вручную восстановить БД.
Обновить:
Github Gist, как рекомендовал @Brent - здесь .
источник
EXEC sys.xp_readerrorlog 0,1;
- ищите сообщения во время операции восстановления.Ответы:
Бритва Оккама предлагает начать с очевидного:
Если ваш скрипт иногда оставляет базу данных в состоянии восстановления, отладьте скрипт.
Начните с регистрации того, что вы делаете в таблице или в файле. Затем, когда вы в конечном итоге восстановите базу данных, вернитесь в журналы и посмотрите, что пошло не так. (Если вам нужен второй взгляд сообщества, попробуйте загрузить свой сценарий в виде Github Gist, но имейте в виду, что чем он больше, тем труднее людям будет находить ошибки.)
Если вы не хотите этого делать, попробуйте запустить трассировку Profiler или Extended Events, чтобы отследить события восстановления, но имейте в виду - это намного сложнее, чем кажется. (Прочитайте комментарии к этому посту, чтобы узнать больше идей читателей, которые они попробовали и потерпели неудачу.)
источник