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

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

Как восстановить базу 1С из bak-файла

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

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

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

Ниже разобран полный порядок действий для связки 1С:Предприятие + MS SQL Server, а также вариант восстановления через T-SQL, отличия от восстановления из .dt и типичные ошибки, из-за которых база не поднимается.

Что такое bak-файл и когда он используется в 1С

Расширение .bak по умолчанию получают полные резервные копии, созданные командой BACKUP DATABASE в SQL Server — вручную, через план обслуживания или сторонними средствами резервного копирования. Внутри файла находится снимок базы данных: таблицы, индексы, хранимые процедуры и служебные структуры, в которых 1С хранит конфигурацию, данные и настройки.

Такой способ резервного копирования применяется только в клиент-серверном варианте работы 1С. Если база файловая (лежит в каталоге в виде файла 1Cv8.1CD), то .bak у неё не бывает — там используются копии каталога или выгрузка в .dt. Поэтому первый шаг перед восстановлением — убедиться, что у вас действительно клиент-серверная база и копия сделана именно из SQL Server.

Что проверить до начала восстановления

Прежде чем запускать восстановление, нужно сопоставить версии и подготовить окружение. Главное ограничение: SQL Server не умеет восстанавливать копии, созданные на более новой версии сервера. База, скопированная на SQL Server 2019, не поднимется на SQL Server 2016 — ошибка будет выдана сразу на этапе чтения заголовка файла. Обратная совместимость (со старой версии на новую) работает.

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

Версия SQL ServerКопия с новой версии на старую не восстановится

SELECT @@VERSION на целевом сервере и сравнить с сервером-источником

Занятость базыАктивные соединения блокируют restore

Завершить сеансы в консоли кластера 1С и проверить sp_who2

Место на дискеНужно не меньше размера исходной базы

Сравнить свободное место с размером .bak и предполагаемой БД

Тип копииПолная, разностная или копия журнала

Разностная копия требует сначала восстановить полную

Восстановление базы через SQL Server Management Studio

Основной инструмент — SQL Server Management Studio (SSMS). Подключитесь к экземпляру SQL Server под учётной записью с правами на восстановление баз (sysadmin или dbcreator). Затем выполните следующие шаги.

Порядок восстановления в SSMS
  1. 1
    Откройте SSMS и подключитесь к нужному экземпляру SQL Server
  2. 2
    Щёлкните правой кнопкой по узлу «Базы данных» и выберите «Восстановить базу данных»
  3. 3
    В поле «Источник» выберите «Устройство» и укажите путь к .bak-файлу
  4. 4
    Проверьте имя целевой базы — при необходимости задайте новое, чтобы не затереть рабочую
  5. 5
    На вкладке «Файлы» проверьте пути размещения mdf и ldf — диски должны существовать и иметь свободное место
  6. 6
    На вкладке «Параметры» при восстановлении поверх существующей базы включите «Перезаписать существующую базу (WITH REPLACE)»
  7. 7
    Нажмите OK и дождитесь сообщения об успешном завершении

Обратите внимание на вкладку «Файлы»: SSMS по умолчанию подставляет пути, зашитые в резервную копию, то есть пути исходного сервера. Если на целевом сервере нет диска с такой буквой или каталога, восстановление упадёт с ошибкой доступа. Исправьте пути на реально существующие.

После завершения база появится в списке баз данных в состоянии «В сети» (Online). Если статус «Восстановление…» (Restoring), значит копия была восстановлена с параметром NORECOVERY — это нужно для цепочек разностных копий, но для одиночной полной копии следует выбирать RECOVERY.

Восстановление через T-SQL-команду

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

sql
RESTORE FILELISTONLY FROM DISK = 'D:\Backups\base1c.bak';
GO
RESTORE DATABASE [MyBase1C]
FROM DISK = 'D:\Backups\base1c.bak'
WITH MOVE 'DataFile' TO 'E:\SQLData\MyBase1C.mdf',
     MOVE 'LogFile'  TO 'E:\SQLData\MyBase1C.ldf',
     REPLACE, RECOVERY;
GO

Параметр REPLACE нужен только при восстановлении поверх существующей базы — без него SQL Server откажется перезаписывать данные. Имена логических файлов (в примере DataFile и LogFile) возьмите из вывода FILELISTONLY, они у каждой базы свои.

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

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

В диалоге создания укажите: тип СУБД — MS SQL Server, имя сервера баз данных, имя базы данных — точно такое, как при восстановлении в SSMS, и пользователя СУБД с правами на эту базу. Галочку «Создать базу данных в случае её отсутствия» ставить не нужно — база уже существует, иначе есть риск получить пустую структуру вместо данных.

Если база регистрируется на том же кластере параллельно с рабочей (например, для тестирования), обязательно задайте другое имя ИБ в кластере и другое имя базы данных в SQL — иначе два объекта кластера будут ссылаться на одни данные, что ведёт к конфликтам блокировок и рассинхронизации.

