Базы данных 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)

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

ErikE
источник
Это неправильный ответ на этот вопрос, если вы попытаетесь установить базу данных, которая находится в режиме «Восстановление» в сети, вы получите сообщение об ошибке «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