Автоматизация резервного копирования — одна из ключевых задач системного администратора и разработчика 1С. Однако при настройке автоматической выгрузки информационной базы в файл формата .dt с помощью командных файлов (батников) и планировщика задач Windows часто возникает крайне неприятная ситуация. Процесс, который годами работал стабильно, внезапно начинает завершаться с ошибкой: «Информационная база. Ошибка выгрузки в файл».
Особенно загадочно эта проблема выглядит тогда, когда при ручном запуске Конфигуратора выгрузка проходит без единого сбоя, а автоматический запуск ночью регулярно падает. В этой статье мы подробно разберем, почему возникает эта ошибка, проанализируем внутренние механизмы платформы 1С:Предприятие 8.3 и рассмотрим несколько надежных способов решения проблемы.
Для того чтобы найти эффективное решение, давайте сначала разберем физические причины сбоя. Платформа 1С 8.3 при попытке выполнить команду DumpIB выдвигает ряд жестких требований к операционной системе, СУБД и собственному окружению.
Выделим четыре основные причины сбоя:
.dt — это деструктивная операция с точки зрения блокировок. Ей требуется абсолютный монопольный доступ к таблицам базы данных. В таких конфигурациях, как «Зарплата и управление персоналом» (ЗУП 3.1), постоянно работают тяжелые фоновые процессы: расчеты, обновление индексов, загрузка классификаторов. Если в момент старта вашего скрипта запустится хотя бы одно фоновое задание, монопольный режим получить не удастся, и платформа выдаст ошибку выгрузки.SYSTEM или специального технического пользователя). У этой учетной записи может не быть смонтированных сетевых дисков (например, диска F:\), из-за чего 1С не может записать файл по указанному пути..dt платформа производит колоссальный объем промежуточных вычислений и формирует временный архив в локальной папке Temp той учетной записи, под которой запущен процесс. Если выгрузка идет под учетной записью SYSTEM, используется папка на диске C:\. При нехватке места на системном диске процесс аварийно прерывается СУБД или самой платформой.Перейдем к практическим методам решения этой проблемы.
Самый правильный способ при прямом резервном копировании — гарантировать монопольный доступ программным путем непосредственно перед выгрузкой. Для этого мы должны перевести базу данных в заблокированное состояние, завершить все активные сеансы (включая зависшие фоновые задания) и только после этого выполнить экспорт.
Рассмотрим пример профессионального командного файла, который решает эту задачу с использованием утилиты администрирования 1С. Начиная с платформы 8.3, для управления кластером рекомендуется использовать утилиту rac и службу ras.
Проанализируем пример такого сценария:
@echo off
setlocal
:: Настройка параметров подключения к кластеру 1С
set 1C_BIN="C:\Program Files\1cv8\8.3.22.1709\bin\1cestart.exe"
set CLUSTER_PORT=1540
set SERVER_NAME=SQL-SERVER
set DB_NAME=ZUP_PROD
set DB_USER=Admin
set DB_PASS=SecretPassword
set UC_CODE=BackupKey
:: Имя файла для сохранения копии
set BACKUP_PATH="\\BackupServer\1C_Backups\ZUP_%date%.dt"
:: 1. Установка блокировки новых соединений и регламентных заданий
"C:\Program Files\1cv8\8.3.22.1709\bin\rac.exe" cluster --host=%SERVER_NAME% --port=%CLUSTER_PORT% infobase --auth-user="" --auth-pass="" update --infobase=%DB_NAME% --sessions-deny=on --scheduled-jobs-deny=on --denied-message="Выполняется резервное копирование" --permission-code=%UC_CODE%
:: 2. Завершение существующих сеансов пользователей и фоновыx процессов
"C:\Program Files\1cv8\8.3.22.1709\bin\rac.exe" session --host=%SERVER_NAME% --port=%CLUSTER_PORT% terminate --infobase=%DB_NAME%
:: Небольшая пауза для гарантированного завершения всех процессов на сервере
timeout /t 15 /nobreak
:: 3. Запуск выгрузки базы в формате .dt с кодом разрешения /UC
%1C_BIN% DESIGNER /S"%SERVER_NAME%\%DB_NAME%" /N"%DB_USER%" /P"%DB_PASS%" /DumpIB %BACKUP_PATH% /UC %UC_CODE% /Out "C:\Logs\backup_zup.log" -NoTruncate
:: 4. Снятие блокировки с информационной базы после завершения процесса
"C:\Program Files\1cv8\8.3.22.1709\bin\rac.exe" cluster --host=%SERVER_NAME% --port=%CLUSTER_PORT% infobase --auth-user="" --auth-pass="" update --infobase=%DB_NAME% --sessions-deny=off --scheduled-jobs-deny=off
echo Резервное копирование завершено!
endlocal
Разберем, что происходит в этом скрипте. Сначала мы через консольную утилиту rac.exe запрещаем новые подключения к базе (параметр --sessions-deny=on) и полностью блокируем запуск фоновых задач (параметр --scheduled-jobs-deny=on). Мы обязательно указываем секретный код разрешения (параметр --permission-code), который позволит нашему скрипту обойти блокировку. Затем мы принудительно сбрасываем все текущие сеансы. И только убедившись, что в базе никого нет, мы инициируем выгрузку с ключом /UC. В качестве альтернативы ручному написанию скриптов можно использовать внешнюю обработку для автоматизированного управления блокировками, сеансами и резервным копированием.
Если ваша база работает на клиент-серверном варианте (MS SQL Server или PostgreSQL), использование формата .dt в качестве основного средства резервного копирования является грубой ошибкой администрирования. Платформа 1С создана для бизнес-приложений, и ее внутренние механизмы архивации не могут соревноваться в надежности и скорости с промышленными СУБД. Для настройки надежного архивирования средствами самой базы данных можно воспользоваться набором скриптов для многоуровневого резервного копирования MS SQL.
Что делать, если программистам или смежным отделам все же жизненно необходим свежий файл .dt каждый день, но вы не хотите прерывать работу пользователей и регламентных заданий в рабочей базе? Решением станет развертывание схемы с «промежуточной» базой.
Давайте разберем этот алгоритм по шагам:
.bak для MS SQL). Этот процесс происходит мгновенно, не требует монопольного доступа и абсолютно незаметен для пользователей.ZUP_TEMP).ZUP_TEMP гарантированно нет пользователей, а регламентные задания в восстановленной копии можно программно отключить при создании, батнику ничто не помешает выполнить команду DumpIB быстро и без ошибок..dt техническая база данных удаляется с SQL-сервера до следующей ночи.Данный подход полностью исключает человеческий фактор, конфликты блокировок и гарантирует получение корректного файла выгрузки без остановки бизнес-процессов организации.
Если вы хотите оставить прямой метод выгрузки, но он регулярно дает сбои при работе под планировщиком задач, необходимо правильно настроить параметры самой операционной системы Windows.
Проанализируем настройки планировщика задач и внесем ключевые изменения:
F:\Backups\base.dt. Для планировщика, запущенного под системной учетной записью, этого диска физически не существует. Всегда указывайте полные UNC-пути: \\192.168.1.100\SharedFolder\Backups\base.dt.SYSTEM. Перенастройте задачу на запуск от имени специально созданного локального или доменного администратора, у которого есть явные права на запись в целевую сетевую папку и на чтение папки установки платформы 1С.C:\, переопределите системные переменные TEMP и TMP для учетной записи, под которой запускается резервное копирование, на другой физический диск с большим объемом свободного пространства.Применение любого из описанных методов позволит вам навсегда забыть об ошибке выгрузки в файл и сделает процесс резервного копирования ваших баз данных 1С стабильным и предсказуемым.