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

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

Что такое файл .bak и когда требуется восстановление базы 1С

Файл с расширением .bak — это стандартный формат резервной копии базы данных Microsoft SQL Server, который используется и в экосистеме 1С:Предприятие. Такой бэкап создается либо вручную через SQL Server Management Studio (SSMS), либо автоматически — с помощью задач обслуживания или специализированных утилит вроде 1С:Администрирование сервера. В отличие от архивов .dt (для файлового варианта), .bak содержит полную копию базы данных, включая схемы, индексы и системные таблицы.

Восстановление из .bak может потребоваться в нескольких сценариях:

  • 🔄 Перенос базы на другой сервер или в облако (например, при миграции с локального SQL на 1С:Fresh или 1С:ГISPRU).
  • 💥 Аварийное восстановление после сбоя жесткого диска, вирусной атаки или ошибочного удаления данных.
  • 📊 Тестирование обновлений: перед установкой новой версии платформы или конфигурации часто создают резервную копию, чтобы откатиться в случае проблем.
  • 🔄 Синхронизация данных между филиалами или разными информационными базами.

Важно понимать, что .bak — это не универсальный формат. Он привязан к конкретной версии SQL Server, и попытка восстановить его на более старой или несовместимой версии может привести к ошибкам. Например, бэкап, созданный в SQL Server 2019, не удастся развернуть на SQL Server 2012 без предварительной конвертации.

📊 Как часто вы создаете резервные копии базы 1С?
Ежедневно
Еженедельно
Ежемесячно
Только перед критическими операциями
Никогда

Подготовка к восстановлению: проверка требований и инструментов

Прежде чем приступать к развертыванию базы из .bak, необходимо убедиться, что ваша система соответствует минимальным требованиям. Пропуск этого этапа — основная причина ошибок вроде RESTORE HEADERONLY is terminating abnormally или The database was backed up on a server running version X. That version is incompatible with this server.

Вот что нужно проверить обязательно:

  • 🖥️ Версия SQL Server: должна быть не ниже, чем та, на которой создавался бэкап. Узнать версию можно командой:
    SELECT @@VERSION
  • 📁 Свободное место на диске: файл .bak может занимать меньше места, чем восстановленная база (особенно если в оригинале использовалась компрессия). Рекомендуемый запас — в 1.5–2 раза больше размера бэкапа.
  • 🔑 Права доступа: ваш аккаунт в SQL Server должен иметь роль dbcreator или sysadmin. Для проверки выполните:
    SELECT IS_MEMBER('dbcreator') AS IsDbCreator,
    

    IS_MEMBER('sysadmin') AS IsSysAdmin;

  • 🔄 Режим совместимости базы: если восстанавливаете на более новую версию SQL, проверьте, что режим совместимости соответствует оригинальной версии (например, SQL Server 2016 (130)).

Также подготовьте инструменты, которые могут понадобиться:

Инструмент Назначение Где скачать
SQL Server Management Studio (SSMS) Основной инструмент для восстановления .bak через GUI Официальный сайт Microsoft (бесплатно)
sqlcmd Утилита командной строки для восстановления без GUI Входит в состав SQL Server
1С:Администрирование сервера Управление базами 1С, включая создание/восстановление бэкапов Установочный диск 1С или портал пользователей
DBComparer (от 1С) Сравнение структур баз до и после восстановления Портал 1С:ИТС
💡

Если вы восстанавливаете базу на другом сервере, проверьте совпадение collation (последовательность сортировки). Несовпадение может привести к ошибкам при работе с кириллицей. Узнать текущий collation можно командой SELECT SERVERPROPERTY('Collation').

Пошаговая инструкция: восстановление базы 1С из .bak через SSMS

Самый распространенный способ развернуть базу — использовать SQL Server Management Studio. Этот метод подходит для большинства версий SQL Server (2012 и новее) и позволяет контролировать процесс визуально. Ниже — детальная инструкция с пояснениями каждого шага.

Шаг 1. Подключение к серверу

  1. Запустите SSMS и подключитесь к целевому экземпляру SQL Server (укажите имя сервера, авторизацию — Windows Authentication или SQL Server Authentication).
  2. В дереве объектов разверните папку Databases.

