Восстановление системной базы данных master в MSSQL после аппаратного сбоя
Повреждение или потеря системной базы данных master приводит к полной неработоспособности сервера:
- Служба
MSSQLSERVERне запускается и аварийно завершает работу сразу после старта; - В Windows Event Viewer регистрируется ошибка
Cannot recover the master database. SQL Server is unable to run. (Error 3417); - Файлы
master.mdfилиmastlog.ldfповреждены в результате аппаратного сбоя накопителя.
1. Запуск экземпляра SQL Server в однопользовательском режиме (-m)
Для восстановления базы master экземпляр должен быть запущен с параметром конфигурации -m (Single-User Mode) из командной строки администратора:
-- Остановка службы (если она пытается стартовать)
net stop MSSQLSERVER
-- Запуск экземпляра в режиме Single-User с ограничением подключения через SQLCMD
"C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Binn\sqlservr.exe" -c -m"SQLCMD"2. Подключение через SQLCMD и запуск восстановления
Откройте второе окно командной строки с правами администратора:
sqlcmd -S . -EВыполните команду восстановления базы master:
RESTORE DATABASE [master]
FROM DISK = N'E:\Backup\System\master_Full.bak'
WITH REPLACE;
GOПосле успешного восстановления базы master служба SQL Server автоматически остановится. Это нормальное поведение.
3. Запуск службы в штатном режиме
net start MSSQLSERVER4. Что делать, если бэкапа базы master нет (Rebuild System Databases)
Если бэкап master отсутствует, пересоздайте системные базы с дистрибутива:
Setup.exe /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS="DOMAIN\Administrator" /SAPWD="StrongP@ssw0rd!"После пересоздания потребуется заново смонтировать все пользовательские базы (Attach Database) и воссоздать логины.
Частые вопросы (FAQ)
Почему при попытке восстановить master в SSMS возникает ошибка?
Базу master невозможно восстановить через стандартный графический интерфейс SSMS в обычном режиме работы сервера, так как база постоянно открыта и заблокирована всеми процессами движка SQL Server.
Теряются ли логины и серверные триггеры при восстановлении master из старого бэкапа?
Да, восстанавливается состояние метаданных на момент создания бэкапа. Все логины, созданные позже, придется восстановить вручную или синхронизировать SID через sp_change_users_login.
Зачем указывать параметр -m"SQLCMD" при запуске sqlservr.exe?
Параметр -m открывает ровно одно административное подключение. Указание 'SQLCMD' гарантирует, что это единственное соединение займет консольная утилита восстановления, а не фоновая служба Windows или сторонний агент мониторинга.
Как восстановить базу master для именованного экземпляра (Named Instance)?
Запустите sqlservr.exe с ключом -s: sqlservr.exe -c -m"SQLCMD" -s INSTANCENAME, а подключение в sqlcmd выполните как: sqlcmd -S .\INSTANCENAME -E.