Автоматизация создания резервных копий — одна из ключевых задач сопровождения информационных баз 1С. Разберем различные подходы к организации регулярной выгрузки данных, сценарии пакетного запуска конфигуратора, правила очистки старых архивов, а также корректные способы завершения сеансов пользователей.
Прежде чем приступать к написанию скриптов, проанализируем специфику формата .dt. Официально выгрузка базы в файл с расширением .dt предназначена для переноса данных между различными СУБД (например, при переходе с файлового режима на MS SQL/PostgreSQL) или для создания компактного архива конфигурации с данными. При формировании .dt выполняется сжатие таблиц без сохранения физических индексов. Если в базе имеются скрытые логические нарушения, процесс выгрузки может завершиться успешно, но восстановить данные из такого файла в чистую базу может не удастся.
Для регулярного резервного копирования рекомендуется придерживаться следующих правил:
1Cv8.1CD при условии полного отсутствия активных пользователей в базе..dt и без принудительного разрыва пользовательских сессий.Рассмотрим, как автоматизировать создание выгрузки в .dt с помощью командного файла Windows (батника). Конфигуратор 1С поддерживает запуск из командной строки в пакетном режиме с параметром /DumpIB.
Разберем пример простого скрипта для файловой базы данных с фиксацией даты в имени файла:
@echo off
rem Путь к исполняемому файлу платформы 1С
set EXE1C="C:\Program Files\1cv8\common\1cestart.exe"
rem Параметры подключения к информационной базе
set BASE_PATH="D:\1C_Bases\Accounting"
set USER="Admin"
set PASS="Password123"
rem Формирование имени файла с датой (формат ГГГГ-ММ-ДД)
set BACKUP_DIR=E:\1C_Backups\Accounting
set DUMP_FILE=%BACKUP_DIR%\Base_%date:~-4%_%date:~3,2%_%date:~0,2%.dt
set LOG_FILE=%BACKUP_DIR%\backup_log.txt
rem Запуск конфигуратора в пакетном режиме выгрузки
%EXE1C% DESIGNER /F%BASE_PATH% /N%USER% /P%PASS% /DumpIB "%DUMP_FILE%" /Out "%LOG_FILE%" -NoTruncate
rem Проверка кода завершения
if %ERRORLEVEL% EQU 0 (
echo Выгрузка успешно создана >> "%LOG_FILE%"
) else (
echo Ошибка при выгрузке базы! Код ошибки: %ERRORLEVEL% >> "%LOG_FILE%"
)
Разберем параметры командной строки, использованные в скрипте:
DESIGNER — запуск платформы в режиме «Конфигуратор»./F — указание пути к каталогу файловой информационной базы (для клиент-серверного варианта используется связка параметров /S"ИмяСервера\ИмяБазы")./N и /P — имя пользователя и пароль с административными правами./DumpIB — команда выгрузки информационной базы в указанный целевой файл./Out и -NoTruncate — перенаправление системных сообщений конфигуратора в текстовый лог-файл без перезаписи предыдущих записей, что позволяет контролировать процесс в автоматическом режиме./UC — код разрешения доступа, если на базу предварительно установлена блокировка соединений.Чтобы свободное место на диске не переполнялось, необходимо настроить удаление устаревших копий. Рассмотрим решение средствами командной строки Windows, которое оставляет заданное количество самых свежих архивов (например, последние 7 файлов):
@echo off
set BACKUP_DIR=E:\1C_Backups\Accounting
cd /d "%BACKUP_DIR%"
rem Формируем список всех файлов *.dt, отсортированных по дате изменения (сверху самые новые)
dir *.dt /a:-d /b /o:-d > list_of_files.txt
rem Пропускаем первые 7 файлов и удаляем все последующие (устаревшие)
for /F "skip=7 delims=" %%i in (list_of_files.txt) do (
echo Удаление устаревшего архива: %%i
del /Q "%%i"
)
rem Удаляем временный файл со списком
del /Q list_of_files.txt
Для успешной выгрузки через конфигуратор или прямого копирования файла 1Cv8.1CD требуется монопольный доступ. Завершение активных процессов командой taskkill /im 1cv8* /f допустимо применять только на изолированном терминальном сервере, однако это может привести к потере несохраненных данных пользователей.
Для клиент-серверного варианта безопаснее использовать программное отключение соединений через COM-соединение или утилиту RAC. Посмотрим на пример VBS-скрипта, отключающего активные сеансы перед резервным копированием через COM-коннектор:
Dim ServerName, BaseName, AdminUser, AdminPass
ServerName = "1cserver"
BaseName = "AccountingBase"
AdminUser = "admin"
AdminPass = "password"
Set ComConnector = CreateObject("V83.COMConnector")
Set Agent = ComConnector.ConnectAgent("tcp://" & ServerName)
Clusters = Agent.GetClusters()
For Each Cluster In Clusters
Agent.Authenticate Cluster, "", ""
WorkingProcesses = Agent.GetWorkingProcesses(Cluster)
For Each Process In WorkingProcesses
Set WorkProcess = ComConnector.ConnectWorkingProcess("tcp://" & ServerName & ":" & Process.MainPort)
WorkProcess.AddAuthentication AdminUser, AdminPass
Bases = WorkProcess.GetInfoBases()
For Each Base In Bases
If LCase(Base.Name) = LCase(BaseName) Then
Connections = WorkProcess.GetInfoBaseConnections(Base)
For Each Connection In Connections
' Отключаем только пользовательские клиенты 1CV8
If Connection.AppID = "1CV8" And Connection.IBConnMode = 0 Then
WorkProcess.Disconnect Connection
End If
Next
End If
Next
Next
Next
Если используется типовая конфигурация на базе Библиотеки стандартных подсистем (БСП), настраивать внешние скрипты не обязательно. В типовом функционале присутствует раздел «Администрирование» -> «Обслуживание» -> «Резервное копирование и восстановление».
Возможности встроенного механизма БСП для файловых баз:
Если несколько пользователей работают с файловой базой через сетевой каталог (SMB), существует риск повреждения файла 1Cv8.1CD при кратковременных сбоях локальной сети или зависании компьютеров клиентов. Для предотвращения таких проблем рекомендуется опубликовать файловую информационную базу на локальном веб-сервере (IIS или Apache). В этом случае доступ к файлу базы будет осуществлять только процесс веб-сервера, что полностью исключает повреждение структуры данных сетевыми сбоями на стороне рабочих станций.