При организации автоматического ночного резервного копирования информационных баз 1С системные администраторы часто используют пакетный запуск Конфигуратора с ключом /DumpIB. Однако создание выгрузки в файл .dt требует монопольного доступа к базе. Если в системе остается хотя бы один активный пользователь, зависший сеанс или запущенное фоновое регламентное задание, операция прерывается с ошибкой блокировки.
Разберем по шагам, как настроить автоматическое завершение сеансов пользователей, разблокировать монопольный доступ и выполнить пакетное архивирование, а также выясним, почему для рабочих серверных баз выгрузка в .dt не является основным способом резервного копирования.
Проанализируем основные способы решения задачи: от встроенных механизмов конфигурации до утилит администрирования кластера и средств СУБД.
В типовых конфигурациях 1С (Бухгалтерия предприятия, Управление торговлей, ERP и др.) реализован штатный механизм завершения работы пользователей через Библиотеку стандартных подсистем. Управление этим механизмом осуществляется через передачу параметра /C.
Важная техническая особенность: обработка параметров /CЗавершитьРаботуПользователей и /CРазрешитьРаботуПользователей выполняется логикой конфигурации при старте клиентского приложения, поэтому запуск необходимо выполнять в режиме предприятия ENTERPRISE, а не в режиме Конфигуратора CONFIG.
Рассмотрим типовой сценарий скрипта резервного копирования:
ENTERPRISE с блокировкой соединений и установкой кода разрешения./DumpIB и кодом разрешения /UC для выгрузки базы.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 подавляет интерактивные окна с предупреждениями, которые могут остановить автоматическое выполнение пакетного файла.
Ограничение метода: если у пользователя открыто модальное окно или завис системный диалог операционной системы, сеанс клиента может не завершиться вовремя. Кроме того, активные регламентные задания также могут заблокировать монопольный режим.
Для серверных баз наиболее надежным способом отключения соединений без перезагрузки всего сервера является прямое обращение к кластеру серверов 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.
Если в ночное время допустимо кратковременное прерывание работы всех баз на сервере, самым простым и радикальным методом сброса зависших сессий является перезапуск службы агента сервера 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.
Выясним главную проблему выгрузки через /DumpIB. Файл .dt — это специализированный формат платформы 1С, предназначенный для переноса данных между различными СУБД (например, переход с файлового режима на PostgreSQL или MS SQL). В процессе выгрузки происходит сериализация таблиц в единый бинарный архив.
Использование .dt в качестве основного бэкапа несет серьезные риски:
Рекомендованный подход к архивации:
/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"