Как выгрузить базу 1С в пакетном режиме и корректно отключить активных пользователей?

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

При организации автоматического ночного резервного копирования информационных баз 1С системные администраторы часто используют пакетный запуск Конфигуратора с ключом /DumpIB. Однако создание выгрузки в файл .dt требует монопольного доступа к базе. Если в системе остается хотя бы один активный пользователь, зависший сеанс или запущенное фоновое регламентное задание, операция прерывается с ошибкой блокировки.

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

Проанализируем основные способы решения задачи: от встроенных механизмов конфигурации до утилит администрирования кластера и средств СУБД.

Способ 1. Завершение сеансов через параметры Библиотеки стандартных подсистем (БСП)

В типовых конфигурациях 1С (Бухгалтерия предприятия, Управление торговлей, ERP и др.) реализован штатный механизм завершения работы пользователей через Библиотеку стандартных подсистем. Управление этим механизмом осуществляется через передачу параметра /C.

Важная техническая особенность: обработка параметров /CЗавершитьРаботуПользователей и /CРазрешитьРаботуПользователей выполняется логикой конфигурации при старте клиентского приложения, поэтому запуск необходимо выполнять в режиме предприятия ENTERPRISE, а не в режиме Конфигуратора CONFIG.

Рассмотрим типовой сценарий скрипта резервного копирования:

  1. Запуск базы в режиме ENTERPRISE с блокировкой соединений и установкой кода разрешения.
  2. Пауза для гарантированного завершения клиентских приложений.
  3. Запуск Конфигуратора с ключом /DumpIB и кодом разрешения /UC для выгрузки базы.
  4. Запуск базы в режиме ENTERPRISE для снятия блокировки соединений.

Посмотрим на пример командного файла (bat/cmd):


rem 1. Блокируем вход пользователей и завершаем текущие сеансы
"C:\Program Files\1cv8\current\bin\1cv8.exe" ENTERPRISE /S"Server\buh" /N"Администратор" /P"MyPassword" /CЗавершитьРаботуПользователей;КодРазрешения=BackupPass;ОжиданиеМин=2 /DisableStartupMessages /Out"C:\backup\logs\lock.log"

rem Ожидаем завершения работы пользователей
timeout /t 150 /nobreak

rem 2. Выполняем выгрузку базы данных в файл .dt
"C:\Program Files\1cv8\current\bin\1cv8.exe" CONFIG /S"Server\buh" /N"Администратор" /P"MyPassword" /UC"BackupPass" /DumpIB"\\backup\1c\buh_%date%.dt" /DisableStartupMessages /Out"C:\backup\logs\dump.log"

rem 3. Снимаем блокировку сеансов
"C:\Program Files\1cv8\current\bin\1cv8.exe" ENTERPRISE /S"Server\buh" /N"Администратор" /P"MyPassword" /UC"BackupPass" /CРазрешитьРаботуПользователей /DisableStartupMessages /Out"C:\backup\logs\unlock.log"

Параметр /DisableStartupMessages подавляет интерактивные окна с предупреждениями, которые могут остановить автоматическое выполнение пакетного файла.

Ограничение метода: если у пользователя открыто модальное окно или завис системный диалог операционной системы, сеанс клиента может не завершиться вовремя. Кроме того, активные регламентные задания также могут заблокировать монопольный режим.

Способ 2. Управление сеансами через утилиту RAC и администрирование кластера

Для серверных баз наиболее надежным способом отключения соединений без перезагрузки всего сервера является прямое обращение к кластеру серверов 1С через утилиту RAC (Remote Administration Client) или COM-объект V83.COMConnector.

Утилита RAC позволяет установить блокировку соединений, запретить выполнение фоновых и регламентных заданий, а затем принудительно сбросить все существующие сессии.

Разберем последовательность команд для блокировки и отключения сеансов:


rem Устанавливаем блокировку соединений и фоновых заданий
rac infobase --cluster=<ClusterID> update --infobase=<BaseID> --infobase-user="Администратор" --infobase-pwd="MyPassword" --sessions-denied=on --scheduled-jobs-denied=on --permission-code="BackupPass"

rem Получаем список сеансов и принудительно завершаем их
rac session --cluster=<ClusterID> terminate --infobase=<BaseID> --session=<SessionID>

После выгрузки базы блокировка снимается передачей параметров --sessions-denied=off и --scheduled-jobs-denied=off.

Способ 3. Принудительный перезапуск службы сервера 1С

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

Посмотрим на пример команд для пакетного файла:


net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
timeout /t 10 /nobreak
net start "1C:Enterprise 8.3 Server Agent (x86-64)"
timeout /t 15 /nobreak

"C:\Program Files\1cv8\current\bin\1cv8.exe" CONFIG /S"Server\buh" /N"Администратор" /P"MyPassword" /DumpIB"\\backup\1c\buh_%date%.dt" /DisableStartupMessages /Out"C:\backup\logs\dump.log"

Этот способ гарантированно закрывает все соединения, однако требует перезапуска службы с правами локального администратора Windows.

Почему .dt не подходит для регулярных бэкапов и как делать правильно

Выясним главную проблему выгрузки через /DumpIB. Файл .dt — это специализированный формат платформы 1С, предназначенный для переноса данных между различными СУБД (например, переход с файлового режима на PostgreSQL или MS SQL). В процессе выгрузки происходит сериализация таблиц в единый бинарный архив.

Использование .dt в качестве основного бэкапа несет серьезные риски:

  1. Скрытые повреждения: если в базе нарушена целостность ссылок или структура таблиц, выгрузка в .dt может пройти без ошибок, но загрузить такой файл обратно в чистую базу будет невозможно.
  2. Ограничения по объему: на базах размером более 50–100 Гб выгрузка и загрузка .dt часто завершаются аварийно из-за нехватки оперативной памяти (Out of Memory).
  3. Отсутствие горячего копирования: для создания .dt всегда требуется монопольный доступ.

Рекомендованный подход к архивации:

  1. На сервере MS SQL Server или PostgreSQL резервное копирование должно выполняться штатными средствами СУБД в режиме онлайн (без выгона пользователей и остановки сервисов).
  2. Для проверки корректности бэкапов на отдельном тестовом сервере настраивается автоматическое восстановление базы из бэкапа СУБД.
  3. Периодически выполняется пакетный запуск тестирования и исправления средствами Конфигуратора 1С с ключом /IBCheckAndRepair:
    
    "C:\Program Files\1cv8\current\bin\1cv8.exe" CONFIG /S"Server\buh_test" /N"Администратор" /P"MyPassword" /IBCheckAndRepair -LogAndRefsIntegrity -Reindex -RecalcTotals /DisableStartupMessages /Out"C:\backup\logs\repair.log"
    
  4. Если для регламентных задач требуется именно файл .dt (например, для передачи разработчикам), его рекомендуется создавать не с рабочей базы, а с автоматически развернутой ночной копии СУБД.
← На главную