Как получить монопольный доступ к файловой базе 1С для резервного копирования и корректно отключить пользователей?

Системный администратор 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

В процессе администрирования файловых баз 1С перед созданием резервной копии или проведением регламентных операций часто возникает ошибка отсутствия монопольного доступа. Пользователи оставляют программы открытыми в конце рабочего дня, а стандартные методы принудительного разрыва соединений нередко приводят к повреждению внутренней структуры базы данных. Разберем по шагам, почему возникают блокировки и как безопасно освободить файл базы данных для создания целостного архива.

Причины зависания блокировок и риски повреждения файла 1Cv8.1CD

Проанализируем механику работы файловой платформы 1С при доступе пользователей через сетевую папку (SMB-ресурс):

  1. Кэширование Windows (SMB Oplocks и Leasing): клиентские компьютеры кэшируют части файла 1Cv8.1CD. Если принудительно отключить пользователя, закрыть доступ к общему ресурсу или оборвать сеть, клиентская система не успевает записать кэшированные данные на диск сервера. Это приводит к нарушению логической структуры таблиц и индексов, вызывая ошибку «Файл не является файлом базы данных».
  2. Служебные файлы блокировок: помимо основной базы, в каталоге создаются служебные файлы (1Cv8.cfl, 1Cv8tmp.1CD, 1Cv8.pfl). При аварийном завершении работы дескриптор файла 1Cv8.cfl может удерживаться операционной системой, блокируя запуск конфигуратора.
  3. Ограничения механизма блокировки регламентных заданий: при установке блокировки сеансов через интерфейс программы клиенты получают команду на завершение с интервалом в 1–2 минуты. Однако если у пользователя открыто модальное окно или завис системный диалог, программа не завершит работу самостоятельно.

Способ 1. Закрытие файловых дескрипторов через оснастку Windows

Если пользователи не вышли из системы самостоятельно, системный администратор может освободить занятый файл вручную через графический интерфейс управления сервером.

  1. Открываем системную оснастку Управление компьютером (нажимаем Win + R и вводим compmgmt.msc).
  2. Переходим по дереву: Служебные программы > Общие папки > Открытые файлы.
  3. В списке находим файл 1Cv8.1CD и связанные с ним служебные файлы каталога базы.
  4. Нажимаем правой кнопкой мыши по нужному дескриптору и выбираем команду Закрыть открытый файл.

Важно: сбрасывать дескрипторы вручную следует только после того, как в базе была включена программная блокировка сеансов и выдержана технологическая пауза (5–10 минут), чтобы завершились все активные фоновые транзакции.

Способ 2. Автоматизация сброса сессий с помощью скриптов PowerShell

Для регулярного резервного копирования по расписанию ручные действия не подходят. Автоматизируем процедуру сброса сетевых блокировок с помощью командной строки или скриптов 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"

Способ 3. Пакетная выгрузка базы через конфигуратор с обходом блокировки

Наиболее надежный способ резервного копирования файловой базы — запуск конфигуратора в пакетном режиме с ключом создания файла выгрузки .dt. В отличие от простого копирования файла 1Cv8.1CD, создание выгрузки через конфигуратор контролирует целостность метаданных.

Разберем последовательность шагов сценария архивации:

  1. Устанавливаем блокировку соединений с кодом разрешения (например, BackupLock).
  2. Ожидаем выход пользователей.
  3. Запускаем конфигуратор с ключом /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

После завершения процесса резервного копирования снимаем блокировку базы данных для возобновления работы пользователей.

Способ 4. Управление терминальными сеансами (RDP)

Если пользователи работают на сервере терминалов через RDP, настраиваем политики автоматического сброса зависших сессий через локальные групповые политики (gpedit.msc):

  1. Переходим в раздел: Конфигурация компьютера > Административные шаблоны > Компоненты Windows > Службы удаленных рабочих столов > Узел сеансов удаленных рабочих столов > Ограничения по времени сеанса.
  2. Включаем параметр Задать предел времени для отключенных сеансов (например, завершать сессию через 1 час после разрыва связи).
  3. Включаем параметр Задать предел времени для неактивных, но активных сеансов, чтобы забытые на ночь программы автоматически закрывались операционной системой.

Способ 5. Использование теневого копирования тома (VSS)

При использовании специализированных архиваторов (например, Cobian Backup) можно задействовать службу Volume Shadow Copy Service (VSS). Она позволяет скопировать файл 1Cv8.1CD, даже если он заблокирован процессами пользователей.

Обратите внимание: у файловой платформы 1С отсутствует собственный модуль VSS Writer. Снимок VSS создает резервную копию в состоянии «crash-consistent» (аналогично резкому выключению питания). Если в момент создания снимка выполнялась запись документов, резервная копия может получиться с логическими ошибками. Если вы используете VSS для файловой базы, периодически проверяйте созданные архивы утилитой chdbfl.exe.

Надежная альтернатива: публикация файловой базы на веб-сервере

Чтобы навсегда избавиться от сетевых блокировок Windows (SMB) и риска повреждения файла базы при резком отключении пользователей, рекомендуется опубликовать файловую базу на локальном веб-сервере (IIS или Apache). В этом случае доступ к файлу 1Cv8.1CD осуществляет только рабочий процесс веб-сервера. Для выполнения монопольного резервного копирования достаточно на время скриптом остановить службу веб-сервера, выполнить копирование файла и запустить службу снова.

← На главную