Восстановление базы 1С из файла .bak на MS SQL Server и подключение к кластеру
Содержание
Чтобы загрузить бэкап 1С в SQL, откройте SQL Server Management Studio, щёлкните правой кнопкой по узлу Databases и выберите Restore Database…, укажите файл .bak, задайте имя новой базы и пути к файлам данных и журнала. После восстановления базу нужно зарегистрировать в кластере серверов 1С через консоль администрирования — без этого клиент 1С её не увидит.
Типичная ситуация: прислали .bak рабочей базы, чтобы развернуть тестовую копию, или сервер умер и базу поднимают на новом железе. Ниже — порядок действий для MS SQL Server и платформы 1С:Предприятие 8.3 в клиент-серверном варианте, плюс скрипт, который повторяет восстановление без мастера.
1. Что проверить до восстановления бэкапа в SQL Server
Большая часть неудачных восстановлений ломается ещё до нажатия «ОК». Пять проверок занимают минуты.
Версия SQL Server: бэкап идёт только «вверх»
Файл .bak, снятый на SQL Server 2019, не восстановится на 2017 или 2016. Обратно — пожалуйста: бэкап с 2016 спокойно ляжет на 2019 или 2022.
Узнать, на какой версии сделан бэкап, можно без восстановления:
RESTORE HEADERONLY FROM DISK = N'D:\Backup\buh.bak';
Смотрите столбцы SoftwareVersionMajor и DatabaseName. Сравните с версией своего сервера (SELECT @@VERSION;).
| Номер версии | SQL Server |
|---|---|
| 11 | 2012 |
| 12 | 2014 |
| 13 | 2016 |
| 14 | 2017 |
| 15 | 2019 |
| 16 | 2022 |
Номер версии сервера назначения должен быть не ниже номера из бэкапа.
Остальные проверки
- 📦 Редакция Express. Её лимит — 10 ГБ на файл данных одной базы. Рабочая база 1С на 15–20 ГБ в Express не восстановится, нужна Standard или выше.
- 💾 Место на диске. SQL Server создаёт файлы того размера, какими они были в исходной базе, вместе с пустым местом внутри. Если у источника журнал раздут до 40 ГБ, столько же понадобится и вам.
- 🔐 Доступ к файлу. Файл читает не ваша учётная запись, а служба SQL Server (по умолчанию
NT Service\MSSQLSERVER). Положите.bakв локальную папку, к которой у службы есть чтение. Сетевые диски, подключённые буквой в вашем сеансе, служба не видит — указывайте UNC-путь\\server\share\buh.bak. - 🧩 Сеансы 1С. Если восстанавливаете поверх существующей базы, в ней не должно быть пользователей (подробно — в разделе 4).
Размеры файлов из бэкапа показывает вторая команда:
RESTORE FILELISTONLY FROM DISK = N'D:\Backup\buh.bak';
Столбец Size — в байтах. Запомните и LogicalName обоих файлов: они понадобятся для путей.
2. Загрузка бэкапа 1С через мастер SSMS
Мастер подходит для разового восстановления. Порядок такой:
- Подключитесь в SSMS к экземпляру SQL Server под учётной записью с правами
sysadminилиdbcreator. - В
Object Explorerщёлкните правой кнопкой по папкеDatabasesи выберитеRestore Database…. - На странице
Generalв блокеSourceвыберитеDevice, нажмите кнопку с многоточием, затемAddи укажите файл.bak. - В таблице
Backup sets to restoreотметьте нужный набор. В одном файле бывает несколько бэкапов — ориентируйтесь на дату в столбцеStart Date. - В поле
DatabaseблокаDestinationвпишите имя базы. По умолчанию подставится имя исходной — для тестовой копии поменяйте его, например наbuh_test. - Перейдите на страницы
FilesиOptions(о них — следующие два раздела). - Нажмите
OKи дождитесь сообщения об успешном восстановлении.
В русской версии SSMS команда называется «Восстановить базу данных…», страницы — «Общие», «Файлы» и «Параметры».
Скорость зависит от дисков. Ориентир — база 1С на 30–50 ГБ на SSD восстанавливается за 5–15 минут. На HDD и с сетевой папки — в разы дольше.
3. Пути к файлам базы при восстановлении
База MS SQL состоит минимум из двух файлов: данных .mdf и журнала транзакций .ldf. Бэкап хранит пути, где они лежали на исходном сервере. Если на новом сервере нет диска E: или там уже лежит файл с таким именем, восстановление упадёт.
На странице Files мастера:
- отметьте
Relocate all files to folder; - в
Data file folderукажите папку для.mdf; - в
Log file folder— папку для.ldf.
Проверьте столбец Restore As в таблице ниже. При восстановлении копии рядом с оригиналом имена файлов должны отличаться, иначе SQL Server попытается перезаписать файлы рабочей базы.
| Файл | Логическое имя (пример) | Куда класть |
|---|---|---|
| Данные | buh | Быстрый диск под данные, E:\SQLData\buh_test.mdf |
| Журнал | buh_log | Отдельный диск под журналы, F:\SQLLog\buh_test_log.ldf |
Логические имена остаются от исходной базы и на работу 1С не влияют. Переименовывать их не обязательно.
4. Перезапись существующей базы и закрытие подключений
Когда база с таким именем уже есть, нужны параметры на странице Options:
Overwrite the existing database (WITH REPLACE)— разрешает затереть существующую базу. Без него SQL Server откажется восстанавливать бэкап другой базы поверх этой.Close existing connections to destination database— переводит базу в однопользовательский режим и обрывает все подключения.Take tail-log backup before restore— снимите этот флажок. Иначе SSMS попробует сделать бэкап хвоста журнала целевой базы, и в модели восстановленияSIMPLEэто закончится ошибкой.Recovery state— оставьтеRESTORE WITH RECOVERY, если восстанавливаете один полный бэкап.
Перезапись уничтожает текущие данные целевой базы без возможности отката. Перед восстановлением поверх рабочей базы сделайте её свежий бэкап.
Закрытие подключений обрывает сеансы 1С на полуслове: несохранённые документы пропадут, у пользователей появится ошибка соединения. Делайте это вне рабочего времени. Удобнее заранее остановить вход в базу через консоль кластера 1С: в свойствах информационной базы включите Блокировка начала сеансов включена, задайте сообщение и код разрешения, затем завершите оставшиеся сеансы.
5. Скрипт T-SQL для восстановления бэкапа
Скрипт удобен, когда тестовую копию обновляют регулярно, например каждый понедельник. Подставьте свои логические имена из RESTORE FILELISTONLY:
USE master;
GO
IF DB_ID(N'buh_test') IS NOT NULL
ALTER DATABASE [buh_test] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
RESTORE DATABASE [buh_test]
FROM DISK = N'D:\Backup\buh.bak'
WITH FILE = 1,
MOVE N'buh' TO N'E:\SQLData\buh_test.mdf',
MOVE N'buh_log' TO N'F:\SQLLog\buh_test_log.ldf',
REPLACE,
RECOVERY,
STATS = 10;
GO
ALTER DATABASE [buh_test] SET MULTI_USER;
ALTER DATABASE [buh_test] SET RECOVERY SIMPLE;
GO
Что делает каждая часть:
SET SINGLE_USER WITH ROLLBACK IMMEDIATE— обрывает подключения и откатывает незавершённые транзакции;FILE = 1— номер набора в файле (столбецPositionизRESTORE HEADERONLY);MOVE— новые пути для каждого логического файла;STATS = 10— выводит прогресс каждые 10%;RECOVERY SIMPLEв конце — для тестовой копии журнал не нужен, так он не разрастётся.
Запуск по расписанию
Сохраните скрипт в C:\Scripts\restore_buh_test.sql и запускайте через sqlcmd:
sqlcmd -S localhost -E -i C:\Scripts\restore_buh_test.sql -o C:\Scripts\restore_log.txt
Ключ -E — вход под Windows-учётной записью, -o пишет вывод в лог. Команду ставят в Планировщик заданий Windows или в задание SQL Server Agent. В редакции Express агента нет — только Планировщик.
Цепочка: полный, разностный, журналы
Если резервные копии делают по схеме «полный + разностные + журналы», восстанавливайте по порядку. Все шаги, кроме последнего, — с NORECOVERY:
RESTORE DATABASE [buh] FROM DISK = N'D:\Backup\buh_full.bak' WITH NORECOVERY, REPLACE;
RESTORE DATABASE [buh] FROM DISK = N'D:\Backup\buh_diff.bak' WITH NORECOVERY;
RESTORE LOG [buh] FROM DISK = N'D:\Backup\buh_log1.trn' WITH NORECOVERY;
RESTORE LOG [buh] FROM DISK = N'D:\Backup\buh_log2.trn'
WITH STOPAT = N'2026-10-05T14:30:00', RECOVERY;
STOPAT возвращает базу на конкретный момент — например, за минуту до того, как кто-то удалил документы. Пока не выполнен шаг с RECOVERY, база висит в состоянии Restoring… и недоступна.
6. Регистрация восстановленной базы в кластере 1С
SQL Server теперь хранит базу, но сервер 1С о ней не знает. Регистрируем:
- Откройте
Администрирование серверов 1С Предприятия(консоль кластера). - Разверните центральный сервер →
Кластеры→ ваш кластер →Информационные базы. - Правой кнопкой →
Создать→Информационная база. - Заполните поля:
- Имя — как база будет называться в кластере, например
buh_test; - Сервер баз данных — имя сервера SQL, для именованного экземпляра
SRV\SQL2019; - Тип СУБД —
MS SQL Server; - База данных — точное имя базы, которое задали при восстановлении;
- Пользователь сервера БД и Пароль — учётная запись SQL, под которой 1С ходит в базу.
- Имя — как база будет называться в кластере, например
- Флажок
Создать базу данных в случае ее отсутствияне ставьте — база уже есть. - Для тестовой копии включите
Блокировка регламентных заданий включена. Иначе копия начнёт загружать банковские выписки, отправлять почту и запускать обмены от имени рабочей базы.
Затем добавьте базу в список у пользователя: в окне запуска 1С нажмите Добавить → Добавление в список существующей информационной базы, выберите размещение На сервере 1С:Предприятия, укажите кластер и имя базы из шага 4.
Сообщение о перемещённой базе
Типовые конфигурации на БСП при первом входе в восстановленную копию обычно спрашивают, перемещена ли база или это копия. Для тестовой базы выбирайте вариант про копию: программа отключит работу с внешними ресурсами — обмены, синхронизацию, отправку отчётности. Для рабочей базы, перенесённой на новый сервер, выбирайте перемещение.
7. Права пользователя SQL после восстановления
Частая ловушка при переносе на другой сервер. Бэкап содержит пользователей базы, но не логины сервера. Пользователь в базе есть, а связи с логином нет — это «осиротевший» пользователь. 1С при подключении получает отказ.
Найти таких пользователей:
USE [buh_test];
SELECT dp.name AS db_user
FROM sys.database_principals dp
LEFT JOIN sys.server_principals sp ON dp.sid = sp.sid
WHERE dp.type = 'S' AND dp.principal_id > 4 AND sp.sid IS NULL;
Связать пользователя с логином (логин на сервере уже должен быть создан):
ALTER USER [user1c] WITH LOGIN = [user1c];
Если 1С подключается под отдельным логином, проще сделать его владельцем базы:
ALTER AUTHORIZATION ON DATABASE::[buh_test] TO [user1c];
Учётной записи из поля Пользователь сервера БД для обычной работы нужна роль db_owner в этой базе. Для обновления конфигурации её тоже хватает. Давать sysadmin не обязательно.
8. Ошибки при загрузке бэкапа 1С в SQL и что с ними делать
NT Service\MSSQLSERVER) права на чтение папки с бэкапом и на запись в папки данных и журналов.После любой ошибки, если база осталась в состоянии Restoring…, повторите восстановление с RECOVERY или удалите недовосстановленную базу и начните заново.