В файловом режиме работы 1С предприятие часто сталкивается с ситуацией, когда сотрудники оставляют включенный клиент 1С и уходят домой. Активные сеансы удерживают блокировку файла таблицы базы данных 1Cv8.1CD. В результате штатные архиваторы не могут скопировать или сжать файл базы данных, а автоматическое резервное копирование по расписанию завершается ошибкой доступа.
Проанализируем причины возникновения этой проблемы и разберем проверенные практические варианты настройки автоматического бэкапа файловой базы 1С v8.
Выясним, почему стандартные средства архивации не всегда справляются с файловой базой:
1cv8.exe или 1cv8c.exe на ПК пользователей удерживают открытый хэндл (handle) файла 1Cv8.1CD через сетевой протокол SMB, из-за чего стандартное копирование ОС завершается ошибкой.Рассмотрим вариант архивации базы без предварительного принудительного закрытия сеансов пользователей. Консольная версия архиватора 7-Zip (7za.exe) поддерживает специальный ключ -ssw (Compress shared files), который позволяет упаковывать файлы, даже если они открыты другими программами для записи.
Создадим командный файл (bat-скрипт) для регулярного запуска в Планировщике заданий Windows:
"C:\Program Files\7-Zip\7za.exe" a "D:\Backups\base_%DATE%.zip" -ssw "D:\1C_Bases\MyBase\1Cv8.1CD"
Проанализируем ключевые параметры данной команды:
a — команда добавления элементов в архив.-ssw — ключ, предписывающий архиватору упаковку файлов, захваченных другими процессами.Если требуется гарантированно получить монопольный доступ к файлу базы данных перед созданием резервной копии, разберем методы принудительного освобождения сетевых файловых хэндлов на сервере.
Вариант А: Сброс сетевых сессий команды net session
Перед запуском архиватора выполняется сброс открытых сетевых подключений к общей папке базы данных. В скрипт архивации добавляем команду очистки сессий:
net session /delete /y
"C:\Program Files\7-Zip\7za.exe" a "D:\Backups\base_%DATE%.zip" "D:\1C_Bases\MyBase\1Cv8.1CD"
Вариант Б: Работа в режиме удаленного рабочего стола (RDP)
Если пользователи работают на терминальном сервере, перед началом копирования можно принудительно завершить процессы сеансов 1С с помощью утилиты taskkill:
taskkill /F /IM 1cv8.exe
taskkill /F /IM 1cv8c.exe
"C:\Program Files\7-Zip\7za.exe" a "D:\Backups\base_%DATE%.zip" "D:\1C_Bases\MyBase\1Cv8.1CD"
Также рекомендуется настроить Групповые политики (GPO) терминального сервера, ограничивающие максимальное время неактивности (Idle) и состояние отключенных сессий (Disconnected).
Вариант В: Перезагрузка сервера по расписанию
В несложных инфраструктурах часто применяется схема с плановой перезагрузкой компьютера-сервера в ночное время перед стартом бэкапа. Это гарантированно закрывает все зависшие соединения:
shutdown /r /f /t 01Cv8.1CD.Посмотрим на решение ситуации, когда доступ пользователей к файловой базе организован через веб-сервер (Apache или IIS). В этом случае процесс веб-сервера монопольно обращается к файлу 1Cv8.1CD.
Для корректной архивации достаточно временно остановить службу веб-сервера на время копирования:
net stop W3SVC
"C:\Program Files\7-Zip\7za.exe" a "D:\Backups\base_%DATE%.zip" "D:\1C_Bases\MyBase\1Cv8.1CD"
net start W3SVC
Для веб-сервера Apache вместо W3SVC указывается имя соответствующей службы (например, httpd).
Обратим внимание на важные технические нюансы при выборе метода резервного копирования:
1Cv8.1CD «на лету» (при помощи флага -ssw или копирования занятого файла) не гарантирует логическую целостность структуры. Если в момент снимка базы пользователь проводил документ или записывал транзакцию, архивный файл может содержать незавершенные записи..dt предназначен для переноса конфигурации и данных между различными СУБД, но не является физическим дампом базы. При наличии повреждений в структуре 1Cv8.1CD выгрузка в .dt может пройти успешно, но последующее восстановление из этого файла завершится критической ошибкой.taskkill или перезагрузку) обязательно запланируйте периодическую проверку файла базы с помощью утилиты chdbfl.exe.