Автоматизация ночного архивирования баз 1С в формат .dt часто сталкивается с проблемой "зависших" или просто активных сеансов пользователей. На 64-разрядных серверах стандартный перезапуск службы 1C:Enterprise 8.3 Server Agent не всегда приводит к желаемому результату, так как рабочие процессы rphost.exe могут удерживать соединения дольше положенного или некорректно завершаться. Рассмотрим подробнее, как решить эту задачу профессиональными методами, не ограничиваясь простыми командами остановки службы.
Для 64-разрядных систем наиболее правильным и "чистым" способом управления кластером является использование связки из сервера администрирования ras и консольной утилиты rac. Этот инструмент позволяет программно выполнять любые действия, доступные в интерактивной консоли администрирования.
Шаг 1. Запуск службы RAS. Проанализируем состояние сервера: чтобы команды rac работали, на сервере должна быть запущена служба ras.exe. Если она не установлена, ее можно зарегистрировать как системную службу командой:
sc create "1C:Enterprise 8.3 Administration Server" binPath= "C:\Program Files\1cv8\8.3.X.XXXX\bin\ras.exe cluster --service" start= auto
Шаг 2. Использование команд RAC в батнике. Разберем по шагам логику скрипта. Сначала нам необходимо получить идентификатор кластера, а затем — список сеансов для их завершения. Пример команды для получения списка сеансов выглядит так:
rac session --cluster=<ID_Кластера> list --infobase=<ID_Базы>
Чтобы завершить конкретный сеанс, используем команду terminate:
rac session --cluster=<ID_Кластера> terminate --session=<ID_Сеанса>
Для полной автоматизации в батнике можно реализовать цикл, который считывает вывод команды list и последовательно закрывает все найденные сеансы. Это гарантирует, что база будет освобождена перед началом выгрузки .dt.
Если вы предпочитаете использовать скрипты на языке VBScript или PowerShell, можно воспользоваться объектом V83.COMConnector. Этот метод позволяет более гибко управлять процессом, например, уведомлять пользователей перед отключением.
Проанализируем примерный алгоритм работы такого скрипта:
V83.COMConnector.ConnectAgent).GetSessions(), чтобы получить массив активных пользователей.TerminateSession().Важный нюанс для 64-разрядных систем: убедитесь, что библиотека comcntr.dll зарегистрирована в системе корректно. Если ваш скрипт запускается в 64-битном окружении, он должен обращаться к соответствующей версии компоненты. Выясним причину возможных ошибок: часто они связаны с тем, что 32-битный скрипт пытается вызвать 64-битную компоненту без настройки COM+ приложений.
Просто "выбросить" пользователей недостаточно. Если конфигурация пользователя настроена на автоматическое переподключение, его клиентское приложение попытается войти в базу снова через несколько секунд. Поэтому перед удалением сеансов необходимо установить блокировку установки новых соединений.
Рассмотрим, как это сделать через rac:
rac infobase --cluster=<ID> update --sessions-denied=on --scheduled-jobs-denied=on --infobase=<ID> --permission-code=MySecretCode
Параметр permission-code (код разрешения) критически важен. Он позволит вашему скрипту архивирования подключиться к базе в обход блокировки. При запуске конфигуратора для выгрузки .dt используйте ключ /UC:
"C:\Program Files\1cv8\common\1cestart.exe" DESIGNER /S "Server\BaseName" /N "Admin" /P "Pass" /DumpIB "C:\Backup\base.dt" /UC MySecretCode
В ситуациях, когда служба 1С "зависла" и не реагирует на команды управления, системные администраторы прибегают к радикальному методу — принудительному завершению процессов rphost.exe. Посмотрим на пример команды:
taskkill /f /im rphost.exe
Внимание: это "грязный" метод. На 64-разрядном сервере один rphost может обслуживать множество баз данных. Убивая процесс, вы прерываете работу всех пользователей во всех базах данного кластера. Используйте это только в крайнем случае и только в ночное время, когда риск повреждения кэша минимален, а перед этим обязательно выполняйте net stop для службы агента.
Несмотря на то, что задача автоматизации выгрузки .dt решаема, стоит прислушаться к советам опытных коллег. Для базы размером более 10-20 Гб (в вашем случае — 50 Гб) выгрузка в .dt становится крайне долгой и рискованной операцией. Проанализируем преимущества перехода на SQL-бэкапы:
.dt, за счет эффективных алгоритмов компрессии..dt чувствителен к логическим ошибкам в структуре данных, которые могут проявиться только в момент загрузки.Если же бизнес-требования жестко диктуют наличие именно .dt файлов (например, для передачи в облако или разработки), используйте связку RAC + Блокировка сеансов + Код разрешения /UC. Это наиболее профессиональный подход к автоматизации на платформе 1С 8.3.