Определите причину, по которой база данных застряла в состоянии ВОССТАНОВЛЕНИЕ

10

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

У меня есть автоматическое восстановление с использованием скриптов Powershell, которое восстанавливает копию производства в экземпляре DEV. Сценарии остаются неизменными в течение года, и иногда процесс восстановления завершается, но восстановленная база данных застревает в RESTORINGсостоянии (иногда сценарий работает нормально, иногда происходит сбой, как этот).

Каждый раз, когда я вручную запускаю процесс, он работает, или если я вручную восстанавливаю базу данных из пользовательского интерфейса SSMS или через T-SQL, он завершается без проблем.

Я нашел ответы, которые рекомендовали запускать CHECKDBна восстановленной БД, но ничего не вышло как причина этой проблемы.

Поскольку сценарии восстановления восстанавливают ПОЛНУЮ резервную копию базы данных и используют "WITH RECOVERY"опцию, я пытаюсь выяснить, что может остановить процесс восстановления, хотя на самом деле я восстанавливаю его, используя "WITH RECOVERY".

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

Я бы очень хотел решить основную причину проблемы, а не лечить симптомы, а именно вручную восстановить БД.

Обновить:

Github Gist, как рекомендовал @Brent - здесь .

Раду Георгиу
источник
1
Вы можете получить ответ из журналов SQL Server и средства просмотра событий, вы проверяли? Есть ли какая-то проблема с космосом, потому что это может привести к зависанию восстановительного состояния. Проверяете ли вы целостность резервной копии перед восстановлением? Как поживает ваша подсистема хранения
Shanky
@Shanky Я посмотрю на них, хотя у меня нет прямого доступа к этой информации (мне нужно познакомиться с моим администратором SAN). Целостность резервного копирования должна проверяться как при резервном копировании, так и при записи на диск.
Раду Георгиу
1
Что говорит журнал ошибок SQL Server? Попробуйте запустить EXEC sys.xp_readerrorlog 0,1;- ищите сообщения во время операции восстановления.
Макс Вернон,
@MaxVernon Журнал ошибок с момента восстановления . Я проверил сообщение об ошибке, и, кажется, рекомендую проверить дисковое пространство, что достаточно. Я буду копать глубже и посмотрю, что я могу найти, но при быстром взгляде это могло бы значительно расшириться и заставило бы меня смотреть на многие вещи .
Раду Георгиу

Ответы:

8

Бритва Оккама предлагает начать с очевидного:

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

Начните с регистрации того, что вы делаете в таблице или в файле. Затем, когда вы в конечном итоге восстановите базу данных, вернитесь в журналы и посмотрите, что пошло не так. (Если вам нужен второй взгляд сообщества, попробуйте загрузить свой сценарий в виде Github Gist, но имейте в виду, что чем он больше, тем труднее людям будет находить ошибки.)

Если вы не хотите этого делать, попробуйте запустить трассировку Profiler или Extended Events, чтобы отследить события восстановления, но имейте в виду - это намного сложнее, чем кажется. (Прочитайте комментарии к этому посту, чтобы узнать больше идей читателей, которые они попробовали и потерпели неудачу.)

Брент Озар
источник
Спасибо Брент, вот несколько хороших рекомендаций! Я вернусь с обновлением, когда у меня будет больше информации, в тот момент, когда с БД все в порядке, я посмотрю, что произойдет, когда процесс снова запустится завтра утром.
Раду Георгиу