Тестовая копия рабочей базы 1С на MS SQL Server: от бэкапа до первого запуска

· 10 мин

Содержание

Чтобы развернуть копию базы 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

  1. В Object Explorer раскройте Databases, щёлкните правой кнопкой по рабочей базе.
  2. Выберите Tasks → Back Up….
  3. Тип — Full, отметьте флажок Copy-only backup.
  4. В блоке Destination удалите старые пути и добавьте новый файл, например D:\Backup\buh_prod_copy.bak.
  5. На странице 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

Мастер восстановления

  1. В Object Explorer щёлкните правой кнопкой по Databases → Restore Database….
  2. В блоке Source выберите Device, нажмите … и добавьте файл .bak.
  3. В поле Destination → Database впишите новое имя: buh_test.
  4. Откройте страницу Files и отметьте Relocate all files to folder. Укажите папки для данных и журнала. Проверьте, что в колонке Restore As стоят имена с buh_test, а не файлы рабочей базы.
  5. На странице Options проверьте флажок Take tail-log backup before restore. При восстановлении под новым именем он должен быть снят.
  6. Нажмите 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. Откройте Администрирование серверов 1С Предприятия.
  2. Раскройте нужный центральный сервер → Кластеры → кластер → Информационные базы.
  3. Правой кнопкой → Создать → Информационная база.
  4. Заполните поля:
ПолеЧто указать
Имяbuh_test — уникальное имя в кластере
Сервер баз данныхИмя сервера SQL, с экземпляром: sql01\MSSQL
Тип СУБДMS SQL Server
База данныхbuh_test — имя восстановленной базы в SQL
Пользователь и пароль сервера БДЛогин SQL, под которым 1С работает с этой базой
Разрешить выдачу лицензий сервером 1С:ПредприятияКак у рабочей базы
Установить блокировку регламентных заданийВключить
Создать базу данных в случае ее отсутствияМожно не отмечать: база уже есть

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

На компьютере пользователя

  1. Запустите 1С, в окне выбора баз нажмите Добавить.
  2. Выберите Добавление в список существующей информационной базы.
  3. Укажите вариант На сервере 1С:Предприятия.
  4. Кластер серверов — имя сервера 1С, имя информационной базы — buh_test.
  5. В названии для списка добавьте пометку «ТЕСТ», чтобы бухгалтер не провёл в копии реальные документы.

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С:Предприятие под администратором. Типовые конфигурации на библиотеке стандартных подсистем замечают смену адреса базы и показывают диалог с вопросом, копия это или перенос. Для тестовой копии выбирайте вариант, где база отмечается как копия. Программа отключит в ней обмены и часть фоновых операций.

После этого проверьте вручную:

  • 📧 учётные записи электронной почты — снимите флажки отправки;
  • 🔄 узлы планов обмена и синхронизацию с другими базами;
  • 🏦 обмен с банком и прямые интеграции;
  • 📑 подключение к ЭДО и сервисам отчётности.
Копия готова к тестам
Выполнено: 0 / 6

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, что и рабочую базу?
Можно. Учтите нагрузку: тяжёлые тесты в копии делят с рабочей базой процессор, память и диски. Для нагрузочных тестов лучше отдельный сервер.
Почему файл бэкапа меньше рабочей базы, а восстановленная копия — нет?
В бэкап попадают только занятые страницы, а сжатие уменьшает его ещё в несколько раз. При восстановлении SQL создаёт файлы данных и журнала того же размера, что были у исходной базы, включая пустое место.
Как обновить тестовую копию свежими данными?
Снимите новый бэкап с COPY_ONLY и восстановите его поверх копии с REPLACE. Регистрацию в кластере повторять не нужно: она привязана к имени базы в SQL.
Сохранятся ли в копии пользователи и пароли 1С?
Да. Список пользователей хранится внутри базы данных, поэтому в копию попадают те же логины и пароли, что в рабочей.