Проверка результата и первые действия после восстановления

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

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

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

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

База в состоянии Online, размер соответствует ожиданиям

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

Статус Restoring или Suspect — копия восстановлена не полностью или повреждена

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

Конфигуратор и клиент открываются без ошибок соединения

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

Ошибка «информационная база не обнаружена» или ошибка аутентификации СУБД

Актуальность данных
Норма

Последние документы датируются моментом создания копии

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

Данные старше ожидаемых — восстановлен не тот файл копии

Журнал регистрации
Норма

Открывается, содержит записи до даты копии

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

Пустой журнал при том, что в исходной базе он вёлся

Для тестовых копий после восстановления рекомендуется отключить регламентные задания, которые могут «выстрелить» в продуктив: обмены с другими системами, отправку почты, выгрузки в банк. Это делается в настройках ИБ в консоли кластера (блокировка регламентных заданий) либо внутри конфигурации.

Типичные ошибки и их причины

Типичные ошибки
01
Восстановление на SQL Server старой версии — ошибка чтения заголовка копии; решение: поднять копию на сервере той же или более новой версии
02
Неверные пути файлов mdf/ldf — ошибка доступа к каталогу; решение: исправить пути на вкладке «Файлы» или через WITH MOVE
03
Восстановление при активных сеансах — ошибка «база используется»; решение: завершить сеансы в кластере 1С и перевести базу в single_user
04
Включённая галочка «создать базу данных» в консоли кластера — риск получить пустую базу поверх восстановленной
05
Смешение .bak и .dt — попытка загрузить .bak через конфигуратор невозможна в принципе, а .dt нельзя восстановить через SSMS

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

Альтернативы: когда вместо bak нужен dt или другой способ

Способы восстановления и переноса базы 1С

Восстановление из .bak

Быстрый откат и перенос между серверами MS SQL совместимых версий; не подходит для смены СУБД

Загрузка из .dt

Универсальный перенос между любыми СУБД и платформами; медленнее на больших базах и требует монопольного доступа

Копирование файлов mdf/ldf с подключением (attach)

Подходит, если есть сами файлы базы, а не копия; требует корректного отключения базы на источнике

Копия каталога файловой базы

Только для файлового варианта 1С; к SQL-базам неприменимо

Выбор зависит от задачи: аварийное восстановление на том же сервере быстрее всего выполнить из .bak, перенос базы разработчику или в другое окружение с другой СУБД — через .dt, а миграцию между инфраструктурами иногда проще сделать переносом файлов базы с последующим attach.

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

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

Нужно откатить базу на вчерашнее состояние на том же сервереВосстановите последнюю полную .bak-копию через SSMS с параметром REPLACE, предварительно сняв копию текущего состояния
База переезжает на новый сервер с той же версией SQL или новееВосстановите .bak на новом сервере, создайте логин СУБД и зарегистрируйте ИБ в кластере
Целевая СУБД другая (PostgreSQL, Oracle) или файловый режимИспользуйте выгрузку в .dt через конфигуратор, .bak здесь не поможет
Есть только файлы mdf/ldf без bakПодключите их через «Присоединить базу данных» в SSMS, затем зарегистрируйте ИБ в кластере
Итог

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

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

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

Можно ли открыть bak-файл напрямую в конфигураторе 1С?

Нет. Конфигуратор работает с выгрузками .dt, а .bak — формат резервной копии SQL Server. Сначала копия восстанавливается в СУБД, затем база регистрируется в кластере 1С, и только после этого её можно открыть в конфигураторе или клиенте.

Что делать, если при восстановлении появляется ошибка о несовместимости версий?

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

База восстановилась, но 1С пишет «ошибка соединения с сервером баз данных». В чём причина?

Чаще всего дело в правах: логин, указанный при регистрации ИБ, не существует на новом сервере или не сопоставлен с пользователем восстановленной базы. Создайте логин в SSMS и назначьте ему роль db_owner на эту базу. Также проверьте, что в свойствах ИБ указаны правильные имя сервера и имя базы данных.

Можно ли восстановить из .bak только часть данных, например один документ?

Штатными средствами SQL Server из полной копии извлекается только база целиком. Практический приём: восстановить копию рядом под другим именем, открыть её как отдельную ИБ и вручную перенести нужные данные в рабочую базу — через обработки переноса или копирование по OLE/COM.

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

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

Чем .bak отличается от копии, сделанной средствами 1С?

1С не создаёт .bak сама — это формат СУБД. «Родной» для 1С формат резервной копии — выгрузка в .dt через конфигуратор. Копия .bak делается быстрее и удобнее для отката, но привязана к MS SQL Server, тогда как .dt переносится между любыми поддерживаемыми СУБД.