Как правильно сделать выгрузку информационной базы 1С на SQL и заблокировать сеансы пользователей

Системный администратор 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

В процессе администрирования клиент-серверных баз 1С периодически возникает необходимость получить файл выгрузки базы данных (формат .dt), например, для передачи копии базы разработчику или тестирования в локальной среде. При этом стандартное резервное копирование рабочей базы данных должно осуществляться средствами самой СУБД (MS SQL Server или PostgreSQL), так как формат .dt не является полноценным инструментом транзакционного бэкапа. Разберем по шагам, как решить задачу выгрузки данных, корректно отключить пользователей и фоновые задания, а также рассмотрим риски и правильные сценарии автоматизации.

Почему выгрузка .dt на живой рабочей базе несет риски

Проанализируем механику работы платформы при выполнении команды выгрузки /DumpIB. Выгрузка в .dt считывает таблицы базы данных последовательно. Если в этот момент пользователи или фоновые регламентные задания вносят изменения в базу данных (создают или проводят документы, пишут записи в регистры), ссылочная целостность в полученном файле нарушается: часть связанных объектов попадет в выгрузку в новом состоянии, а часть — в старом.

Кроме того, категорически запрещено подключать в консоли кластера серверов 1С две разные информационные базы к одной и той же базе данных SQL для «тихого» снятия выгрузки. Это приводит к рассинхронизации серверного кэша метаданных, сбоям в работе менеджера транзакционных блокировок и нарушению уникальности нумерации документов.

Вариант 1. Безопасная схема выгрузки через промежуточную базу SQL

Рассмотрим наиболее надежный и рекомендованный способ получения файла .dt без выгона пользователей из рабочей системы и без риска повредить рабочие данные:

  1. Создание резервной копии средствами СУБД. Выполняем создание штатного бэкапа рабочей базы SQL без прерывания работы пользователей.
  2. Восстановление в технологическую базу. Восстанавливаем полученный бэкап в отдельную технологическую базу на SQL-сервере.
  3. Подключение в кластере 1С. Регистрируем технологическую базу в кластере серверов 1С с установленными флагами Блокировка регламентных заданий включена и Блокировка начала сеансов включена.
  4. Пакетная выгрузка в .dt. Запускаем конфигуратор технологической базы в пакетном режиме.

Посмотрим на пример командной строки для выгрузки из предварительно заблокированной базы:


"C:\Program Files\1cv8\common\1cestart.exe" DESIGNER /S "app-server\tech_base" /N "Администратор" /P "Пароль123" /DumpIB "D:\Backups\Base_Copy.dt" /DisableStartupMessages /DisableStartupDialogs /Out "D:\Backups\dump_log.txt" -NoTruncate

Вариант 2. Блокировка сеансов и регламентных заданий на рабочей базе

Если требуется выполнить регламентные работы или выгрузку непосредственно на рабочей базе данных в ночное время, необходимо полностью исключить активность пользователей и регламентных фоновых заданий. Выясним причину: согласно технологическим стандартам 1С, перед выполнением монопольных процедур все регламентные процессы должны быть остановлены.

Разберем способы автоматизации блокировки:

  1. Использование консольной утилиты администрирования кластера (RAC). Утилита rac.exe позволяет автоматизировать управление сеансами и свойствами базы данных через командные файлы:
    
    rac infobase --cluster=cluster-id update --infobase=ib-id --sessions-denied=on --scheduled-jobs-denied=on --permission-code="AdminCode" --denied-message="База на обслуживании"
    rac session --cluster=cluster-id terminate --infobase=ib-id
    
  2. Использование параметров командной строки 1С при наличии блокировки. Чтобы запустить конфигуратор для сервисных задач в заблокированную базу, используем ключ /UC с кодом разрешения, заданным ранее:
    
    "C:\Program Files\1cv8\common\1cestart.exe" DESIGNER /S "app-server\work_base" /N "Администратор" /P "Пароль123" /UC "AdminCode" /DumpIB "D:\Backups\Base.dt" /Out "D:\Backups\dump_log.txt"
    
  3. Управление через COM-соединение (V83.COMConnector). С помощью скрипта VBScript или PowerShell подключаемся к кластеру, меняем свойства описания базы SessionsDenied, ScheduledJobsDenied, устанавливаем интервал DeniedFrom и принудительно вызываем метод TerminateSession() для всех текущих подключений.

Ограничения файловых баз при обратной загрузке .dt

Если файл .dt создается для передачи разработчику в файловую среду, важно учитывать ограничения формата файловой базы 1CD. Размер любой отдельной таблицы в файловой базе не может превышать 4 ГБ. Если база на SQL имеет крупные таблицы итогов, журнала регистрации или версий объектов, выгрузка в .dt пройдет успешно, но загрузить ее в файловую базу разработчик не сможет из-за ошибки переполнения таблицы. В таких случаях для разработки рекомендуется разворачивать бесплатный локальный сервер СУБД (например, MS SQL Server Express) и восстанавливать данные напрямую из резервной копии SQL.

← На главную