Автоматизация рутинных операций по обслуживанию информационных баз 1С — типовая задача системного администратора. Часто для этого настраивают командные сценарии (bat-файлы), запускающие Конфигуратор в пакетном режиме. Разберем детально, как устроена командная строка запуска, что означает каждый параметр пакетного вызова, как формировать уникальные имена файлов с датой и почему создание дампа .dt не всегда является правильным решением для резервного копирования.
Рассмотрим структуру типовой команды выгрузки информационной базы:
"C:\Program Files\1cv82\common\1cestart.exe" DESIGNER /S Server-1C\1C-Work82 /N"Администратор" /P"12345" /DumpIB "\\bdc\BackUp\Base_%date:~-10%.dt"
Проанализируем каждый элемент этой строки:
1cv8.exe)./F, для серверных вариантов используется именно этот параметр.Server-1C) и имени информационной базы в кластере (1C-Work82). Обратите внимание: это не путь к таблицам СУБД на диске, а имя публикации базы в сервере приложений 1С..dt. Следом за ключом указывается полный путь к создаваемому файлу архива.Выясним, каким образом командный процессор Windows (CMD) подставляет дату в имя файла архива. В среде Windows доступна системная переменная окружения %date%, которая хранит текущую дату.
Синтаксис %переменная:~смещение,длина% позволяет выполнять операцию выделения подстроки. Если указано отрицательное смещение без параметра длины, командный интерпретатор отсчитывает символы с конца строки:
%date% может возвращать как короткую дату (например, 20.01.2025), так и дату с днем недели (например, Пн 20.01.2025).%date:~-10% отсекает все начальные символы и берет ровно 10 последних символов из конца строки. Для значения Пн 20.01.2025 результатом будут как раз 10 символов: 20.01.2025.Base_%date:~-10%.dt превращается в Base_20.01.2025.dt.Важное предостережение: поведение переменной %date% жестко привязано к региональным стандартам учетной записи, от имени которой выполняется скрипт. Если планировщик задач запускает bat-файл от системной учетной записи SYSTEM, разделителем в дате может оказаться символ косой черты (например, 20/01/2025). В файловой системе Windows слеш является разделителем директорий, из-за чего команда выгрузки завершится ошибкой пути.
Для надежного получения даты независимо от локали в сценариях рекомендуется использовать обращение к PowerShell:
for /f %%i in ('powershell -Command "Get-Date -Format 'yyyy-MM-dd'"') do set VDATE=%%i
set BACKUP_FILE=\\bdc\BackUp\Base_%VDATE%.dt
Если запускать выгрузку только базовыми параметрами, процесс может зависнуть на фоновом окне или аварийно закрыться без объяснения причин. Разберем параметры, которые необходимо обязательно добавлять в скрипты автоматизации:
-NoTruncate указывает дописывать лог в конец файла, сохраняя историю.Посмотрим на пример правильно оформленного скрипта с проверкой кода возврата %ERRORLEVEL%:
@echo off
set VDATE=%date:~-10%
set LOG_FILE=C:\Logs\backup_1c.log
set DUMP_FILE=\\bdc\BackUp\Base_%VDATE%.dt
"C:\Program Files\1cv82\common\1cestart.exe" DESIGNER /S Server-1C\1C-Work82 /N"Администратор" /P"12345" /DumpIB "%DUMP_FILE%" /Out "%LOG_FILE%" -NoTruncate /DisableStartupMessages
if %ERRORLEVEL% equ 0 (
echo Резервная копия успешно создана >> "%LOG_FILE%"
) else (
echo Ошибка при создании копии. Код: %ERRORLEVEL% >> "%LOG_FILE%"
)
Команда /DumpIB требует монопольного доступа к данным. Если в системе работают пользователи или запущены регламентные фоновые задания, выгрузка завершится ошибкой совместного доступа.
Сам Конфигуратор не имеет встроенного параметра командной строки для принудительного отключения чужих сеансов. Чтобы выгрузить клиент-серверную базу без помех, необходимо предварительно выполнить следующие действия:
rac или COM-соединение с кластером)./UC.Разберем главное архитектурное заблуждение: использование файла выгрузки .dt в качестве регулярного бэкапа для клиент-серверной базы является грубой ошибкой системного администрирования.
Формат .dt создавался фирмой «1С» исключительно как транспортный механизм для переноса данных между принципиально разными СУБД (например, перенос из файловой базы в Microsoft SQL Server или миграция с MS SQL на PostgreSQL). При регулярном резервном копировании он создает серьезные риски:
.dt даже из базы с нарушенной логической или физической ссылочной целостностью. Однако обратная загрузка такого файла (через /RestoreIB) упадет с критической ошибкой, и базу восстановить не удастся..dt СУБД полностью очищает существующие таблицы, заново пересоздает структуры, вставляет данные построчно и выполняет перерасчет всех итогов и индексов. Для баз объемом сотни гигабайт загрузка может длиться более суток или аварийно завершиться из-за переполнения оперативной памяти..dt делает лишь мгновенный снимок. Он не позволяет восстановить состояние данных на произвольную минуту или секунду (Point-in-Time Recovery), так как не фиксирует журнал транзакций.Правильное решение для рабочих баз: настройте резервное копирование штатными средствами СУБД (планы обслуживания в Microsoft SQL Server или утилиты pg_dump / физические копии в PostgreSQL). Средства СУБД создают резервные копии на лету, не требуют отключения пользователей, работают в разы быстрее и гарантируют быстрое и надежное восстановление работоспособности информационной системы.