Как восстановить базу 1С из файла MDF после сбоя SSD и исправить ошибку 5171

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Ситуация, когда один из дисков сервера выходит из строя, всегда является стрессовой для системного администратора. Особенно критично, если на погибшем диске располагались активные файлы базы данных, а на оставшемся — то, что пользователь считает «бэкапом». В этой статье мы подробно разберем, как действовать в такой ситуации, почему возникает ошибка 5171 и как правильно вернуть базу в строй, если у вас остался только файл .mdf.

Различие между бэкапом и файлом базы данных

Прежде всего, проанализируем ситуацию с типами файлов. В среде MS SQL Server существует принципиальная разница между файлом резервной копии и файлом данных:

  1. Файл резервной копии (.bak) — это специальный архив, созданный средствами SQL Server. Чтобы вернуть данные из него, используется операция Restore (Восстановить).
  2. Файл данных (.mdf) — это сама база данных в «живом» виде. Если у вас есть этот файл, значит, вы имеете саму базу, а не её копию.
  3. Файл лога транзакций (.ldf) — сопутствующий файл, в котором хранятся записи обо всех изменениях.

Рассмотрим ошибку автора темы: он пытался выполнить операцию Restore, указывая файл .mdf. Именно поэтому SQL Server выдает ошибку, так как ожидает структуру архивного файла, а получает структуру рабочего файла данных.

Устранение ошибки 5171 и подготовка файлов

Ошибка 5171 сигнализирует о том, что заголовок файла поврежден или не распознается сервером как корректный файл базы данных. Выясним основные причины её появления:

Проанализируем первый шаг: проверку прав. Убедимся, что учетная запись, от имени которой запущена служба MSSQLSERVER, имеет полный доступ к папке с файлом. Нажмем правой кнопкой на папку, выберем «Свойства» — «Безопасность» и добавим пользователя NETWORK SERVICE или MSSQLSERVER с полными правами.

Восстановление базы через операцию Attach (Присоединение)

Поскольку у нас на руках файл .mdf, нам нужно не восстанавливать базу, а «присоединять» её. Разберем по шагам, как это сделать в SQL Server Management Studio (SSMS):

  1. Запустим SSMS и подключимся к экземпляру сервера.
  2. Нажмем правой кнопкой мыши на ветку Databases и выберем пункт Attach... (Присоединить).
  3. В появившемся окне нажмем кнопку Add и укажем путь к нашему файлу .mdf.
  4. Если файл лога (.ldf) был утерян вместе с погибшим диском, SQL Server подсветит его красным цветом в нижней части окна. Выделим строку с логом и нажмем Remove.
  5. Нажмем ОК. Сервер попытается создать новый лог транзакций автоматически.

Если графический интерфейс выдает ошибку, рассмотрим более продвинутый метод с использованием 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.

Регистрация восстановленной базы в консоли 1С:Предприятие

После того как база появилась в списке SQL Server, она еще не доступна пользователям 1С. Выясним, как правильно зарегистрировать её в кластере 1С:

  1. Откроем «Администрирование серверов 1С Предприятия».
  2. Перейдем в ветку «Информационные базы».
  3. Создадим новую информационную базу.
  4. В поле «Имя» укажем название базы, как оно будет отображаться в списке выбора 1С.
  5. В поле «Имя базы данных» укажем точное имя, которое мы задали в SQL Server при присоединении MDF-файла.
  6. Укажем параметры сервера базы данных и пользователя (обычно sa).

Важный момент: Если вы создаете базу заново, убедитесь, что флаг «Создать базу в случае отсутствия» выключен, иначе система может попытаться инициализировать пустую базу поверх существующей.

Проверка целостности данных после сбоя

Так как файл .mdf находился на сервере в момент гибели соседнего диска, нельзя исключать логических повреждений. Проанализируем состояние базы с помощью команды проверки целостности. Выполним следующий запрос в SSMS:

DBCC CHECKDB ('Имя_Вашей_Базы') WITH NO_INFOMSGS, ALL_ERRORMSGS;

Если в результате выполнения вы увидите сообщения об ошибках размещения или логической целостности, это будет означать, что файловая структура пострадала. В таком случае рекомендуется:

Рекомендации по предотвращению подобных ситуаций

Рассмотрим, как избежать подобных проблем в будущем. Хранение рабочих файлов базы (MDF) и файлов логов (LDF) на разных физических дисках — это хорошая практика для производительности, но она требует надежной системы бэкапирования. Настройте SQL Server Agent для ежедневного создания полных бэкапов в формате .bak и их копирования на внешнее хранилище или в облако. Помните, что простое копирование файлов MDF при работающей службе SQL недопустимо и почти всегда ведет к порче базы.

← На главную