Шаг 2. Запуск мастера восстановления

  1. Правой кнопкой мыши кликните по DatabasesRestore Database....
  2. В поле Destination for restore укажите имя новой базы (например, Base1C_Restored).
  3. В разделе Source выберите Device и нажмите на кнопку обзора (...).
  4. Добавьте файл .bak, выбрав его на диске.

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

  1. На вкладке General проверьте, что выбран правильный бэкап (в списке Backup sets to restore).
  2. Перейдите на вкладку Options и установите флажки:
    • Overwrite the existing database (WITH REPLACE) — если база с таким именем уже существует.
    • Preserve the replication settings (WITH KEEP_REPLICATION) — если использовалась репликация.
    • ❌ Снимите Restrict access to the restored database (WITH RESTRICTED_USER), если нужно сразу начать работу.
  • В разделе Restore the database files as проверьте пути к файлам базы (.mdf и .ldf). При необходимости измените их (например, если восстанавливаете на другой диск).
  • Шаг 4. Завершение процесса

    1. Нажмите OK и дождитесь завершения операции. В логе Messages отобразится статус (успех или ошибка).
    2. Если восстановление прошло успешно, база появится в списке Databases.
    3. Убедиться, что нет подключенных пользователей к целевой базе|Проверить свободное место на диске|Сверить версии SQL Server|Запустить SSMS от имени администратора-->

      Восстановление через командную строку: альтернатива для автоматизации

      Если у вас нет доступа к графическому интерфейсу или нужно восстановить базу в скрипте (например, для автоматического развертывания), можно использовать утилиту sqlcmd или RESTORE DATABASE в SQL Server Query Window. Этот метод особенно полезен для администраторов, управляющих несколькими серверами.

      Базовый синтаксис команды:

      RESTORE DATABASE [ИмяБазы]
      

      FROM DISK = N'C:\Path\To\Your\Backup.bak'

      WITH FILE = 1,

      MOVE 'ИмяЛогическогоФайлаДанных' TO 'C:\Data\Base1C.mdf',

      MOVE 'ИмяЛогическогоФайлаЖурнала' TO 'C:\Logs\Base1C.ldf',

      REPLACE, STATS = 10;

      Где:

      • WITH FILE = 1 — номер набора бэкапа в файле (обычно 1, если бэкап один).
      • MOVE — указывает новые пути для файлов .mdf и .ldf. Имена логических файлов можно узнать командой:
        RESTORE FILELISTONLY FROM DISK = N'C:\Path\To\Backup.bak';
      • REPLACE — разрешает перезапись существующей базы.
      • STATS = 10 — выводит прогресс каждые 10%.

      Пример для восстановления с переименованием базы и изменением путей:

      RESTORE DATABASE [NewBase1C]
      

      FROM DISK = N'D:\Backups\Base1C_20260501.bak'

      WITH MOVE 'Base1C_Data' TO 'E:\SQLData\NewBase1C.mdf',

      MOVE 'Base1C_Log' TO 'F:\SQLLogs\NewBase1C.ldf',

      REPLACE, NOUNLOAD, STATS = 5;

      Как узнать имена логических файлов без SSMS?

      Если у вас нет доступа к SSMS, выполните в командной строке:

      sqlcmd -S ваш_сервер -Q "RESTORE FILELISTONLY FROM DISK = N'путь\к\файлу.bak'"

      В результате вы получите таблицу с колонками LogicalName (имя для MOVE) и PhysicalName (оригинальный путь).

      Критическая деталь: если в файле .bak содержится несколько бэкапов (например, полный + дифференциальный), укажите нужный номер в параметре WITH FILE = N. Узнать количество наборов можно командой RESTORE HEADERONLY FROM DISK = N'путь\к\файлу.bak'.

      Типичные ошибки при восстановлении и как их исправить

      Даже при четком следовании инструкции восстановление из .bak может завершиться ошибкой. Рассмотрим наиболее частые проблемы и способы их решения.

      1. Ошибка: The database was backed up on a server running version X. That version is incompatible with this server

      ⚠️ Внимание: Эта ошибка возникает, если версия SQL Server, на котором создавался бэкап, новее, чем текущая. Например, бэкап с SQL Server 2019 нельзя восстановить на SQL Server 2016. Решения:
      • Обновите целевой сервер до нужной версии.
      • Используйте промежуточный сервер с подходящей версией для конвертации бэкапа в совместимый формат.
      • Экспортируйте данные через Generate Scripts в SSMS (правда, это не сохранит все настройки).

      2. Ошибка: Exclusive access could not be obtained because the database is in use

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

      • 🔄 Переведите базу в режим SINGLE_USER перед восстановлением:
        ALTER DATABASE [ИмяБазы] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
      • 🛑 Закройте все подключения через 1С:Предприятие или Конфигуратор.
      • 🔄 Используйте флаг WITH REPLACE в команде восстановления.

      3. Ошибка: The backup set holds a backup of a database other than the existing 'ИмяБазы'

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

      • Укажите другое имя для целевой базы в команде RESTORE DATABASE.
      • Используйте флаг WITH REPLACE (но это может привести к потере данных, если структуры баз сильно отличаются).

      4. Ошибка: Insufficient space in filegroup 'PRIMARY'

      Не хватает места на диске для файла .mdf. Решения:

      • 📁 Освободите место на целевом диске.
      • 🔄 Укажите другой путь для .mdf с достаточным объемом.
      • 🔧 Уменьшите размер базы перед бэкапом (например, очистив журналы транзакций).
      💡

      Если при восстановлении возникает ошибка с кодировкой (например, кракозябры вместо кириллицы), проверьте параметр COLLATE в настройках сервера. Для русскоязычных баз 1С обычно используется Cyrillic_General_CI_AS.

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

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

      1. Проверка целостности базы данных

      Выполните команду в SSMS:

      DBCC CHECKDB ([ИмяБазы]) WITH NO_INFOMSGS, ALL_ERRORMSGS;

      Если команда вернет ошибки (например, Allocation errors или Consistency errors), база повреждена. В этом случае:

      • Попробуйте восстановить бэкап еще раз.
      • Используйте флаг WITH CONTINUE_AFTER_ERROR (но это может привести к потере данных).
      • Восстановите более ранний бэкап, если он есть.

    2. Проверка подключения из 1С

    1. Запустите 1С:Предприятие в режиме Конфигуратор.
    2. Откройте список баз (Файл → Открыть...) и проверьте, отображается ли восстановленная база.
    3. Подключитесь к базе и выполните тестовые операции (например, откройте справочник или сформируйте отчет).

    3. Сравнение структуры базы

    Если вы восстанавливали базу для замены рабочей, сравните структуры с помощью DBComparer (входит в 1С:ИТС):

    • 🔍 Запустите DBComparer.exe из каталога .
    • Укажите исходную и целевую базы.
    • Проверьте отчет на наличие расхождений в таблицах, индексах или хранимых процедурах.

    4. Проверка бизнес-логики

    Убедитесь, что:

    • 📋 Данные в справочниках и документах отображаются корректно (нет пустых полей или неверных ссылок).
    • 📊 Отчеты формируются без ошибок.
    • 🔄 Обмен данными с другими системами (если настроен) работает стабильно.
    💡

    Если после восстановления 1С выдает ошибку "Не найден ключ лицензии", проверьте, что в таблице Params базы данных сохранены корректные параметры лицензирования. При необходимости перенастройте лицензии через Конфигуратор.

    Особенности восстановления для разных версий 1С и SQL Server

    Процесс восстановления может отличаться в зависимости от версий 1С:Предприятие и SQL Server. Ниже — ключевые нюансы для самых распространенных комбинаций.

    1С 8.3 + SQL Server 2016/2019

    • 🔄 Поддерживаются все современные функции бэкапа, включая COMPRESSION и ENCRYPTION.
    • 📁 Для больших баз (>100 ГБ) рекомендуется использовать BUFFERCOUNT и MAXTRANSFERSIZE в команде RESTORE для ускорения процесса.
    • ⚠️ При восстановлении на SQL Server 2019 бэкапа с SQL Server 2016 может потребоваться обновление уровня совместимости базы.

    1С 8.2 + SQL Server 2012

    • 🔧 Отсутствует поддержка некоторых современных опций (например, RESUMABLE для больших бэкапов).
    • 📋 При восстановлении на более новую версию SQL Server может потребоваться ручная правка системных таблиц (например, sys.databases).
    • ⚠️ Бэкапы, созданные в 1С 8.2, могут содержать устаревшие структуры данных, несовместимые с новыми версиями платформы.

    1С:Fresh и облачные решения

    • 🌥️ Восстановление из .bak в облаке обычно невозможно — вместо этого используется механизм выгрузки/загрузки через 1С:Диск или 1С:EDT.
    • 🔄 Для миграции с локального SQL на 1С:Fresh требуется предварительная конвертация данных в формат .dt.

    1С + PostgreSQL

    ⚠️ Внимание: Если ваша база 1С работает на PostgreSQL (например, в линукс-окружении), формат .bak не подходит. Вместо этого используйте утилиты pg_dump и pg_restore. Пример команды для бэкапа:
    pg_dump -U пользователь -d имя_базы -F c -f backup.dump
    Версия 1С Рекомендуемая версия SQL Server Особенности восстановления
    1С 8.3.20+ SQL Server 2019/2022 Поддержка RESUMABLE для больших бэкапов, улучшенная компрессия.
    1С 8.3.10–8.3.19 SQL Server 2016/2017 Требуется ручная настройка MAXDOP для ускорения восстановления.
    1С 8.2 SQL Server 2012/2014 Ограничения на размер бэкапа (максимум 2 ТБ), нет поддержки шифрования.

    Автоматизация восстановления: скрипты и планировщик задач

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

    1. Скрипт для автоматического восстановления

    Пример PowerShell-скрипта, который восстанавливает базу из .bak и отправляет отчет по email:

    $BackupPath = "D:\Backups\Base1C.bak"
    

    $DatabaseName = "Base1C_Restored"

    $SqlServer = "localhost\SQLEXPRESS"

    Восстановление базы

    sqlcmd -S $SqlServer -Q "

    RESTORE DATABASE [$DatabaseName]

    FROM DISK = N'$BackupPath'

    WITH MOVE 'Base1C_Data' TO 'E:\SQLData\$DatabaseName.mdf',

    MOVE 'Base1C_Log' TO 'F:\SQLLogs\$DatabaseName.ldf',

    REPLACE, STATS = 10;

    "

    Проверка целостности

    $CheckResult = sqlcmd -S $SqlServer -Q "DBCC CHECKDB ([$DatabaseName]) WITH NO_INFOMSGS;" -h -1

    Отправка отчета (требуется настройка SMTP)

    if ($LASTEXITCODE -eq 0) {

    Send-MailMessage -From "admin@domain.com" -To "team@domain.com" -Subject "Восстановление базы 1С успешно" -Body "База $DatabaseName восстановлена. Результат проверки:`n$CheckResult" -SmtpServer "smtp.domain.com"

    } else {

    Send-MailMessage -From "admin@domain.com" -To "team@domain.com" -Subject "ОШИБКА восстановления базы 1С" -Body "Не удалось восстановить базу $DatabaseName. Код ошибки: $LASTEXITCODE" -SmtpServer "smtp.domain.com"

    }

    2. Планировщик задач Windows

    Чтобы скрипт выполнялся автоматически (например, каждое утро), настройте задачу в Task Scheduler:

    1. Откройте Пуск → Планировщик задач → Создать задачу.
    2. На вкладке Триггеры укажите расписание (например, ежедневно в 6:00).
    3. На вкладке Действия добавьте действие Запуск программы и укажите путь к powershell.exe с аргументами:
      -ExecutionPolicy Bypass -File "C:\Scripts\Restore1C.ps1"
    4. На вкладке Условия отметьте Запускать только при питании от сети (для ноутбуков).

    3. Использование 1С:Администрирование сервера

    Если у вас установлен 1С:Предприятие 8.3, можно автоматизировать восстановление через встроенные механизмы:

    1. Откройте 1С:Администрирование сервера (Пуск → 1С Предприятие → Администрирование сервера 1С:Предприятия).
    2. Перейдите в Узлы → Ваш кластер → Базы данных.
    3. Выберите базу, нажмите Восстановить из резервной копии и укажите путь к .bak.
    4. Настройте расписание в Планировщик заданий (вкладка Автоматизация).
    💡

    Автоматизация восстановления особенно полезна для тестовых сред, где требуется регулярно развертывать актуальные данные из продакшн-бэкапов. Однако для продакшн-баз автоматические скрипты следует использовать с осторожностью — лучше добавить ручное подтверждение перед запуском.

    FAQ: Частые вопросы по восстановлению базы 1С из .bak

    Можно ли восстановить бэкап 1С из .bak на более старую версию SQL Server?

    Нет, это невозможно из-за изменений в структуре системных таблиц. SQL Server поддерживает восстановление только на ту же или более новую версию. Например, бэкап с SQL Server 2019 нельзя развернуть на SQL Server 2016. Единственный обходной путь — использовать промежуточный сервер с подходящей версией для экспорта данных в скрипт или .csv.

    Как восстановить базу 1С из .bak, если неизвестны имена логических файлов (.mdf и .ldf)?

    Имена логических файлов можно узнать с помощью команды:

    RESTORE FILELISTONLY FROM DISK = N'путь\к\файлу.bak';

    В результате вы получите таблицу с колонками LogicalName (используется в MOVE) и PhysicalName (оригинальный путь). Эти имена нужно указать в команде RESTORE DATABASE.

    Что делать, если после восстановления 1С выдает ошибку "База данных повреждена"?

    Сначала проверьте целостность базы командой DBCC CHECKDB. Если ошибки подтверждаются:

    1. Попробуйте восстановить бэкап еще раз с флагом WITH CONTINUE_AFTER_ERROR (но это может привести к потере данных).
    2. Восстановите более ранний бэкап, если он есть.
    3. Используйте утилиту chdbfl.exe (входит в поставку 1С) для исправления логических ошибок:
      chdbfl.exe /F "путь\к\файлу.mdf" /R

    Если проблема сохраняется, обратитесь в поддержку 1С с логами ошибок.

    Можно ли восстановить базу 1С из .bak