Ситуация, когда один из дисков сервера выходит из строя, всегда является стрессовой для системного администратора. Особенно критично, если на погибшем диске располагались активные файлы базы данных, а на оставшемся — то, что пользователь считает «бэкапом». В этой статье мы подробно разберем, как действовать в такой ситуации, почему возникает ошибка 5171 и как правильно вернуть базу в строй, если у вас остался только файл .mdf.
Прежде всего, проанализируем ситуацию с типами файлов. В среде MS SQL Server существует принципиальная разница между файлом резервной копии и файлом данных:
Restore (Восстановить).Рассмотрим ошибку автора темы: он пытался выполнить операцию Restore, указывая файл .mdf. Именно поэтому SQL Server выдает ошибку, так как ожидает структуру архивного файла, а получает структуру рабочего файла данных.
Ошибка 5171 сигнализирует о том, что заголовок файла поврежден или не распознается сервером как корректный файл базы данных. Выясним основные причины её появления:
.mdf от более новой версии SQL Server к более старой (например, с версии 2019 на 2016).Проанализируем первый шаг: проверку прав. Убедимся, что учетная запись, от имени которой запущена служба MSSQLSERVER, имеет полный доступ к папке с файлом. Нажмем правой кнопкой на папку, выберем «Свойства» — «Безопасность» и добавим пользователя NETWORK SERVICE или MSSQLSERVER с полными правами.
Поскольку у нас на руках файл .mdf, нам нужно не восстанавливать базу, а «присоединять» её. Разберем по шагам, как это сделать в SQL Server Management Studio (SSMS):
Databases и выберем пункт Attach... (Присоединить)..mdf..ldf) был утерян вместе с погибшим диском, SQL Server подсветит его красным цветом в нижней части окна. Выделим строку с логом и нажмем Remove.Если графический интерфейс выдает ошибку, рассмотрим более продвинутый метод с использованием T-SQL скрипта. Проанализируем ситуацию, когда лог-файл отсутствует полностью:
USE [master];
GO
CREATE DATABASE [Имя_Вашей_Базы]
ON (FILENAME = 'C:\Path\To\Your\File.mdf')
FOR ATTACH_REBUILD_LOG;
GO
Команда FOR ATTACH_REBUILD_LOG инициирует создание нового пустого файла лога. Это сработает только в том случае, если база была корректно выключена (Clean Shutdown). Если же произошел аварийный сбой, может потребоваться восстановление в режиме EMERGENCY.
После того как база появилась в списке SQL Server, она еще не доступна пользователям 1С. Выясним, как правильно зарегистрировать её в кластере 1С:
sa).Важный момент: Если вы создаете базу заново, убедитесь, что флаг «Создать базу в случае отсутствия» выключен, иначе система может попытаться инициализировать пустую базу поверх существующей.
Так как файл .mdf находился на сервере в момент гибели соседнего диска, нельзя исключать логических повреждений. Проанализируем состояние базы с помощью команды проверки целостности. Выполним следующий запрос в SSMS:
DBCC CHECKDB ('Имя_Вашей_Базы') WITH NO_INFOMSGS, ALL_ERRORMSGS;
Если в результате выполнения вы увидите сообщения об ошибках размещения или логической целостности, это будет означать, что файловая структура пострадала. В таком случае рекомендуется:
.dt.REPAIR_ALLOW_DATA_LOSS (в крайнем случае, так как это может привести к удалению поврежденных данных)..bak, так как он гарантирует консистентность данных.Рассмотрим, как избежать подобных проблем в будущем. Хранение рабочих файлов базы (MDF) и файлов логов (LDF) на разных физических дисках — это хорошая практика для производительности, но она требует надежной системы бэкапирования. Настройте SQL Server Agent для ежедневного создания полных бэкапов в формате .bak и их копирования на внешнее хранилище или в облако. Помните, что простое копирование файлов MDF при работающей службе SQL недопустимо и почти всегда ведет к порче базы.