Тестовая копия рабочей базы 1С на MS SQL Server: от бэкапа до первого запуска
Содержание
Чтобы развернуть копию базы
1С на SQL, сделайте бэкап рабочей базы средствами SQL Server с флагом COPY_ONLY, восстановите его под новым именем базы данных и зарегистрируйте эту базу в кластере серверов 1С как отдельную информационную базу. Конфигуратор для этого не нужен, пользователей выгонять не придётся: бэкап SQL снимается на ходу.
Схема одинакова для тестовой копии на том же сервере и для переноса на другую машину. Отличаются только два шага: копирование файла .bak и привязка SQL-пользователя. Ниже все шаги по порядку, с командами T-SQL и параметрами консоли кластера.
1. Подготовка: что проверить перед копированием базы 1С на SQL
Пять минут на проверку избавят от переделки на середине пути.
- 🗄️ Версия SQL Server на целевом сервере. Номер версии должен быть не ниже, чем на исходном. Бэкап с SQL Server 2019 не восстановится на 2016, обратное работает.
- 🧩 Версия платформы 1С. На целевом сервере 1С должна стоять та же версия платформы, что и на рабочем. Тогда копия откроется без вопросов о конвертации.
- 💾 Свободное место. Нужно место под файл
.bakи под файлы восстановленной базы. Ориентир: размер.mdfрабочей базы плюс журнал, умноженные на 1,2. - 🔑 Учётная запись SQL для 1С. Узнайте, под каким логином сервер 1С подключается к SQL: он указан в свойствах рабочей информационной базы в консоли кластера.
- 🏷️ Имя копии. Заранее придумайте имя, которое невозможно спутать с рабочим:
buh_test,buh_copy_0710.
Самый дорогой сбой при копировании — восстановить бэкап поверх рабочей базы или зарегистрировать копию с именем рабочей. Имя базы данных в SQL и имя информационной базы в кластере должны отличаться от рабочих.
Узнать логические имена файлов и их расположение у рабочей базы можно запросом:
SELECT name, physical_name, type_desc, size * 8 / 1024 AS size_mb
FROM sys.master_files
WHERE database_id = DB_ID(N'buh_prod');
Логические имена (name) понадобятся на шаге восстановления.
2. Резервная копия рабочей базы без вреда для регламентных бэкапов
На рабочих серверах обычно настроен план обслуживания: полные, разностные копии, копии журнала. Обычный внеплановый BACKUP DATABASE становится новой опорной точкой для разностных копий. После этого ночной разностный бэкап начнёт ссылаться на ваш разовый файл, и при его потере восстановление сломается.
Поэтому для копии используйте параметр COPY_ONLY. Он снимает полный бэкап, не трогая цепочку.
Через SSMS
- В Object Explorer раскройте
Databases, щёлкните правой кнопкой по рабочей базе. - Выберите
Tasks → Back Up…. - Тип —
Full, отметьте флажокCopy-only backup. - В блоке
Destinationудалите старые пути и добавьте новый файл, напримерD:\Backup\buh_prod_copy.bak. - На странице
Backup Optionsвключите сжатие, если редакция SQL его поддерживает.
Через T-SQL
BACKUP DATABASE [buh_prod]
TO DISK = N'D:\Backup\buh_prod_copy.bak'
WITH COPY_ONLY, COMPRESSION, CHECKSUM, STATS = 10;
Если сервер отвечает, что сжатие не поддерживается (бывает в Express), уберите COMPRESSION. CHECKSUM проверит страницы при чтении: битая страница всплывёт сейчас, а не в момент восстановления.
💡 Пользователи в это время работают как обычно. Бэкап SQL фиксирует согласованное состояние базы на момент окончания копирования.
3. Перенос файла резервной копии на целевой сервер
Если копия разворачивается на том же сервере SQL, этот шаг пропускаете.
Для другого сервера файл нужно положить туда, откуда его прочитает служба SQL Server, а не ваш пользователь Windows. Это частая ловушка: вы видите файл в проводнике, а SQL — нет.
| Способ | Когда удобен | На что смотреть |
|---|---|---|
Сетевая папка \\srv\backup | Серверы в одной сети | У учётной записи службы SQL должно быть право чтения на шару |
robocopy на локальный диск | Большие файлы, нестабильная сеть | Ключ /Z позволяет докачать после обрыва |
| Внешний носитель или облако | Изолированные контуры | После копирования сверьте размер файла |
Пример копирования с докачкой:
robocopy "\\srv-prod\Backup" "E:\Restore" buh_prod_copy.bak /Z /R:3 /W:10
После переноса проверьте целостность файла, не восстанавливая его:
RESTORE VERIFYONLY FROM DISK = N'E:\Restore\buh_prod_copy.bak' WITH CHECKSUM;
4. Восстановление копии базы 1С в SQL Server Management Studio
Мастер восстановления
- В Object Explorer щёлкните правой кнопкой по
Databases→Restore Database…. - В блоке
SourceвыберитеDevice, нажмите…и добавьте файл.bak. - В поле
Destination → Databaseвпишите новое имя:buh_test. - Откройте страницу
Filesи отметьтеRelocate all files to folder. Укажите папки для данных и журнала. Проверьте, что в колонкеRestore Asстоят имена сbuh_test, а не файлы рабочей базы. - На странице
Optionsпроверьте флажокTake tail-log backup before restore. При восстановлении под новым именем он должен быть снят. - Нажмите
OKи дождитесь сообщения об успешном восстановлении.
Если на странице Options остался включён резервный бэкап хвоста журнала, SSMS снимет его с исходной базы в режиме без восстановления. Рабочая база перейдёт в состояние Restoring и станет недоступна для 1С. Перед нажатием OK посмотрите на этот флажок.
То же самое скриптом
Сначала узнайте логические имена файлов в бэкапе:
RESTORE FILELISTONLY FROM DISK = N'E:\Restore\buh_prod_copy.bak';
Затем восстановите с переносом файлов:
RESTORE DATABASE [buh_test]
FROM DISK = N'E:\Restore\buh_prod_copy.bak'
WITH
MOVE N'buh_prod' TO N'E:\SQLData\buh_test.mdf',
MOVE N'buh_prod_log' TO N'E:\SQLLog\buh_test_log.ldf',
STATS = 10;
Подставьте свои логические имена из колонки LogicalName. Без MOVE SQL попытается положить файлы по путям исходного сервера, а на том же сервере — поверх файлов рабочей базы.
Модель восстановления для тестовой копии
Копии для тестов не нужен полный журнал. Переведите её в простую модель, иначе журнал разрастётся при первом же обновлении конфигурации:
ALTER DATABASE [buh_test] SET RECOVERY SIMPLE;
5. Регистрация копии базы в кластере серверов 1С
Восстановленная база данных — ещё не информационная база. Сервер 1С о ней не знает, пока вы её не зарегистрируете.
В консоли кластера
- Откройте
Администрирование серверов 1С Предприятия. - Раскройте нужный центральный сервер →
Кластеры→ кластер →Информационные базы. - Правой кнопкой →
Создать→Информационная база. - Заполните поля:
| Поле | Что указать |
|---|---|
| Имя | buh_test — уникальное имя в кластере |
| Сервер баз данных | Имя сервера SQL, с экземпляром: sql01\MSSQL |
| Тип СУБД | MS SQL Server |
| База данных | buh_test — имя восстановленной базы в SQL |
| Пользователь и пароль сервера БД | Логин SQL, под которым 1С работает с этой базой |
| Разрешить выдачу лицензий сервером 1С:Предприятия | Как у рабочей базы |
| Установить блокировку регламентных заданий | Включить |
| Создать базу данных в случае ее отсутствия | Можно не отмечать: база уже есть |
Флажок блокировки регламентных заданий — главный приём для тестовой копии. Без него копия сразу начнёт выполнять обмены, загрузку курсов, отправку почты и выгрузку в банк от имени рабочей организации.
На компьютере пользователя
- Запустите 1С, в окне выбора баз нажмите
Добавить. - Выберите
Добавление в список существующей информационной базы. - Укажите вариант
На сервере 1С:Предприятия. - Кластер серверов
— имя сервера 1С, имя информационной базы —
buh_test. - В названии для списка добавьте пометку «ТЕСТ», чтобы бухгалтер не провёл в копии реальные документы.
6. Права SQL, первый запуск копии и отключение обменов
Привязка пользователя SQL
На том же сервере SQL обычно ничего делать не нужно: логин уже существует, SID совпадает.
При переносе на другой сервер возможны два варианта:
- ✅ Логин 1С входит в роль
sysadmin. Доступ к базе есть автоматически. - 🔧 Логин работает через роль
db_ownerв базе. В восстановленной базе пользователь остался, но не связан с логином нового сервера. Свяжите его:
USE [buh_test];
ALTER USER [usr1c] WITH LOGIN = [usr1c];
Если логина usr1c на новом сервере ещё нет, сначала создайте его через Security → Logins → New Login. Если в базе нет и пользователя, создайте его и дайте права владельца:
USE [buh_test];
CREATE USER [usr1c] FOR LOGIN [usr1c];
ALTER ROLE [db_owner] ADD MEMBER [usr1c];
Первый запуск
Откройте копию в режиме 1С:Предприятие под администратором. Типовые конфигурации на библиотеке стандартных подсистем замечают смену адреса базы и показывают диалог с вопросом, копия это или перенос. Для тестовой копии выбирайте вариант, где база отмечается как копия. Программа отключит в ней обмены и часть фоновых операций.
После этого проверьте вручную:
- 📧 учётные записи электронной почты — снимите флажки отправки;
- 🔄 узлы планов обмена и синхронизацию с другими базами;
- 🏦 обмен с банком и прямые интеграции;
- 📑 подключение к ЭДО и сервисам отчётности.
7. Развернуть копию через SQL или через выгрузку .dt
Иногда копия базы 1С на SQL удобнее разворачивается выгрузкой .dt. Оба способа рабочие, но подходят под разные задачи.
| Критерий | Бэкап SQL (.bak) | Выгрузка .dt |
|---|---|---|
| Нужен ли монопольный доступ к рабочей базе | Нет | Да, на время выгрузки |
| Скорость на базе 50–100 ГБ | Минуты–десятки минут | Часы |
| Перенос между разными СУБД (MS SQL → PostgreSQL) | Нет | Да |
| Перенос на SQL более ранней версии | Нет | Да |
| Нужен доступ к SQL Server | Да | Нет, хватит Конфигуратора |
Выгрузка делается в Конфигураторе: Администрирование → Выгрузить информационную базу. Загрузка в пустую базу на сервере — там же, Загрузить информационную базу. Учтите, что выгрузка блокирует работу пользователей, поэтому на больших базах её делают вечером.
💡 Для регулярного обновления тестовой копии удобнее способ через SQL: скрипт из шага 4 с параметром REPLACE можно запускать заданием SQL Agent по ночам.
8. Ошибки при развертывании копии базы и как их исправить
Пересоздание копии поверх старой выглядит так:
ALTER DATABASE [buh_test] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
RESTORE DATABASE [buh_test]
FROM DISK = N'E:\Restore\buh_prod_copy.bak'
WITH REPLACE,
MOVE N'buh_prod' TO N'E:\SQLData\buh_test.mdf',
MOVE N'buh_prod_log' TO N'E:\SQLLog\buh_test_log.ldf';
ALTER DATABASE [buh_test] SET MULTI_USER;
ROLLBACK IMMEDIATE обрывает все сеансы в копии, несохранённая работа тестировщиков пропадёт. Запускайте скрипт, когда в копии никого нет, и проверьте, что в первой строке стоит имя копии, а не рабочей базы.
9. Частые вопросы
Нужна ли отдельная лицензия на тестовую копию базы?
Можно ли держать копию на том же сервере SQL, что и рабочую базу?
Почему файл бэкапа меньше рабочей базы, а восстановленная копия — нет?
Как обновить тестовую копию свежими данными?
COPY_ONLY и восстановите его поверх копии с REPLACE. Регистрацию в кластере повторять не нужно: она привязана к имени базы в SQL.