К статье
Практический материал

Администрирование · 11 мин

Как восстановить базу данных 1С на SQL Server

Как восстановить базу 1С на SQL Server из бэкапа .bak или файлов .mdf: пошаговые инструкции, команды T-SQL, проверка результата и типичные ошибки.

Клиент-серверная база 1С физически хранится в СУБД — чаще всего Microsoft SQL Server. Поэтому восстановление такой базы выполняется средствами самого SQL Server: либо из резервной копии .bak, либо подключением файлов данных .mdf и журнала .ldf. Конфигуратор 1С в этой процедуре участвует только на финальном этапе — для проверки, что база открывается и работает корректно.

Главный риск при восстановлении — перезаписать рабочую базу устаревшей копией или потерять данные, накопленные после создания бэкапа. Поэтому перед любыми действиями нужно зафиксировать текущее состояние: сделать резервную копию существующей (пусть и повреждённой) базы и скопировать файлы .mdf/.ldf, если они доступны. Это «страховочный» слой, к которому можно вернуться при неудаче.

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

Определите, из чего будете восстанавливать базу

Порядок действий зависит от того, какие исходные данные у вас есть. Возможны три типичные ситуации: есть актуальный файл резервной копии .bak, есть только файлы базы .mdf и .ldf (например, скопированные с вышедшего из строя сервера), есть только выгрузка .dt, сделанная через конфигуратор. Каждый вариант требует своего подхода.

Файл .dt — это не резервная копия SQL Server, а выгрузка средствами 1С. Он загружается через конфигуратор в заранее созданную пустую базу и не подходит для восстановления средствами СУБД. Если есть и .bak, и .dt, предпочтителен .bak: он восстанавливается быстрее и сохраняет базу в целостном виде на уровне СУБД.

Маршрут решения

Как выбрать способ восстановления

Есть файл резервной копии .bakВосстанавливайте через SSMS командой RESTORE DATABASE или мастером Restore Database
Есть только файлы .mdf и .ldf с исправного дискаПрисоединяйте базу через Attach в SSMS
Есть только выгрузка .dt из конфигуратораСоздайте новую пустую базу 1С и загрузите в неё .dt через конфигуратор
Нет ни бэкапа, ни файлов, база в статусе SuspectПопробуйте перевести базу в EMERGENCY-режим и проверить DBCC CHECKDB, при неудаче — привлекайте специалиста

Подготовка: что сделать до восстановления

Первое действие — завершить все сеансы пользователей с базой. Открытые соединения блокируют операцию RESTORE, и восстановление завершится ошибкой «database is in use». Сеансы завершают через консоль кластера серверов 1С, через оснастку служб (остановка агента сервера 1С) или установкой базы в однопользовательский режим.

Второе обязательное действие — сохранить текущее состояние. Если база ещё доступна, сделайте полную резервную копию средствами SSMS. Если база недоступна, но файлы .mdf и .ldf читаются, скопируйте их на другой диск. Пока существует эта копия, любую ошибку при восстановлении можно откатить.

Третий шаг — убедиться, что на диске достаточно места. Восстановленная база займёт примерно столько же места, сколько занимала исходная, плюс потребуется место под сам файл бэкапа. Проверьте также версию SQL Server: базу, созданную на более новой версии, нельзя восстановить на более старой — это жёсткое ограничение СУБД.

Восстановление из файла резервной копии .bak

Стандартный способ — графический мастер в SQL Server Management Studio. Откройте SSMS, подключитесь к экземпляру сервера, щёлкните правой кнопкой по узлу «Базы данных» и выберите «Восстановить базу данных». Укажите источник «Устройство» и путь к файлу .bak. Если восстанавливаете поверх существующей базы, на вкладке «Параметры» отметьте «Перезаписать существующую базу данных (WITH REPLACE)» — без этого флага операция будет отклонена.

Обратите внимание на вкладку «Файлы»: там указаны пути, куда будут размещены .mdf и .ldf. Если бэкап делался на другом сервере с иной структурой дисков, пути нужно скорректировать вручную, иначе восстановление завершится ошибкой доступа.

Тот же результат даёт команда T-SQL, которая удобнее для автоматизации и повторяемых операций:

