Ось декілька напрямків, які я би дослідив. Не роби все це (деякі з них є різними методами досягнення тієї ж мети), але варто задуматися:
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
(за допомогою будь-якої з перерахованих вище методик) вам слід дослідити будь-які зміни, які можуть бути втрачені, якби вони були внесені після резервної копії, яку ви тільки що відновили:
- Зміни безпеки
- Нові бази даних (файли все ще будуть на диску, просто приєднайте їх)
- Налаштування сервера
Немає магічного способу їх знайти, вам доведеться повернутися до документації вашого власного підприємства для таких змін, якщо вони є.