В процессе администрирования файловых баз 1С перед созданием резервной копии или проведением регламентных операций часто возникает ошибка отсутствия монопольного доступа. Пользователи оставляют программы открытыми в конце рабочего дня, а стандартные методы принудительного разрыва соединений нередко приводят к повреждению внутренней структуры базы данных. Разберем по шагам, почему возникают блокировки и как безопасно освободить файл базы данных для создания целостного архива.
Проанализируем механику работы файловой платформы 1С при доступе пользователей через сетевую папку (SMB-ресурс):
1Cv8.1CD. Если принудительно отключить пользователя, закрыть доступ к общему ресурсу или оборвать сеть, клиентская система не успевает записать кэшированные данные на диск сервера. Это приводит к нарушению логической структуры таблиц и индексов, вызывая ошибку «Файл не является файлом базы данных».1Cv8.cfl, 1Cv8tmp.1CD, 1Cv8.pfl). При аварийном завершении работы дескриптор файла 1Cv8.cfl может удерживаться операционной системой, блокируя запуск конфигуратора.Если пользователи не вышли из системы самостоятельно, системный администратор может освободить занятый файл вручную через графический интерфейс управления сервером.
Win + R и вводим compmgmt.msc).1Cv8.1CD и связанные с ним служебные файлы каталога базы.Важно: сбрасывать дескрипторы вручную следует только после того, как в базе была включена программная блокировка сеансов и выдержана технологическая пауза (5–10 минут), чтобы завершились все активные фоновые транзакции.
Для регулярного резервного копирования по расписанию ручные действия не подходят. Автоматизируем процедуру сброса сетевых блокировок с помощью командной строки или скриптов PowerShell.
Посмотрим на пример PowerShell-скрипта, который принудительно закрывает все открытые сетевые дескрипторы к файлу базы:
# Получаем и закрываем открытые файловые дескрипторы базы данных 1С
$DbPath = "D:\Bases\ZUP\1Cv8.1CD"
Get-SmbOpenFile | Where-Object { $_.Path -eq $DbPath } | Close-SmbOpenFile -Force
В устаревших операционных системах или классическом командном файле .bat можно использовать штатную утилиту:
openfiles /disconnect /a * /op "D:\Bases\ZUP\1Cv8.1CD"
Наиболее надежный способ резервного копирования файловой базы — запуск конфигуратора в пакетном режиме с ключом создания файла выгрузки .dt. В отличие от простого копирования файла 1Cv8.1CD, создание выгрузки через конфигуратор контролирует целостность метаданных.
Разберем последовательность шагов сценария архивации:
BackupLock)./UC для обхода установленной блокировки:
"C:\Program Files\1cv8\8.3.24.1342\bin\1cv8.exe" DESIGNER /F "D:\Bases\ZUP" /N "Admin" /P "Password" /DumpIB "D:\Backup\ZUP.dt" /UC BackupLock
После завершения процесса резервного копирования снимаем блокировку базы данных для возобновления работы пользователей.
Если пользователи работают на сервере терминалов через RDP, настраиваем политики автоматического сброса зависших сессий через локальные групповые политики (gpedit.msc):
При использовании специализированных архиваторов (например, Cobian Backup) можно задействовать службу Volume Shadow Copy Service (VSS). Она позволяет скопировать файл 1Cv8.1CD, даже если он заблокирован процессами пользователей.
Обратите внимание: у файловой платформы 1С отсутствует собственный модуль VSS Writer. Снимок VSS создает резервную копию в состоянии «crash-consistent» (аналогично резкому выключению питания). Если в момент создания снимка выполнялась запись документов, резервная копия может получиться с логическими ошибками. Если вы используете VSS для файловой базы, периодически проверяйте созданные архивы утилитой chdbfl.exe.
Чтобы навсегда избавиться от сетевых блокировок Windows (SMB) и риска повреждения файла базы при резком отключении пользователей, рекомендуется опубликовать файловую базу на локальном веб-сервере (IIS или Apache). В этом случае доступ к файлу 1Cv8.1CD осуществляет только рабочий процесс веб-сервера. Для выполнения монопольного резервного копирования достаточно на время скриптом остановить службу веб-сервера, выполнить копирование файла и запустить службу снова.