sql
RESTORE DATABASE [TradeBase]
FROM DISK = N'D:\Backups\TradeBase_full.bak'
WITH REPLACE,
MOVE N'TradeBase' TO N'D:\SQLData\TradeBase.mdf',
MOVE N'TradeBase_log' TO N'D:\SQLData\TradeBase_log.ldf';

Имена логических файлов в предложении MOVE должны совпадать с именами внутри бэкапа. Узнать их можно командой RESTORE FILELISTONLY FROM DISK = 'путь_к_бэкапу' — она выводит список файлов, хранящихся в копии.

Порядок восстановления из .bak
  1. 1
    Завершите сеансы пользователей и сделайте копию текущего состояния базы
  2. 2
    Откройте SSMS и проверьте свободное место на целевом диске
  3. 3
    Выполните RESTORE FILELISTONLY, чтобы узнать логические имена файлов
  4. 4
    Запустите RESTORE DATABASE с параметрами REPLACE и MOVE
  5. 5
    Дождитесь сообщения об успешном завершении и проверьте статус базы
  6. 6
    Откройте базу в 1С и выполните контрольную проверку данных

Восстановление присоединением файлов .mdf и .ldf

Если бэкапа нет, но сохранились файлы базы данных — например, их скопировали с отказавшего сервера, — базу можно присоединить к новому экземпляру SQL Server. В SSMS щёлкните правой кнопкой по узлу «Базы данных», выберите «Присоединить», добавьте файл .mdf. Файл журнала .ldf подтянется автоматически, если лежит рядом; если журнал потерян, его можно удалить из списка — SQL Server создаст новый пустой журнал, но это допустимо только если база была корректно закрыта перед копированием.

Критическое условие: файлы .mdf/.ldf должны быть скопированы при остановленной службе SQL Server или после отсоединения базы. Файлы, скопированные «на горячую» с работающего сервера, почти гарантированно несогласованны, и присоединить их не удастся. Если копия снята теневым копированием (VSS) — шансы выше, но проверка целостности обязательна.

После присоединения проверьте, что база перешла в статус ONLINE, и сразу выполните проверку целостности:

sql
DBCC CHECKDB (N'TradeBase') WITH NO_INFOMSGS;

Подключение восстановленной базы к 1С

Если база восстановлена на тот же сервер под тем же именем и сервер 1С не менялся, дополнительных действий обычно не требуется — информационная база в консоли кластера уже ссылается на нужную базу данных. Достаточно запустить сеансы и проверить вход.

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

После подключения запустите конфигуратор и выполните тестирование и исправление информационной базы в режиме проверки логической целостности. Это выявит рассогласования на уровне 1С, которые не видны средствами SQL Server. Также полезно сверить ключевые показатели — остатки по складу, взаиморасчёты, обороты за последний закрытый период — с данными, известными пользователям.

Контрольные точки

Как проверить результат восстановления

Статус базы в SSMS
Норма

База в состоянии ONLINE, без пометок Suspect или Recovery Pending

Тревожный признак

База в статусе Suspect, Restoring или недоступна

DBCC CHECKDB
Норма

Проверка завершилась без сообщений об ошибках

Тревожный признак

Есть сообщения об ошибках целостности страниц или цепочек данных

Вход в 1С
Норма

Пользователи входят, документы и отчёты открываются

Тревожный признак

Ошибки соединения с СУБД или падение сеансов

Данные за последний период
Норма

Остатки и обороты совпадают с ожидаемыми значениями

Тревожный признак

Пропали документы или расхождения в итогах

Что делать, если база повреждена и бэкапа нет

Ситуация, когда база в статусе Suspect, а резервной копии нет, — самая тяжёлая. Первый шаг — перевести базу в аварийный режим: ALTER DATABASE [Имя] SET EMERGENCY. В этом режиме база доступна только для чтения, и можно попытаться выгрузить данные скриптами или средствами экспорта.

Далее выполняется DBCC CHECKDB с параметром REPAIR_ALLOW_DATA_LOSS после перевода базы в однопользовательский режим. Название параметра честно отражает суть: восстановление идёт с потерей данных — повреждённые страницы и цепочки записей удаляются. Для базы 1С это почти всегда означает потерю части документов или регистров, поэтому такой ремонт — крайняя мера, после которой обязательна полная сверка данных.

