Как открыть и восстановить базу 1С из файла .bak (MS SQL Server)
Архитектура бэкапов SQL и симптомы ошибок восстановления
Файл с расширением .bak — это не просто архив, а бинарная резервная копия базы данных Microsoft SQL Server (Full Backup), содержащая страницы данных (MDF) и транзакционный лог (LDF). Прямое «открытие» этого файла в конфигураторе 1С невозможно. Для работы с базой необходимо развернуть СУБД и выполнить операцию RESTORE. Бизнес-риски: задержка в получении доступа к историческим данным, ошибки при миграции баз между серверами с разной структурой дисков.
Типовые ошибки при восстановлении (.bak)
| Текст ошибки / Симптом | Причина сбоя на уровне СУБД |
|---|---|
Directory lookup for the file... failed. Operating system error 3 (The system cannot find the path specified) | В бэкапе прописаны пути к дискам старого сервера (например, D:\SQLData), которых нет на текущем сервере. Требуется перемещение файлов (MOVE). |
The tail of the log for the database... has not been backed up. | Попытка перезаписать существующую рабочую базу без резервного копирования активного конца журнала транзакций (Tail-log). |
| Пользователь 1С не может войти в базу после успешного RESTORE | Проблема «потерянных пользователей» (Orphaned Users). Сиды (SID) логинов на сервере не совпадают с SID пользователей внутри восстановленной БД. |
Алгоритм восстановления базы 1С из .bak
Сценарий 1: Восстановление через T-SQL с перемещением файлов (MOVE)
Если пути к дискам на новом сервере отличаются, стандартный GUI может выдать ошибку. Используйте запросы в SSMS.
-- 1. Узнаем логические имена файлов внутри .bak
RESTORE FILELISTONLY FROM DISK = 'C:\Backup\1c_base.bak';
-- 2. Восстанавливаем с явным указанием новых путей (.mdf и .ldf)
RESTORE DATABASE [1C_TestBase]
FROM DISK = 'C:\Backup\1c_base.bak'
WITH RECOVERY,
MOVE '1c_base_Data' TO 'E:\SQL_Data\1c_test_data.mdf',
MOVE '1c_base_Log' TO 'F:\SQL_Logs\1c_test_log.ldf',
REPLACE; -- Заменяем существующую базу (ОСТОРОЖНО!)Сценарий 2: Восстановление через GUI (SSMS)
- Откройте SQL Server Management Studio (SSMS) и подключитесь к инстансу (Database Engine).
- В обозревателе объектов (Object Explorer) кликните правой кнопкой мыши по узлу Databases -> Restore Database...
- В разделе Source выберите Device и через кнопку «...» добавьте ваш файл
.bak. - В разделе Destination укажите новое имя для базы данных 1С.
- Перейдите на вкладку Files слева. Обязательно установите галочку Relocate all files to folder (Переместить все файлы), чтобы SQL Server автоматически изменил пути на локальные.
- Нажмите OK.
Типовые ошибки администраторов
- Попытка загрузить .bak в конфигуратор: Администраторы, привыкшие к файловой 1С (.dt архивы), пытаются загрузить .bak через «Администрирование -> Загрузить информационную базу». Это разные форматы, конфигуратор не понимает SQL бэкапы.
- Разные версии SQL Server: Нельзя восстановить .bak, сделанный на более новой версии SQL (например, 2019), на старую версию СУБД (например, 2014). SQL Server не поддерживает Downgrade (понижение версии) на уровне страниц данных.
Неоптимальная настройка Instant File Initialization (IFI) и фрагментация дисков увеличивают время развертывания в разы. Инженеры ITSTM проведут аудит SQL Server, настроят Maintenance Plans и ускорят процедуры резервного копирования для высоконагруженных баз 1С.
Частые вопросы (FAQ)
Как подключить восстановленную базу к серверу 1С:Предприятия?
В консоли администрирования серверов 1С создайте новую информационную базу. Укажите имя базы данных в точности так, как вы ее назвали в SQL Server (раздел Destination). Укажите логин (sa) и пароль от SQL.
Что делать с ошибкой 'The database is in use' при восстановлении (REPLACE)?
К базе есть активные подключения (например, зависшие процессы rphost). В SSMS перейдите на вкладку Options при восстановлении и установите галочку 'Close existing connections to destination database'.
Можно ли извлечь только таблицу из .bak?
Нет, напрямую извлечь одну таблицу нельзя. Необходимо восстановить базу целиком (можно под другим именем), а затем перенести данные нужной таблицы через запрос INSERT INTO ... SELECT.
Как исправить 'Orphaned Users' после восстановления?
Выполните процедуру привязки логина в контексте вашей БД: USE [Ваша_База]; EXEC sp_change_users_login 'Auto_Fix', 'ИмяПользователяSQL';