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

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

Как восстановить бэкап 1С в SQL Server: пошаговое руководство

Подробная инструкция по восстановлению резервной копии 1С в MS SQL Server: подготовка, выполнение RESTORE, настройка прав, проверка базы и типичные ошибки.

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

Важно различать два типа резервных копий. Первый — выгрузка из конфигуратора в файл с расширением .dt: он восстанавливается средствами 1С и не зависит от СУБД. Второй — нативный бэкап SQL Server с расширением .bak, который восстанавливается через SQL Server Management Studio или командой T-SQL. В этой статье рассматривается именно второй сценарий, а также моменты, где .dt может оказаться единственным рабочим вариантом.

Перед началом работ убедитесь, что у вас есть доступ к серверу СУБД с правами, достаточными для создания базы (роль sysadmin или dbcreator), и что пользователи выведены из рабочей базы, если восстановление идёт поверх неё. Пренебрежение этими условиями — главная причина ошибок вроде «база данных используется».

Определите тип резервной копии и совместимость версий

Первый шаг — понять, что именно лежит в файле бэкапа. Нативный бэкап SQL Server обычно имеет расширение .bak и создаётся через план обслуживания, SSMS или скрипт BACKUP DATABASE. Такой файл привязан к версии SQL Server: бэкап, снятый на более новой версии, нельзя восстановить на более старой. Обратная совместимость работает — старый бэкап на новом сервере восстановится и будет автоматически обновлён.

Если у вас файл .dt — это выгрузка информационной базы из конфигуратора 1С. Его нельзя восстановить средствами SQL Server: сначала создаётся пустая база на SQL Server, потом пустая информационная база 1С, и уже в неё загружается .dt через конфигуратор (Администрирование → Загрузить информационную базу). Этот путь дольше и требовательнее к ресурсам, но работает между любыми версиями СУБД.

Узнать версию SQL Server, на которой снят бэкап, можно без восстановления — командой RESTORE HEADERONLY. Она вернёт служебную информацию, включая SoftwareVersionMajor и дату создания копии. Это избавит от бесплодных попыток восстановить несовместимый файл.

sql
RESTORE HEADERONLY FROM DISK = N'D:\Backups\base1c.bak';

Подготовьте сервер и права доступа

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

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

Если восстановление идёт поверх существующей рабочей базы, завершите все сеансы пользователей 1С и отключите регламентные задания на сервере 1С. Открытые соединения не дадут выполнить RESTORE с опцией REPLACE. Альтернатива — перевести базу в однопользовательский режим с немедленным откатом транзакций, но делать это на продуктиве нужно осознанно.

Восстановите бэкап через SQL Server Management Studio

Графический способ подходит тем, кто редко работает с T-SQL. Откройте SSMS, подключитесь к серверу, в обозревателе объектов щёлкните правой кнопкой по узлу «Базы данных» и выберите «Восстановить базу данных». В качестве источника укажите «Устройство» и добавьте файл .bak.

На вкладке «Файлы» проверьте пути восстановления: по умолчанию SSMS предложит пути из бэкапа, которые могут не существовать на вашем сервере. Укажите актуальные каталоги для .mdf и .ldf. На вкладке «Параметры» при восстановлении поверх существующей базы установите флажок «Перезаписать существующую базу данных (WITH REPLACE)» и при необходимости «Закрыть существующие соединения».

После нажатия OK дождитесь завершения операции. Для больших баз процесс занимает от нескольких минут до часов — прогресс отображается в окне восстановления. Признак успеха — сообщение о том, что база данных восстановлена, и её появление в списке в состоянии Online.

Восстановление через SSMS
  1. 1
    Подключитесь к SQL Server и откройте «Восстановить базу данных»
  2. 2
    Выберите источник «Устройство» и укажите файл .bak
  3. 3
    На вкладке «Файлы» исправьте пути к .mdf и .ldf на существующие каталоги
  4. 4
    При восстановлении поверх базы включите WITH REPLACE и закрытие соединений
  5. 5
    Запустите восстановление и дождитесь сообщения об успехе
  6. 6
    Проверьте, что база в списке имеет состояние Online

Восстановите бэкап командой T-SQL

Скриптовый способ быстрее для повторяющихся задач и обязателен при автоматизации. Сначала посмотрите логические имена файлов внутри бэкапа командой RESTORE FILELISTONLY — они понадобятся для предложения MOVE, если пути на целевом сервере отличаются от исходных.

sql
RESTORE FILELISTONLY FROM DISK = N'D:\Backups\base1c.bak';
GO
RESTORE DATABASE [TradeBase]
FROM DISK = N'D:\Backups\base1c.bak'
WITH MOVE N'TradeBase' TO N'D:\SQLData\TradeBase.mdf',
MOVE N'TradeBase_log' TO N'D:\SQLData\TradeBase_log.ldf',
REPLACE, RECOVERY, STATS = 10;

Параметр RECOVERY переводит базу в рабочее состояние после наката — именно он нужен в большинстве случаев. NORECOVERY оставляет базу в состоянии восстановления и применяется только если вы планируете докатывать дополнительные бэкапы журнала. STATS = 10 выводит прогресс каждые 10 процентов, что удобно для больших файлов.