Если ценность данных высока, а собственного опыта восстановления повреждённых баз нет, разумнее остановиться на этапе EMERGENCY-режима и привлечь специалиста по SQL Server. Неумелые действия на этом этапе сокращают шансы даже на профессиональное восстановление.

Типичные ошибки при восстановлении
01
Восстановление поверх рабочей базы без предварительной копии — при неудаче теряются обе версии
02
Забытый флаг WITH REPLACE — операция отклоняется с ошибкой, время простоя растёт
03
Попытка восстановить бэкап с новой версии SQL Server на старую — технически невозможно, нужен сервер той же или более новой версии
04
Копирование .mdf/.ldf с работающего сервера без остановки службы — файлы несогласованны и не присоединяются
05
Отсутствие проверки DBCC CHECKDB после восстановления — скрытые повреждения всплывают в самый неподходящий момент
06
Права учётной записи сервера 1С не выданы на новую базу — 1С не подключается, хотя база исправна

Профилактика: как не оказаться без бэкапа

Настройте регулярное резервное копирование средствами SQL Server: полные копии ежедневно, разностные или копии журнала транзакций — несколько раз в день. Для баз в полной модели восстановления (Full) копии журнала позволяют восстановить состояние на произвольный момент времени, а не только на момент последнего бэкапа.

Храните копии минимум на двух независимых носителях, один из которых физически отделён от сервера. И периодически выполняйте контрольное восстановление на тестовом сервере: бэкап, который ни разу не проверяли восстановлением, нельзя считать надёжным.

Итог

Что важно запомнить

Базу 1С на SQL Server восстанавливают средствами СУБД: RESTORE DATABASE из .bak или присоединение .mdf/.ldf. Перед началом всегда фиксируйте текущее состояние, после восстановления проверяйте целостность через DBCC CHECKDB и сверяйте данные в 1С. Регулярные проверенные бэкапы — единственная надёжная защита.

Часто задаваемые вопросы

Можно ли восстановить базу 1С из .bak на SQL Server другой версии?

Только в сторону повышения версии: бэкап со старого сервера восстанавливается на новом без проблем. Обратное невозможно — SQL Server не поддерживает восстановление базы на версию ниже той, где она была создана. Если целевой сервер старше, вариант один: промежуточный сервер нужной версии и перенос данных скриптами или выгрузкой .dt.

Чем восстановление из .bak отличается от загрузки .dt?

Файл .bak — копия на уровне СУБД, восстанавливается быстро и сохраняет базу целиком, включая все служебные структуры. Файл .dt — выгрузка средствами 1С, загружается дольше, требует предварительно созданной пустой базы и иногда «теряет» специфические настройки. Для аварийного восстановления предпочтителен .bak, .dt удобен для переноса между разными СУБД.

База в статусе Recovery Pending — что это значит?

SQL Server не может завершить восстановление базы после сбоя — чаще всего из-за нехватки места на диске или недоступности файлов. Проверьте свободное место, доступность дисков с .mdf и .ldf, затем перезапустите службу SQL Server или выполните RESTORE DATABASE с параметром RECOVERY. Если не помогло — действуйте как при статусе Suspect.

Можно ли восстановить данные на конкретный момент времени?

Да, если база работала в полной модели восстановления и у вас есть цепочка: полная копия + копии журнала транзакций до нужного момента. В мастере восстановления SSMS или в команде RESTORE LOG указывается параметр STOPAT с датой и временем. В простой модели восстановления (Simple) такая возможность отсутствует — только на момент создания копии.

Почему после восстановления 1С не подключается к базе?

Наиболее частые причины: учётная запись сервера 1С не имеет прав на восстановленную базу (нужна роль db_owner), в свойствах информационной базы в консоли кластера указаны старые имя сервера или имя базы, либо база осталась в однопользовательском режиме после обслуживания. Проверьте эти три пункта в указанном порядке.

Нужно ли останавливать сервер 1С на время восстановления?

Строго говоря, достаточно завершить сеансы с конкретной базой — останавливать весь агент сервера 1С не обязательно, если на нём работают другие базы. Но если восстановление затрагивает общие ресурсы сервера или выполняется в нерабочее время, остановка агента — простой и надёжный способ гарантировать отсутствие подключений.