Как восстановить базу 1С из файлов MDF и LDF и подключить ее к серверу

Системный администратор 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Аварийный выход из строя оборудования — одна из самых критических ситуаций в работе системного администратора, особенно когда актуальные резервные копии отсутствуют. Если в распоряжении остались только первичные файлы данных СУБД (mdf) и журнал транзакций (ldf), базу данных можно вернуть к жизни. Разберем по шагам, как правильно перенести данные на новый экземпляр MS SQL Server, зарегистрировать информационную базу в кластере серверов 1С и избежать распространенных системных ошибок.

Выясним причину ошибки: почему 1С предлагает создать новую базу

Проанализируем ситуацию: системный администратор развернул новый экземпляр MS SQL Server, успешно присоединил файлы базы данных через SQL Server Management Studio (SSMS), однако клиентское приложение 1С сообщает, что информационная база не обнаружена, и предлагает создать новую. Причина кроется в архитектуре клиент-серверного взаимодействия 1С:Предприятие. Платформа 1С в клиент-серверном режиме обращается не напрямую к таблицам MS SQL Server, а взаимодействует со службой кластера серверов 1С. Если база примонтирована на уровне СУБД, но не зарегистрирована в консоли администрирования кластера серверов 1С, служба 1С просто не знает о существовании этой базы и трактует обращение пользователя как попытку инициализации новой информационной базы.

Шаг 1. Присоединение файлов MDF и LDF к экземпляру MS SQL Server

Рассмотрим процедуру подключения файлов на сервере СУБД. Перед началом убедимся, что служба SQL Server имеет права на чтение и запись в каталог, где лежат перенесенные файлы.

  1. Запустим среду SQL Server Management Studio (SSMS) и авторизуемся под учетной записью с административными правами (например, под системным пользователем sa).
  2. В обозревателе объектов нажмем правой кнопкой мыши на ветку Databases и выберем пункт Attach... (Присоединить).
  3. Нажмем кнопку Add... и укажем путь к нашему файлу mdf. Файл журнала ldf при этом подтянется автоматически, если он расположен в том же каталоге.
  4. Если файл ldf поврежден или утерян в результате аварийного отключения, стандартное присоединение завершится ошибкой. В этом случае журнал транзакций можно пересоздать заново принудительной T-SQL командой:

CREATE DATABASE [TradeBase] 
ON (FILENAME = 'D:\SQLData\TradeBase.mdf') 
FOR ATTACH_REBUILD_LOG;

Важно: при присоединении файла mdf к более новой версии СУБД (например, при переходе с SQL Server 2000/2005 на SQL Server 2008) происходит автоматическое и необратимое повышение внутренней версии базы данных. Вернуть базу обратно на старую версию сервера простым отсоединением файлов будет уже невозможно.

Шаг 2. Настройка сопоставления пользователей и параметров сортировки

Разберем тонкости настройки безопасности и параметров СУБД, игнорирование которых приводит к падению соединений 1С:

  1. Параметры сортировки (Collation): убедимся, что параметры сопоставления нового SQL Server и системной базы tempdb совпадают с параметрами базы 1С (стандартным является Cyrillic_General_CI_AS). Несовпадение вызовет критические ошибки при формировании временных таблиц.
  2. Изолированные пользователи (Orphaned Users): при переносе базы на новый сервер учетные записи внутри базы теряют связь с серверными логинами из-за несовпадения идентификаторов безопасности (SID). Если служба кластера серверов 1С обращается к базе под специальным SQL-пользователем, восстановим привязку командой:

USE [TradeBase];
EXEC sp_change_users_login 'Update_One', 'UserName1C', 'UserName1C';

Также можно повторно выдать учетной записи роль db_owner в свойствах сопоставления пользователей базы данных.

Шаг 3. Регистрация базы в консоли кластера серверов 1С

Теперь устраним главную причину ошибки, с которой столкнулся автор темы, и свяжем сервер приложений 1С с СУБД:

  1. Откроем утилиту Консоль кластера серверов 1С:Предприятия.
  2. Раскроем дерево нужного кластера, перейдем в ветку Информационные базы.
  3. Нажмем правой кнопкой мыши и выберем Создать -> Информационная база.
  4. Заполним параметры подключения:
    1. Имя: имя базы, которое будет видно пользователям (например, TradeBase).
    2. Сервер баз данных: сетевое имя или IP-адрес сервера СУБД (при установке на один компьютер можно указать localhost или имя экземпляра).
    3. Тип СУБД: выберем MS SQL Server.
    4. Имя базы данных: точное имя базы данных, как оно задано в SQL Server Management Studio.
    5. Пользователь сервера БД и Пароль: логин и пароль учетной записи SQL, обладающей правами владельца базы.
    6. Создать базу данных в случае ее отсутствия: обязательно снимем этот флажок. Если оставить его включенным, сервер попытается создать новую пустую базу данных и затрет существующую конфигурацию.
  5. Нажмем ОК для сохранения параметров.

Шаг 4. Учет совместимости версий платформы 1С и MS SQL Server

Проанализируем техническую совместимость связки компонентов. Если используется старая платформа (в теме упоминается ветка 8.1 и переход на SQL Server 2008), следует помнить:

  1. Полноценная поддержка MS SQL Server 2008 в технологической платформе 1С:Предприятие 8.1 появилась только начиная с версии 8.1.13.
  2. Если используется релиз платформы ниже 8.1.13, работа с SQL Server 2008 приведет к синтаксическим ошибкам запросов СУБД. В этом случае необходимо обновить платформу 1С:Предприятие до финального стабильного релиза ветки (8.1.15) либо использовать экземпляр MS SQL Server 2005.

Шаг 5. Контроль целостности данных после аварийного сбоя

Поскольку сервер завершил работу аварийно (сгорела материнская плата), незафиксированные транзакции могли нарушить логическую и физическую структуру таблиц. Обязательно выполним следующие регламентные действия:

  1. Проверим базу на физические повреждения в среде SSMS:

DBCC CHECKDB ('TradeBase') WITH NO_INFOMSGS, ALL_ERRORMSGS;

  1. Запустим базу в режиме Конфигуратор, перейдем в меню Администрирование -> Тестирование и исправление... и выполним полную проверку логической и ссылочной целостности информационной базы.
  2. Сразу после успешной проверки создадим полную резервную копию базы средствами SQL Server, а также выполним выгрузку информационной базы в файл dt через Конфигуратор, чтобы убедиться в отсутствии скрытых повреждений таблиц.
← На главную