Если команда завершается ошибкой «logical file is not part of database», проверьте точность логических имён из FILELISTONLY — они чувствительны к регистру и пробелам. Ошибка о том, что база используется, означает активные подключения: завершите сеансы или добавьте перед RESTORE перевод базы в SINGLE_USER с ROLLBACK IMMEDIATE.

Настройте базу после восстановления

Восстановленная база часто содержит пользователей SQL, «потерянных» на новом сервере: логины существуют в базе, но не связаны с серверными учётными записями. Если сервер 1С подключается к СУБД под отдельным логином SQL, создайте его на сервере и привяжите к пользователю базы, либо используйте sp_change_users_login или ALTER USER для сопоставления.

Проверьте модель восстановления базы. Если бэкап снят с сервера, где стояла модель Full, а на новом сервере нет регламентного бэкапа журнала, журнал транзакций будет расти бесконечно. Для тестовых и небольших рабочих баз обычно достаточно модели Simple. Также имеет смысл обновить статистику и перестроить индексы, если база переехала с заметно другой конфигурации железа.

Уровень совместимости базы (compatibility level) после восстановления остаётся от старого сервера. Обычно это не мешает работе 1С, но при сильном расхождении версий стоит свериться с требованиями используемой платформы 1С к СУБД.

Зарегистрируйте базу в 1С и проверьте результат

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

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

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

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

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

Состояние базы в SSMS
Норма

Online, без суффиксов Restoring или Suspect

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

Restoring — выполнен RESTORE с NORECOVERY; Suspect — повреждение, нужна диагностика

Вход в конфигуратор 1С
Норма

Конфигуратор открывается, версия конфигурации читается

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

Ошибка соединения с СУБД — проверьте логин SQL и права

Данные в режиме предприятия
Норма

Отчёты строятся, итоги совпадают с ожидаемыми

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

Пустые отчёты или ошибки — возможно, восстановлен не тот бэкап

Типичные ошибки и как их избежать

Типичные ошибки
01
Попытка восстановить бэкап с новой версии SQL Server на старую — операция принципиально невозможна, используйте выгрузку .dt или поднимите совместимый сервер
02
Восстановление поверх рабочей базы без предварительного бэкапа текущего состояния — потеря данных за период после снятия восстанавливаемой копии
03
Игнорирование путей файлов — RESTORE падает, потому что каталоги из бэкапа не существуют на новом сервере; всегда проверяйте MOVE
04
Забытый пользователь SQL после переезда — база восстановлена, но сервер 1С не может подключиться
05
Запуск тестовой копии без отключения регламентных заданий и обменов — копия рассылает реальные документы контрагентам

Отдельно стоит сказать о битых бэкапах. Если файл повреждён, RESTORE завершится ошибкой контрольной суммы. Иногда помогает опция CONTINUE_AFTER_ERROR, но восстановленная таким способом база может содержать повреждённые данные — её следует проверить командой DBCC CHECKDB и использовать только как временное решение. Регулярно проверяйте свои бэкапы тестовым восстановлением: копия, которую никогда не пытались развернуть, не считается надёжной.

Если база очень большая и время восстановления критично, учитывайте, что сжатые бэкапы (WITH COMPRESSION) разворачиваются дольше при прочих равных, а скорость сильно зависит от дисковой подсистемы. Планируйте окно обслуживания с запасом.

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

Как выбрать действие

Есть .bak и версия целевого SQL Server не ниже исходнойВосстанавливайте через SSMS или RESTORE DATABASE — это самый быстрый путь
Версия целевого SQL Server ниже той, где снят бэкапПопросите выгрузку .dt из конфигуратора или разверните временный сервер нужной версии
Есть только файл .dtСоздайте пустую базу на SQL Server, пустую ИБ 1С и загрузите .dt через конфигуратор
Нужно откатить только часть данных, а не всю базуВосстановите копию рядом под другим именем и перенесите нужные данные обработкой

Частые вопросы

Можно ли восстановить бэкап 1С SQL на другой сервер с другим именем базы?

Да. В SSMS просто задайте новое имя в поле «База данных» окна восстановления, в T-SQL укажите его в RESTORE DATABASE. Логические имена файлов останутся прежними, но на работу 1С это не влияет — важно, чтобы в консоли сервера 1С было указано фактическое имя базы.

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

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

Почему RESTORE выдаёт ошибку «база данных используется»?

К восстанавливаемой базе есть активные подключения — сеансы пользователей 1С, фоновые задания или открытое окно SSMS с контекстом этой базы. Завершите сеансы в консоли сервера 1С или переведите базу в SINGLE_USER WITH ROLLBACK IMMEDIATE перед восстановлением.

Что делать, если после восстановления 1С не подключается к базе?

Чаще всего проблема в пользователе SQL: на новом сервере нет логина, под которым сервер 1С обращается к СУБД, или он не сопоставлен пользователю внутри восстановленной базы. Создайте логин, привяжите его к пользователю базы и проверьте строку подключения в консоли сервера 1С.

Можно ли восстановить отдельную таблицу из бэкапа SQL?

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

Нужно ли что-то делать в 1С после восстановления бэкапа на тот же сервер?

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

Итог

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

Определите тип копии (.bak или .dt), проверьте совместимость версий SQL Server и права доступа, восстановите базу через SSMS или RESTORE с корректными путями MOVE, затем настройте логины SQL, зарегистрируйте базу в 1С и проверьте данные. Перед восстановлением поверх рабочей базы всегда снимайте её текущий бэкап.