Администрирование · 11 мин
Как восстановить базу 1С из резервной копии .bak
Пошаговое восстановление базы 1С из bak-файла через SQL Server Management Studio и sqlcmd. Права, MOVE, проверка результата, типичные ошибки.
Файл с расширением .bak — это резервная копия базы данных Microsoft SQL Server, созданная командой BACKUP DATABASE или через план обслуживания. Если ваша 1С работает в клиент-серверном режиме на SQL Server, восстановление из такого файла выполняется средствами самого SQL Server, а не конфигуратора 1С. Это принципиальный момент: конфигуратор работает с выгрузками .dt, а .bak обрабатывается на уровне СУБД.
Процедура занимает от нескольких минут до нескольких часов в зависимости от размера базы и скорости дисковой подсистемы. Основные риски — случайное восстановление поверх рабочей базы, нехватка места на диске и несовпадение версий SQL Server. Ниже разобраны подготовка, два способа восстановления (через графический интерфейс и скриптом), подключение базы к 1С и проверка результата.
Что проверить до начала восстановления
Первое — версия SQL Server. Резервную копию можно восстановить только на экземпляре той же версии или новее. Копия, снятая на SQL Server 2019, не восстановится на SQL Server 2016, обратной совместимости нет. Узнать версию, на которой создана копия, можно командой RESTORE HEADERONLY или в свойствах файла через SSMS.
Второе — свободное место на диске. Восстановленная база займёт примерно столько же места, сколько занимала исходная, плюс потребуется место под журнал транзакций. Сам .bak-файл обычно сжат и меньше реальной базы в несколько раз, поэтому ориентироваться на его размер нельзя.
Третье — права доступа. Учётная запись, от имени которой работает служба SQL Server, должна иметь доступ на чтение к каталогу с .bak-файлом и права на запись в каталоги, куда будут размещены файлы данных и журнала. Частая ошибка — копия лежит на сетевом ресурсе или в профиле пользователя, куда у службы SQL Server доступа нет.
Определите тип восстановления: новая база или поверх существующей
Сценариев два. Первый — восстановление в новую базу с отдельным именем: подходит для анализа старых данных, тестирования обновлений и проверки целостности копии. Второй — восстановление поверх существующей базы при отказе, повреждении данных или возврате на точку в прошлом.
Для первого сценария достаточно указать новое имя базы, и SQL Server создаст файлы данных заново. Для второго потребуется перевести базу в однопользовательский режим или отключить все активные соединения, иначе восстановление завершится ошибкой «база данных используется».
Если база восстанавливается на другом сервере, пути к файлам данных из исходного сервера могут не существовать на новом. В этом случае обязательно используется параметр MOVE, который задаёт новое расположение mdf- и ldf-файлов.
Как выбрать действие
Восстановление через SQL Server Management Studio
Графический способ подходит тем, кто редко работает с SQL Server: меньше шансов ошибиться в синтаксисе. Запустите SQL Server Management Studio, подключитесь к нужному экземпляру с правами администратора.
Щёлкните правой кнопкой по узлу «Базы данных» и выберите «Восстановить базу данных». В качестве источника укажите «Устройство» и добавьте ваш .bak-файл. SSMS прочитает заголовок копии и покажет наборы резервных копий внутри файла — выберите нужную по дате.
На странице «Файлы» проверьте пути размещения mdf и ldf — при восстановлении на другом сервере их нужно исправить вручную. На странице «Параметры» при восстановлении поверх существующей базы отметьте «Перезаписать существующую базу данных (WITH REPLACE)», а при конфликте соединений — «Закрыть существующие соединения». После нажатия OK дождитесь сообщения об успешном завершении.
- 1Подключитесь к экземпляру SQL Server под учётной записью с правами sysadmin
- 2Правой кнопкой по «Базы данных» → «Восстановить базу данных»
- 3Источник: «Устройство», добавьте .bak-файл, выберите нужный набор копий
- 4На вкладке «Файлы» проверьте и при необходимости исправьте пути mdf и ldf
- 5На вкладке «Параметры» при необходимости включите WITH REPLACE и закрытие соединений
- 6Нажмите OK и дождитесь сообщения об успешном восстановлении
Восстановление скриптом T-SQL
Скриптовый способ быстрее для опытных администраторов и обязателен при автоматизации. Сначала посмотрите логические имена файлов внутри копии — они нужны для параметра MOVE.
RESTORE FILELISTONLY FROM DISK = N'D:\Backups\base1c.bak';
GO
RESTORE DATABASE [Base1C_Restore]
FROM DISK = N'D:\Backups\base1c.bak'
WITH
MOVE N'Base1C_Data' TO N'D:\SQLData\Base1C_Restore.mdf',
MOVE N'Base1C_Log' TO N'D:\SQLData\Base1C_Restore.ldf',
REPLACE,
STATS = 10;
GOКоманда RESTORE FILELISTONLY показывает логические имена файлов данных и журнала — подставьте их в MOVE вместо примерных значений. Параметр STATS = 10 выводит прогресс каждые 10 процентов, что удобно при больших базах. Опцию REPLACE указывайте только при восстановлении поверх существующей базы.
Если .bak-файл содержит несколько резервных копий (например, копии дописывались в один файл), укажите нужную через FILE = N, где N — номер набора из вывода RESTORE HEADERONLY.
Подключение восстановленной базы к 1С
После восстановления на стороне SQL Server база ещё не видна пользователям 1С. Если вы восстановили её под тем же именем на том же сервере, где она была зарегистрирована в кластере 1С, дополнительных действий обычно не требуется — достаточно проверить вход.
Если база восстановлена под новым именем или на другом сервере, зарегистрируйте её: в консоли кластера серверов 1С создайте новую информационную базу, указав тип СУБД MS SQL Server, имя сервера и имя восстановленной базы. Либо добавьте базу через диалог запуска 1С, выбрав вариант «На сервере 1С:Предприятия».
Учтите, что пользователь SQL Server, под которым сервер 1С обращается к базе, должен иметь на неё права (обычно роль db_owner). При восстановлении на новом сервере логины SQL Server не переносятся вместе с базой — их нужно создать отдельно и сопоставить с пользователями базы.
Проверка результата и типичные ошибки
После восстановления убедитесь, что база в состоянии ONLINE, а не Restoring или Suspect. Затем выполните вход в 1С, откройте несколько документов и журналов, постройте отчёт за период, данные которого вам известны. Для глубокой проверки целостности на стороне SQL Server используется команда DBCC CHECKDB, а на стороне 1С — тестирование и исправление информационной базы.
Как проверить результат
Online, без суффиксов Restoring или Suspect
База висит в Restoring — восстановление не завершено, или Suspect — повреждение
Документы и отчёты открываются, данные соответствуют дате копии
Ошибки доступа к таблицам, пустые журналы, данные не за ту дату
Завершается без ошибок распределения и целостности
Сообщения об ошибках — база повреждена, требуется восстановление из более ранней копии
Самые частые проблемы при восстановлении связаны не с самой командой, а с окружением: недостаточно прав у службы SQL Server на каталог с файлом, не хватает места на диске, версия сервера ниже версии копии, либо база занята пользовательскими соединениями.
Чем отличается .bak от .dt и когда что использовать
Выгрузка .dt создаётся в конфигураторе 1С и содержит данные в платформенном формате: её можно загрузить в базу на любой поддерживаемой СУБД и даже в файловый вариант. Файл .bak — низкоуровневая копия SQL Server, она быстрее создаётся и восстанавливается, сохраняет все индексы и настройки СУБД, но привязана к конкретному семейству версий SQL Server.
Сравнение вариантов
Быстро, сохраняет структуру СУБД полностью. Ограничение: только на SQL Server версии не ниже исходной
Переносимо между СУБД и платформами. Ограничение: заметно медленнее на больших базах, требует монопольного доступа
Позволяет откатиться на точное время. Ограничение: нужна полная цепочка копий и модель восстановления Full
Для ежедневного резервного копирования рабочей базы .bak удобнее: быстрее и надёжнее на уровне СУБД. Для переноса базы между инфраструктурами, смены СУБД или передачи копии разработчику используйте .dt.
Что важно запомнить
Файл .bak восстанавливается средствами SQL Server через SSMS или RESTORE DATABASE, а не конфигуратором. Проверьте версию SQL Server, место на диске и права службы, при переносе используйте MOVE, поверх рабочей базы восстанавливайте только с аварийной копией. После восстановления проверьте состояние базы, вход в 1С и целостность данных.
Частые вопросы
Можно ли восстановить .bak в файловую базу 1С?
Нет. Файл .bak — это формат Microsoft SQL Server, файловый вариант 1С его не поддерживает. Если нужна файловая база, сначала восстановите .bak на SQL Server, затем выгрузите данные в .dt через конфигуратор и загрузите в файловую базу.
Что делать, если при восстановлении ошибка «база данных используется»?
К базе есть активные подключения. Завершите сеансы пользователей в консоли кластера 1С, остановите службу агента сервера 1С или переведите базу в однопользовательский режим командой ALTER DATABASE с параметром SINGLE_USER WITH ROLLBACK IMMEDIATE, затем повторите восстановление.
Как узнать, какая версия SQL Server создала файл .bak?
Выполните в SSMS команду RESTORE HEADERONLY FROM DISK с путём к файлу. В выводе найдите поля SoftwareVersionMajor/Minor или столбец с номером версии — по нему определяется минимально допустимая версия сервера для восстановления.
Можно ли восстановить только часть данных, например один документ?
Средствами RESTORE — нет, восстанавливается база целиком. Практический путь: восстановите копию в отдельную базу, откройте её в 1С и перенесите нужные документы в рабочую базу вручную или через обработку переноса данных.
Почему после восстановления на новом сервере 1С не подключается к базе?
Наиболее вероятная причина — на новом сервере нет логина SQL Server, под которым работает сервер 1С, либо он не сопоставлен с пользователем базы. Создайте логин, назначьте ему роль db_owner на восстановленную базу и проверьте регистрацию базы в кластере 1С.
Сколько времени занимает восстановление большой базы?
Точных нормативов нет: время зависит от размера базы, скорости дисков и того, сжата ли копия. Ориентируйтесь на то, что восстановление обычно занимает время, сопоставимое с созданием копии. Прогресс можно наблюдать через параметр STATS или динамическое представление sys.dm_exec_requests.