Автоматизация обслуживания информационных баз 1С — одна из ключевых задач системного администратора. Часто возникает необходимость выгрузки базы в формат .dt по расписанию, например, для создания тестовых сред или в качестве дополнительной меры страховки. Однако основной проблемой при выполнении таких сценариев становится наличие активных сеансов пользователей, которые блокируют исключительный доступ к базе.
Рассмотрим подробно, почему стандартные скрипты могут не срабатывать, как правильно завершать работу пользователей и какие альтернативные подходы существуют для надежного резервного копирования.
В типовых сценариях часто используется параметр командной строки /C ЗавершитьРаботуПользователей. Важно понимать, что этот параметр сам по себе не является командой «убить все процессы». Он лишь передает строковое значение в глобальный обработчик ПриНачалеРаботыСистемы. Если ваша конфигурация построена на базе «1С:Библиотека стандартных подсистем» (БСП), то этот параметр будет распознан, и система запустит штатный механизм завершения работы. Для этой задачи можно использовать обработку для блокировки подключений и завершения сеансов через БСП.
Проанализируем основные причины, по которым сеансы остаются активными:
Разберем, как модифицировать исходный скрипт, чтобы дать системе время на корректное закрытие всех соединений. Мы добавим команду ожидания и проверку успешности завершения. Посмотрим на пример кода:
echo off
set mydate=%date:~,10%
Set NameServer=192.168.218.99
Set NameBase=pro
Set Login=Admin
Set Password=12345
Set KodRazr=123456
Set PathTo1C="C:\Program Files (x86)\1cv8\8.3.9.1850\bin\1cv8.exe"
REM 1. Посылаем сигнал на завершение работы
%PathTo1C% ENTERPRISE /S%NameServer%\%NameBase% /N%Login% /P%Password% /DisableStartupMessages /C ЗавершитьРаботуПользователей
REM 2. Ждем 2-3 минуты, пока пользователи и фоновые задания закроются
timeout /t 120 /nobreak
REM 3. Выполняем выгрузку с использованием кода разрешения (UC)
%PathTo1C% CONFIG /S%NameServer%\%NameBase% /N%Login% /P%Password% /DisableStartupMessages /UC %KodRazr% /DumpIB C:\BackUp\%mydate%_%NameBase%_copy.dt /OUT C:\BackUp\%mydate%_%NameBase%_log.txt
REM 4. Разрешаем вход пользователям обратно
%PathTo1C% ENTERPRISE /S%NameServer%\%NameBase% /N%Login% /P%Password% /DisableStartupMessages /C РазрешитьРаботуПользователей /UC %KodRazr%
В этом примере мы используем параметр /UC. Это критически важный момент: если база заблокирована программно, зайти в нее (включая конфигуратор для выгрузки) можно только с использованием этого секретного кода.
Если штатные средства БСП не справляются с «бессмертными» сеансами, можно прибегнуть к более радикальному методу — временной остановке службы 1C:Enterprise 8.3 Server Agent. Рассмотрим этот алгоритм по шагам:
Пример реализации в bat-файле:
net stop "1C:Enterprise 8.3 Server Agent"
timeout /t 10
net start "1C:Enterprise 8.3 Server Agent"
timeout /t 20
REM Выгрузка базы (пользователи еще не успели войти)
"C:\Program Files\1cv8\8.3.x.xxxx\bin\1cv8.exe" CONFIG /S"Server\Base" /N"Admin" /P"Pass" /DumpIB "C:\Backup\base.dt"
Важно: Этот метод прерывает работу всех баз на данном сервере 1С, поэтому его стоит использовать только в периоды минимальной активности.
Выясним причину, по которой опытные администраторы скептически относятся к выгрузке в .dt. Файл .dt — это не физический бэкап, а логический образ данных. При больших объемах базы (сотни гигабайт) выгрузка может занять часы, а загрузка обратно — закончиться ошибкой формата потока или нехваткой места в файловой базе.
Проанализируем правильную последовательность действий для создания копии базы для экспериментов:
BACKUP DATABASE). Это происходит мгновенно и не требует отключения пользователей..dt, запускаем выгрузку из этой временной базы. Поскольку в ней гарантированно никого нет, процесс пройдет без ошибок доступа.Если ваша цель — выгрузить .dt, чтобы развернуть его в файловом варианте, помните об ограничениях. Традиционно размер одной таблицы в файловой базе не может превышать 4 Гб. Рассмотрим, как современные платформы (начиная с 8.3.8) позволяют расширить эти рамки:
При создании или конвертации базы можно установить увеличенный размер страницы данных (до 64 Кб). Это позволяет увеличить лимит одной таблицы до 6 Гб. Однако, если ваша таблица итогов или регистр сведений в SQL занимает 20 Гб, никакая настройка страниц не позволит загрузить такую базу в файловый вариант. В этом случае выгрузка в .dt для «экспериментов в файловой базе» теряет смысл.
Для более тонкого управления сеансами без перезагрузки всей службы рекомендуем использовать утилиту rac.exe. Она позволяет программно обращаться к кластеру серверов. С ее помощью можно:
Это более надежный способ, чем передача параметра /C, так как он работает на уровне сервера приложений, а не на уровне логики конфигурации.
Подводя итог, можно сказать: для простых задач достаточно bat-файла с командой timeout на 120-180 секунд. Для критически важных систем лучше настроить резервное копирование средствами СУБД и использовать временные базы для подготовки выгрузок в формате .dt. Для реализации подобного сценария можно использовать скрипты для резервного копирования в dt без отключения пользователей.