Бази даних 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/… - знову ж таки, МНОГО ПОПЕРЕДЖЕННЯ ДОМИ , якщо ви не знаєте, що ви робите, і розумієте весь ризик втрати даних. Але якщо ви зв’язані на невиробничому сервері, у вас є хороші резервні копії, щоб зробити нове відновлення з, і ви можете дозволити собі перезапустити SQL на вказаному сервері, він працює.
NateJ

6
"Вимушуйте базу даних виходити з режиму відновлення, виконуючи: ВІДКЛЮЧИТИ ДАТАБАЗУ YourDb З ВІДНОВЛЕННЯМ". 20 хвилин прокручування та перезавантаження послуг, після чого зафіксовано одним вкладишем. Дякую!
Ехілон

2
Я був застряг у тій же ситуації, що і моя скринька. Варіант 3 спрацював як шарм!
Moiz Tankiwala

Я спробував відновити БД з .bak в нову БД, але забув змінити імена файлів на диску. Не вдалося відновити, хоча не тому, що файли використовувались наявна база даних, а якась інша помилка. Це зіпсувало існуючу БД (застрягла у відновленні стану). №3 поверніть його на секунду назад і перевіряючи дані, все виглядає добре. Дякую!
CoDEmanX

44

Простий сценарій T-SQL для вирішення цієї проблеми:

написати цей скрипт у вікні нового запиту та виконати:

RESTORE DATABASE [DataBase Name] WITH RECOVERY;

ВІДКРИТИ ДАТАБАЗУ [ім'я_бази] З ВІДНОСНЕННЯм .... Мені працювали ідеально. Дякую!

10
Будьте дуже обережні, щоб зрозуміти наслідки цього. Якщо БД чекає відновлення журналу, це може призвести до значних втрат даних.
Девід Спіллетт

2
Не працює через помилку: "Базу даних неможливо відновити, оскільки журнал не було відновлено."
Ян Бойд

0

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

ALTER DATABASE DBName SET ONLINE;

Очевидно, відновлення NetBackup, що зламало, залишило його в дивному стані. Жодне інше рішення не працювало (хоча я ще не намагався перезапустити службу SQL Server)

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


Це неправильна відповідь на це запитання, якщо ви спробуєте встановити базу даних, яка знаходиться у розділі "Відновлення" в Інтернеті, ви отримаєте помилку "АЛЬТЕРНУВАННЯ ДАТАБАЗИ заборонено, поки база даних знаходиться у стані відновлення".
Джеймс Дженкінс

Можливо, вам невідомо, як у StackOverflow ми інколи відповідаємо на запитання, які дещо відрізняються від розміщених. Це забезпечує цінність, оскільки люди часто шукають подібних до них питань після пошуку в Інтернеті. Що стосується вашої фактичної заяви про ALTER DATABASEнедозволення, я запевняю вас, що в моєму випадку база даних насправді показувала як відновлення стану, а використання SET ONLINEфактично працювало . Тож зрозумійте, що ви називаєте мене помилково чи брехня. Це те, що вам справді потрібно зробити, коли є альтернатива?
Ерік

@JamesJenkins І що це за альтернатива? Альтернативою є гіпотеза, що база даних може відображатись при відновленні стану, але насправді не відновлює. Або це може бути на завершальному етапі відновлення, при цьому відновлення фактично завершено, щоб його можна було фактично встановити у ONLINEстан. Таким чином, коротке оповідання, я вважаю, що ваш коментар та відгуки не відповідають цьому веб-сайту, і ваша інформація фактично невірна, оскільки вона не належним чином кваліфікована з представлених нами даних.
Ерік

0

Як ми знаємо, опція відновлення бази даних за замовчуванням - це функція Recovery, яка забезпечує доступність бази даних та Інтернет для використання після завершення відновлення бази даних.

Приклад:

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

Давайте подивимося на важливі моменти відновлення з відновленням NO

  • База даних не використовується
  • Залишається в режимі відновлення
  • Наступна послідовність відновлення може бути виконана
  • Не повертає жодних невідомих транзакцій

Відновити за допомогою 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.