Визначте першопричину того, чому база даних застрягла у стані ВІДНОВЛЕННЯ


10

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

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

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

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

Оскільки сценарії відновлення відновлюють ПОЛЮ резервну копію бази даних та використовує "WITH RECOVERY"параметр, я намагаюся з’ясувати, що може зупинити процес відновлення, хоча я фактично відновлюю його за допомогою "WITH RECOVERY".

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

Я дуже хотів би вирішити першопричину проблеми, а не лікувати симптоми, а саме - вручну відновити БД ще раз.

Оновлення:

Github Gist як @Brent рекомендує - тут .


1
Ви можете отримати відповідь з журналів SQL Server і переглядача подій, перевіряли? Чи трапляється якесь космічне питання, тому що це може призвести до того, що відновлюється стан застрягне. Ви перевіряєте цілісність резервного копіювання перед відновленням? Як працює ваша підсистема зберігання даних
Shanky

@Shanky Я подивлюся на них, хоча я не маю прямого доступу до цієї інформації (мені потрібно звернутися до свого адміністратора SAN). Цілісність резервного копіювання встановлена ​​для перевірки як під час створення резервної копії, так і під час запису на диск.
Radu Gheorghiu

1
Що говорить журнал помилок SQL Server? Спробуйте запустити EXEC sys.xp_readerrorlog 0,1;- шукайте повідомлення під час операції відновлення.
Макс Вернон

@MaxVernon Журнал помилок з моменту відновлення . Я перевірив повідомлення про помилку, і, здається, рекомендує перевірити місце на диску, чого достатньо. Я покопаю глибше і побачу, що я можу знайти, але при швидкому погляді це могло б розширитися досить багато і змусило б я переглянути багато речей .
Radu Gheorghiu

Відповіді:


8

Бритва Оккама починає з очевидного:

Якщо ваш скрипт іноді залишає базу даних у відновленні стану, тоді налагоджуйте сценарій.

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

Якщо ви цього не хочете, спробуйте запустити трафік Profiler або Extended Events для відстеження подій відновлення, але будьте попереджені - це набагато складніше, ніж це виглядає. (Прочитайте коментарі до цього допису, щоб отримати ще більше читацьких ідей, які вони випробували та провалили.)


Дякую Брент, це кілька хороших рекомендацій! Я повернуся з оновленням, коли отримаю більше інформації, на даний момент добре, БД, я побачу, що станеться, коли процес запуститься завтра вранці.
Раду Георгіу
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.