С развитием платформы 1С:Предприятие 8.3 (начиная с версии 8.3.14) администраторам стал доступен новый мощный инструмент — утилита ibcmd. Она является частью концепции «Автономного сервера» и позволяет выполнять административные действия над информационными базами без необходимости запуска полноценного толстого клиента или консоли администрирования. В рамках этой статьи мы разберем, как автоматизировать процесс выгрузки базы в формат .dt и как правильно управлять сеансами пользователей в связке с этой утилитой.
Ранее для выгрузки базы в пакетном режиме мы использовали запуск 1cv8.exe с параметрами CONFIG /DumpIB. Рассмотрим, почему переход на ibcmd является оправданным. Проанализируем ситуацию: стандартный конфигуратор требует наличия установленных компонент графического интерфейса и часто потребляет больше ресурсов. Утилита ibcmd ориентирована на серверное использование, она может работать напрямую с СУБД (MS SQL Server, PostgreSQL и др.) и идеально подходит для встраивания в скрипты автоматизации и CI/CD процессы.
Важно понимать, что ibcmd работает в контексте автономного сервера. Это означает, что она может «подцепиться» к базе данных напрямую, используя параметры подключения к СУБД, даже если основной кластер серверов 1С в данный момент остановлен или недоступен. Однако у этого есть и обратная сторона: утилита не имеет встроенной команды для «выгона» пользователей из живого кластера 1С.
Разберем конкретный пример реализации выгрузки для клиент-серверного варианта на базе MS SQL Server (для автоматизации также может быть использована специальная конфигурация) — для этого отлично подойдёт программа централизованного администрирования и автоматизации 1С. Посмотрим на структуру командного файла, который позволяет автоматизировать этот процесс. Проанализируем параметры, которые передаются утилите.
:: Настройка путей и переменных
SET $DBServer=SQL-SERVER-NAME
SET $EXEPath=C:\Program Files\1cv8\8.3.20.1789\bin\ibcmd.exe
SET $BackUpPath=D:\Backups\1C\
SET $DataPath=D:\Temp\1C_Standalone\
:: Параметры подключения к 1С и СУБД
SET $1CUser=Admin
SET $1CPassw=AdminPassword
SET $DBUser=sa
SET $DBPassw=SQLPassword
SET $BaseName=Trade_Base
SET $FileName=%$BaseName%_%DATE%.dt
:: Запуск выгрузки
"%$EXEPath%" infobase dump --db-server=%$DBServer% --dbms=MSSQLServer --db-user=%$DBUser% --db-pwd=%$DBPassw% --db-name=%$BaseName% --user=%$1CUser% --password=%$1CPassw% --data=%$DataPath% "%$BackUpPath%%$FileName%"
Рассмотрим подробнее ключевые флаги команды infobase dump:
--db-server — адрес сервера базы данных.--dbms — тип системы управления базами данных (например, MSSQLServer или PostgreSQL).--db-user и --db-pwd — учетные данные администратора СУБД, позволяющие утилите прочитать данные на низком уровне.--user и --password — логин и пароль пользователя 1С с правами «Администратор системы».--data — путь к служебному каталогу, который ibcmd использует для временных файлов автономного сервера. Это обязательный параметр.Как выяснилось в ходе обсуждения, сама утилита ibcmd не предназначена для управления сеансами в классическом кластере. Если в базе находятся активные пользователи, выгрузка может завершиться ошибкой или привести к неконсистентности данных (хотя ibcmd старается блокировать таблицы) — решить проблему поможет инструмент управления активными пользователями и процессами 1С. Выясним причину, по которой ibcmd лишена этой функции: она создана для работы «вне» контекста менеджера кластера.
Для корректного завершения работы пользователей перед выгрузкой следует использовать утилиту rac (Remote Administration Client) или WEB приложение для управления сеансами. Рассмотрим последовательность действий для автоматического «выгона» пользователей:
ibcmd.Пример команд для управления сеансами через rac:
:: Установка блокировки начала сеансов
rac infobase --cluster=ID-КЛАСТЕРА update --infobase=ID-БАЗЫ --sessions-denied=on --permission-code=12345 --infobase-user=Admin --infobase-pwd=Pass
:: Завершение существующих сеансов (требует итерации по списку сеансов или использования скрипта)
rac session --cluster=ID-КЛАСТЕРА terminate --infobase=ID-БАЗЫ
Проанализируем ситуацию: использование rac требует запущенного сервиса ras (Remote Administration Service) на стороне сервера 1С. Если этот сервис не запущен, команды rac работать не будут.
Для повышения безопасности и удобства управления параметрами, мы рекомендуем использовать конфигурационные файлы в формате .yml. Это позволяет не передавать пароли в открытом виде через командную строку, где их может перехватить любой пользователь, имеющий доступ к списку процессов.
Посмотрим на пример структуры файла config.yml:
common:
data: D:\Temp\1C_Standalone\
infobase:
connection:
dbms: MSSQLServer
db-server: SQL-SERVER-NAME
db-name: Trade_Base
db-user: sa
db-pwd: SQLPassword
credentials:
user: Admin
password: AdminPassword
После создания такого файла команда выгрузки значительно упрощается:
ibcmd infobase dump --config="C:\Scripts\config.yml" "D:\Backups\backup.dt"
Рассмотрим ситуацию, когда при запуске утилиты возникает ошибка: «Невозможно запустить это приложение на вашем ПК». Проанализируем возможные причины:
ibcmd.exe на 64-битной ОС. Часто системные администраторы случайно копируют исполняемые файлы из папки bin 32-битной платформы на 64-битный сервер.Проанализируем важный спор между специалистами: стоит ли вообще использовать .dt для резервного копирования? Согласно официальной документации вендора, выгрузка в .dt — это логический бэкап, а не физический. Рекомендуется использовать средства СУБД (SQL Backups) для регулярного резервного копирования клиент-серверных баз.
Однако выгрузка через ibcmd неоценима в следующих случаях:
.dt прервется, если в базе обнаружены критические нарушения ссылочной целостности.Таким образом, использование ibcmd для создания .dt является отличным дополнением к регулярным SQL-бэкапам, позволяя автоматизировать проверку здоровья информационной базы и упростить процессы миграции данных.