Базы данных SQL сервера застряли в состоянии восстановления


79

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

Изображение, показывающее восстановление баз данных

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

Ответы:


129

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

База данных теперь ожидает последний файл журнала транзакций.

Вы также можете:

  1. Применить последний журнал транзакций , используя RESTORE LOG database_name FROM backup_device WITH RECOVERY;... или
  2. Восстановите базу данных снова, но на этот раз, используя ... WITH RECOVERY;... или
  3. Выведите базу данных из режима восстановления, выполнив: RESTORE DATABASE YourDb WITH RECOVERY;

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

Смотрите это для деталей:


Если они не работают, см. Dba.stackexchange.com/questions/11175/… опять же, МНОГО ПРЕДУПРЕЖДЕНИЙ DOOM, если вы не знаете, что делаете, и понимаете полный риск потери данных. Но если вы работаете с непроизводительным сервером, у вас есть хорошие резервные копии, чтобы выполнить новое восстановление, и вы можете позволить себе перезапустить SQL на указанном сервере, это работает.
NateJ

6
Msgstr "Вывести базу данных из режима восстановления, выполнив: RESTORE DATABASE YourDb WITH RECOVERY". 20 минут работы с царапинами и перезапуском головы, затем фиксируется одним вкладышем. Спасибо!
Echilon

2
Я застрял в той же ситуации, моя коробка разработчика. Вариант 3 работал как шарм!
Моиз Танкивала

Я пытался восстановить БД из .bak в новую БД, но забыл изменить имена файлов на диске. Восстановление не удалось, хотя и не потому, что файлы использовались существующей базой данных, а какой-то другой ошибкой. Это испортило существующую БД (застрявшую в состоянии восстановления). # 3 переведите его в режим онлайн через секунду и проверьте данные, все выглядит хорошо. Спасибо!
CoDEmanX

44

Простой T-SQL скрипт для решения этой проблемы:

напишите этот скрипт в окне New Query и выполните:

RESTORE DATABASE [DataBase Name] WITH RECOVERY;

ВОССТАНОВИТЬ БАЗУ ДАННЫХ [database_name] WITH RECOVERY .... Работает идеально для меня. Спасибо!

10
Будьте очень осторожны, чтобы понять последствия этого. Если БД ожидает восстановления журнала, это может привести к значительной потере данных.
Дэвид Спиллетт

2
Не работает из-за ошибки: «Невозможно восстановить базу данных, поскольку журнал не был восстановлен».
Ян Бойд

0

У меня просто была такая ситуация, и лекарство было довольно удивительным:

ALTER DATABASE DBName SET ONLINE;

По-видимому, восстановление NetBackup, которое сломалось, оставило его в странном состоянии. Ни одно другое решение не сработало (хотя я еще не пытался перезапустить службу SQL Server)

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


Это неправильный ответ на этот вопрос, если вы попытаетесь установить базу данных, которая находится в режиме «Восстановление» в сети, вы получите сообщение об ошибке «ALTER DATABASE недопустима, пока база данных находится в состоянии восстановления».
Джеймс Дженкинс

Возможно, вы не знакомы с тем, как в StackOverflow мы иногда отвечаем на вопросы, которые немного отличаются от опубликованных. Это обеспечивает ценность, потому что люди часто приходят к вопросам, похожим на их, после поиска в Интернете. Что касается вашего фактического утверждения о том, что его ALTER DATABASEне разрешили, заверяю вас, что в моем случае база данных фактически показала, что она находится в состоянии восстановления, а использование SET ONLINEфактически сработало . Так что понимайте, что вы называете меня ошибкой или ложью. Это то, что вам действительно нужно делать, когда есть альтернатива?
ErikE

@JamesJenkins А что это за альтернатива? Альтернативой является гипотеза о том, что база данных может отображаться в состоянии восстановления, но фактически не восстанавливаться. Или это может быть на последнем этапе восстановления, когда восстановление фактически завершено, чтобы его можно было установить в ONLINEсостояние. Короче говоря, я думаю, что ваш комментарий и отрицательное мнение не соответствуют этому сайту, и ваша информация фактически неверна, потому что она не соответствует действительности с данными, которые я представил.
ErikE

0

Как мы знаем, опция восстановления базы данных по умолчанию - это «Восстановление», которое обеспечивает доступность базы данных и ее использование в сети после завершения восстановления базы данных.

Пример:

RESTORE DATABASE YourDB FROM DISK= 'C:\\Data\\YourDBBackup.bak'
WITH RECOVERY
GO

Давайте посмотрим на важные моменты о восстановлении без восстановления

  • База данных не используется
  • Остается в режиме восстановления
  • Следующая последовательность восстановления может быть выполнена
  • Не откатывает никаких незафиксированных транзакций

Восстановить с NoRecovery

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

Пример:

RESTORE DATABASE YourDB FROM DISK - 'C:\\Data\\Backup_part1.bak' 
WITH NORECOVERY
GO

А потом:

RESTORE LOG YourDB FROM DISK = 'C:\\Data\\BackupLog-part2.trn'
WITH RECOVERY
GO

1
У вас может быть опечатка в вашем ответе. В разделе с пометкой ... о Восстановлении с помощью Восстановления перечислены все параметры, относящиеся к этому RESTORE ...WITH NORECOVERYпараметру. Не могли бы вы еще раз проверить это?
hot2use
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.