Основна база даних пошкоджена, екземпляр не запуститься - які мої варіанти?


11

Довідка! Моя основна база даних пошкоджена, я навіть не можу вивести екземпляр SQL в Інтернеті! Які мої варіанти відновлення сервера?

У мене є резервна копія майстра, але сторінка MSDN "Відновлення бази даних Master" просить мене запустити екземпляр в режимі для одного користувача, що я не можу зробити!

(Примітка. Я залишаю це питання не визначеним щодо версії SQL, щоб бути більш широко застосовною довідкою. Існує кілька подібних питань у DBA.SE, але жодне, що не стосується запуску сервера.)


(Коментарі чи інші відповіді, безумовно, вітаються, але я запитав це, намагаючись надати вичерпну відповідь, включаючи деякі аспекти, яких я не міг знайти в Інтернеті.)
BradC,

Відповіді:


12

Ось декілька напрямків, які я би дослідив. Не роби все це (деякі з них є різними методами досягнення тієї ж мети), але варто задуматися:

1. Вивчіть журнал помилок SQL безпосередньо

Перейдіть безпосередньо до папки, що містить журнали помилок SQL, і завантажте найновіші ERRORLOGв блокнот, щоб отримати більш детальну інформацію про те, чому екземпляр SQL не запуститься. Можливо, ви виявите, що проблема зовсім не з базовою базою даних.

2. Спробуйте запустити екземпляр в режимі для одного користувача

Ось повний перелік параметрів запуску для SQL-сервера , включаючи -m(режим одного користувача) та -f(режим мінімальної конфігурації). Інші параметри дозволяють вказати шлях до основної бази даних, якщо в цьому проблема.

Якщо вам вдасться запустити екземпляр, виконайте кроки в статті MSDN, яку ви пов’язали, для відновлення основної бази даних, або цього детального ознайомлення з Thomas LaRock .

Якщо інша програма завжди захоплює з'єднання одного користувача, перш ніж ви зможете, спочатку вимкніть агент SQL, щоб він не запускався. По-друге, перегляньте ідеї цього питання щодо використання -m"Application Name"параметра для визначення імені програми.

3. Відновіть masterдо іншого екземпляра і скопіюйте його файли

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

Якщо ви не можете запустити екземпляр в режимі для одного користувача, але у вас є інший екземпляр SQL, який працює з точно такою ж версією та версією , спробуйте відновити останню відому резервну копію базової бази даних з вашого мертвого сервера на інший екземпляр:

  • Відновити, звичайно, як інше ім'я ( master_please_god_let_this_work), WITH MOVEщоб не перезаписати masterна хорошому сервері
  • Відновити WITH NORECOVERY. Не впевнений, що це необхідно, але мені стало краще, що я знав, що інший сервер не збирається нічого змінювати у відновленому майстрі
  • Установіть його в офлайн-режимі: ALTER DATABASE [master_please_god_let_this_work] SET OFFLINE
  • Скопіюйте відновлені файли MDF та LDF з хорошого сервера на мертвий сервер
  • Перейменуйте файли master.mdfта, mastlog.ldfяк потрібно, щоб замінити погані головні файли на відновлені версії
  • Схрестіть пальці і почніть екземпляр
  • Необов’язково: повторно відновіть майстер на відродженому сервері. Не впевнений, що це необхідно, оскільки ми були дуже обережні, щоб не змінитися master.

4. Перебудуйте бази даних системи

Якщо у вас немає іншого екземпляра, який працює з тією ж версією, або якщо вам не зручно використовувати незадокументовану процедуру, перелічену в №3, або якщо у вас немає резервних копій master( чому у вас немає резервних копій ?? ), ви можете відновити бази даних системи SQL з оригінального диска встановлення :

Setup.exe /ACTION=REBUILDDATABASE /...

Коли це завершиться, ви можете виконати кроки, пов'язані раніше, щоб відновити masterз останньої гарної резервної копії. Вам також потрібно буде відновити нещодавню резервну копію, msdbщоб зберегти всі ваші робочі місця, графік роботи та історію вакансій.

5. Відновіть усі бази даних USER до нового (або існуючого) екземпляра SQL

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

Якщо ваш новий (або перевстановлений) екземпляр має доступ до того ж диска, набагато швидше просто приєднати їх як нові бази даних:

CREATE DATABASE foo 
ON (FILENAME = 'D:\data\foo.mdf'),
   (FILENAME = 'D:\data\foo_log.ldf')
FOR ATTACH;

6. Повторіть будь-які зміни master

Після успішного відновлення master(за допомогою будь-якої з перерахованих вище методик) вам слід дослідити будь-які зміни, які можуть бути втрачені, якби вони були внесені після резервної копії, яку ви тільки що відновили:

  • Зміни безпеки
  • Нові бази даних (файли все ще будуть на диску, просто приєднайте їх)
  • Налаштування сервера

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


1
Гарний пост. +1. Я зробив тест зіпсував свого майстра, відновив резервну копію на іншому сервері, а потім скопіював файли на старий сервер. Це працювало без проблем. До речі, я отримав помилку 3411, коли майстер був пошкоджений.
Racer SQL

Чудово, дякую за перевірку цієї техніки. У моєму випадку я ніколи не отримував фактичної помилки, але моєму майстру db потрібні години, щоб відновитись, набагато вищі за можливі налаштування часу очікування служби кластеру.
BradC

1
@RafaelPiccinelli Майстер зберігає "метадані" про все на сервері (безпека, інші бази даних тощо), так що це має сенс. Дивіться мої пункти №5 та №6. Вам доведеться знову приєднати ці dbs та перевстановити будь-яку безпеку, яка була у вас на місці. До речі, я сподіваюся, що ви все це робите в лабораторних умовах !!
BradC

Так, саме тому тест. Я отримую помилку, але, ймовірно, це має дозвіл на моєму сховищі. знову приємний пост. Я просто видалю цей останній коментар ха-ха.
Racer SQL

2

Я просто хотів додати можливу проблему та рішення, до якого я щойно зіткнувся - у мене була подібна ситуація під час невдалого накопичувального оновлення (SQL2016 CU12) та повідомлень у переглядачі подій та помилки, де сказано: "Не вдається відновити головну базу даних. SQL Server є не вдається запустити. Відновіть майстер з повної резервної копії, відремонтуйте його або відновіть його. ", проте я врешті-решт виявив, що якщо я просто перезавантажив виконуваний файл CU, він виявив статус оновлення як" Непомірно встановлений "і дозволив мені просто запустити оновлення ще раз, після чого воно успішно завершилось, а головна база даних та всі інші відкрилися без проблем.


Гарне доповнення до списку; дякую за включення.
BradC
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.