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

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

Автоматизация обслуживания информационных баз 1С — одна из ключевых задач системного администратора. Часто возникает необходимость выгрузки базы в формат .dt по расписанию, например, для создания тестовых сред или в качестве дополнительной меры страховки. Однако основной проблемой при выполнении таких сценариев становится наличие активных сеансов пользователей, которые блокируют исключительный доступ к базе.

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

Анализ проблемы: почему пользователи не выходят из базы

В типовых сценариях часто используется параметр командной строки /C ЗавершитьРаботуПользователей. Важно понимать, что этот параметр сам по себе не является командой «убить все процессы». Он лишь передает строковое значение в глобальный обработчик ПриНачалеРаботыСистемы. Если ваша конфигурация построена на базе «1С:Библиотека стандартных подсистем» (БСП), то этот параметр будет распознан, и система запустит штатный механизм завершения работы. Для этой задачи можно использовать обработку для блокировки подключений и завершения сеансов через БСП.

Проанализируем основные причины, по которым сеансы остаются активными:

  1. Таймаут завершения: Работа пользователей завершается не мгновенно. Стандартные механизмы БСП обычно дают пользователю около 60 секунд на сохранение данных и закрытие окон.
  2. Модальные окна: Если у пользователя открыто модальное окно или диалог с вопросом «Сохранить изменения?», автоматическое завершение может заблокироваться до тех пор, пока человек не нажмет кнопку.
  3. Зависшие сеансы: Спящие или некорректно разорванные сетевые соединения могут отображаться в консоли как активные сеансы, которые не реагируют на программные команды завершения.
  4. Фоновые задания: Регламентные операции, такие как индексация полнотекстового поиска или обмен данными, часто мешают монопольному доступу.

Решение №1: Улучшенный bat-файл с использованием таймаутов

Разберем, как модифицировать исходный скрипт, чтобы дать системе время на корректное закрытие всех соединений. Мы добавим команду ожидания и проверку успешности завершения. Посмотрим на пример кода:


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. Это критически важный момент: если база заблокирована программно, зайти в нее (включая конфигуратор для выгрузки) можно только с использованием этого секретного кода.

Решение №2: Принудительный перезапуск службы агента сервера

Если штатные средства БСП не справляются с «бессмертными» сеансами, можно прибегнуть к более радикальному методу — временной остановке службы 1C:Enterprise 8.3 Server Agent. Рассмотрим этот алгоритм по шагам:

  1. Остановка службы сервера приложений. Это гарантированно обрывает все соединения.
  2. Запуск службы.
  3. Немедленный запуск конфигуратора для выгрузки (пока пользователи не успели подключиться).

Пример реализации в 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С, поэтому его стоит использовать только в периоды минимальной активности.

Решение №3: Профессиональный подход через СУБД

Выясним причину, по которой опытные администраторы скептически относятся к выгрузке в .dt. Файл .dt — это не физический бэкап, а логический образ данных. При больших объемах базы (сотни гигабайт) выгрузка может занять часы, а загрузка обратно — закончиться ошибкой формата потока или нехваткой места в файловой базе.

Проанализируем правильную последовательность действий для создания копии базы для экспериментов:

  1. Создаем бэкап средствами SQL (например, в MS SQL Server Management Studio или через скрипт BACKUP DATABASE). Это происходит мгновенно и не требует отключения пользователей.
  2. Восстанавливаем этот бэкап в новую временную базу на SQL-сервере под другим именем.
  3. Если нам все же нужен .dt, запускаем выгрузку из этой временной базы. Поскольку в ней гарантированно никого нет, процесс пройдет без ошибок доступа.

Особенности работы с файловыми базами и ограничения объема

Если ваша цель — выгрузить .dt, чтобы развернуть его в файловом варианте, помните об ограничениях. Традиционно размер одной таблицы в файловой базе не может превышать 4 Гб. Рассмотрим, как современные платформы (начиная с 8.3.8) позволяют расширить эти рамки:

При создании или конвертации базы можно установить увеличенный размер страницы данных (до 64 Кб). Это позволяет увеличить лимит одной таблицы до 6 Гб. Однако, если ваша таблица итогов или регистр сведений в SQL занимает 20 Гб, никакая настройка страниц не позволит загрузить такую базу в файловый вариант. В этом случае выгрузка в .dt для «экспериментов в файловой базе» теряет смысл.

Использование утилиты RAC для управления сеансами

Для более тонкого управления сеансами без перезагрузки всей службы рекомендуем использовать утилиту rac.exe. Она позволяет программно обращаться к кластеру серверов. С ее помощью можно:

Это более надежный способ, чем передача параметра /C, так как он работает на уровне сервера приложений, а не на уровне логики конфигурации.

Подводя итог, можно сказать: для простых задач достаточно bat-файла с командой timeout на 120-180 секунд. Для критически важных систем лучше настроить резервное копирование средствами СУБД и использовать временные базы для подготовки выгрузок в формате .dt. Для реализации подобного сценария можно использовать скрипты для резервного копирования в dt без отключения пользователей.

← На главную