Зависшая блокировка базы 1С: когда файл .1CL можно стереть, а когда нельзя
Содержание
В файловой базе 1С 8.3 файл блокировки называется 1Cv8.1CL и лежит в одной папке с 1Cv8.1CD. Удалять его можно только тогда, когда базу не держит ни один процесс: все пользователи вышли, 1cv8.exe и веб-сервер её не используют. Если Windows не даёт стереть файл — значит, блокировка живая, и удалять нужно не файл, а причину.
Типичная ситуация: вечером свет моргнул, утром бухгалтер открывает базу и получает Ошибка совместного доступа к файлу '1Cv8.1CL'. 32(0x00000020): Процесс не может получить доступ к файлу, так как этот файл занят другим процессом. Или администратор хочет обновить конфигурацию
, а программа пишет, что в базе есть другие пользователи, хотя все давно ушли домой. Ниже — порядок действий без риска для данных, отдельно для файлового и клиент-серверного варианта.
Какие файлы блокировки создаёт 1С и что в них хранится
Файловая база — это папка с несколькими файлами. Не всё, что лежит рядом с 1Cv8.1CD, можно трогать.
| Файл или папка | Что это | Можно удалять? |
|---|---|---|
1Cv8.1CD | Сами данные и конфигурация | ❌ Никогда |
1Cv8.1CL | Файл блокировки: отмечает, что с базой кто-то работает | ✅ Только когда базу никто не держит |
*.lck | Служебные файлы блокировки, которые иногда остаются после сбоя | ✅ На тех же условиях |
1Cv8tmp.1CD | Временный файл, появляется при реструктуризации и тестировании | ⚠️ Только если операция точно не идёт |
1Cv8Log | Журнал регистрации | ❌ Не трогать ради блокировки |
1Cv8.1CL — не сама блокировка, а её маркер. Пока процесс 1С держит файл открытым, операционная система не даст его удалить. Когда процесс завершается штатно, платформа освобождает файл. После аварийного выключения, обрыва сети или «убитого» процесса файл может остаться, но обычно он уже никем не занят и платформа перезапишет его при следующем входе.
Сам по себе оставшийся файл 1Cv8.1CL редко мешает. Мешает процесс, который его держит. Поэтому главный шаг — найти этот процесс.
Как понять, что база действительно заблокирована зависшим сеансом
Перед удалением чего-либо проверьте, что блокировка именно «мёртвая», а не принадлежит работающему коллеге.
Признаки зависшей блокировки:
- 🔒 при входе появляется ошибка совместного доступа к
1Cv8.1CLили1Cv8.1CD; - 👥 Конфигуратор не может установить монопольный режим, хотя пользователи говорят, что вышли;
- 🕐 в списке активных пользователей висит сеанс человека, который ушёл несколько часов назад;
- 💥 перед этим был сбой: отключение питания, перезагрузка терминального сервера, обрыв VPN.
Где посмотреть, кто в базе. В самой программе: в БП 3.0 и ЗУП 3.1 — Администрирование → Обслуживание → Активные пользователи. В Конфигураторе — меню Администрирование → Активные пользователи. Если в списке только вы, а ошибка остаётся — базу держит процесс без сеанса пользователя: фоновый 1cv8.exe, веб-сервер или антивирус.
Кто держит файл на уровне Windows. Это самый точный способ:
- На компьютере, где лежит папка с базой, откройте
compmgmt.msc→Общие папки → Открытые файлы. Там видно, какой пользователь с какого компьютера открыл1Cv8.1CDи1Cv8.1CL. - Либо в командной строке от имени администратора выполните
net file— команда покажет открытые по сети файлы и их идентификаторы. - Если база лежит на том же компьютере, где запускается 1С, откройте Монитор ресурсов (
resmon) → вкладкаЦП→ полеСвязанные дескрипторыи введите1Cv8. Монитор покажет процесс, который держит файл.
Удаление файла блокировки в файловой базе: пошагово
Удаление файла блокировки при работающих пользователях может повредить базу. Делайте это вне рабочего времени или после того, как всех предупредили: у тех, кто ещё в базе, сеансы оборвутся без сохранения.
Шаг 1. Сделайте копию папки базы
Скопируйте всю папку с 1Cv8.1CD в другое место. Если файл данных сейчас занят, копия может получиться неполной — тогда сначала выполните шаги 2–3 и только потом копируйте. Это единственная операция в инструкции, где без резервной копии нельзя.
Шаг 2. Закройте процессы 1С
Попросите пользователей выйти. Затем проверьте, что не осталось «висящих» процессов:
tasklist /v /fi "imagename eq 1cv8.exe"
tasklist /v /fi "imagename eq 1cv8c.exe"
Ключ /v выводит имя пользователя Windows, под которым запущен процесс. На терминальном сервере это сразу показывает, чей сеанс завис. Процесс конкретного пользователя можно завершить в Диспетчере задач на вкладке Пользователи или командой:
taskkill /pid 4812 /f
Номер 4812 здесь условный — подставьте PID из вывода tasklist.
Команда taskkill /im 1cv8.exe /f завершит 1С у всех пользователей сервера, а не только у зависшего. На терминальном сервере так делать можно только когда в базах никто не работает.
Шаг 3. Закройте сетевые дескрипторы
Если база лежит в общей папке, файл может держать не процесс на сервере, а клиент с другого компьютера, у которого оборвалась сеть. Найдите строку с 1Cv8.1CD или 1Cv8.1CL в Общие папки → Открытые файлы, щёлкните правой кнопкой и выберите закрытие файла. То же через командную строку:
net file
net file 1342 /close
Здесь 1342 — идентификатор из первой колонки вывода net file.
Шаг 4. Удалите файл блокировки
Откройте папку базы и удалите 1Cv8.1CL (и файлы .lck, если они там есть). Если Windows пишет, что файл открыт в другой программе, — вернитесь к шагам 2–3: кто-то его ещё держит. Не пытайтесь удалить такой файл утилитами принудительного удаления: блокировку они снимут, но процесс продолжит писать в базу.
Шаг 5. Проверьте базу
Запустите 1С в режиме Предприятия. Если база открылась, работа восстановлена. Если появились ошибки чтения данных, запустите Конфигуратор, Администрирование → Тестирование и исправление — это уже следствие сбоя, а не файла блокировки. Для тестирования нужен монопольный доступ, поэтому в базе в этот момент не должно быть никого.
Как снять блокировку в клиент-серверной базе 1С
В клиент-серверном варианте файлов 1Cv8.1CL нет: данные хранит СУБД, а сеансы и соединения учитывает кластер серверов
1С. Удалять что-либо в каталоге srvinfo ради «блокировки» не нужно и опасно. Блокировку снимают завершением сеансов.
Через консоль администрирования серверов
- Запустите
Администрирование серверов 1С Предприятия. - Раскройте
Центральные серверы 1С:Предприятия → <сервер> → Кластеры → <кластер> → Информационные базы → <база>. - Откройте узел
Сеансы. Найдите зависший сеанс по имени пользователя, компьютеру и времени начала. - Через контекстное меню удалите сеанс. Пользователь, если он ещё работал, получит сообщение о завершении работы.
- Если нужно освободить базу полностью, проверьте ещё узел
Соединения.
Чтобы на время работ никто не зашёл заново, откройте свойства информационной базы, включите Блокировка начала сеансов включена, задайте сообщение и Код разрешения. Администратор затем входит с параметром запуска /UC<код>, например /UC1234.
Через утилиту rac
Если графической консоли нет под рукой, те же действия выполняются утилитой rac. Для неё должна быть запущена служба ras. Порядок такой:
rac cluster list
rac infobase summary list --cluster=<uuid-кластера>
rac session list --cluster=<uuid-кластера> --infobase=<uuid-базы>
rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>
Идентификаторы берите из вывода предыдущей команды. Если на кластере задан администратор, добавьте --cluster-user и --cluster-pwd. Параметры остальных подкоманд смотрите в справке rac help.
Завершение сеанса обрывает работу пользователя: несохранённый документ пропадёт, проведение прервётся. Прерванная транзакция откатится, данные не испортятся, но работу придётся повторить.
Если база висит на уровне СУБД
Иногда сеанс в кластере уже удалён, а запросы ждут друг друга внутри СУБД. Это не «файл блокировки», а блокировки данных. В Microsoft SQL Server блокирующие соединения видны процедурой sp_who2 (колонка BlkBy). Завершать соединения на стороне СУБД вручную стоит только администратору базы данных и только после того, как стало ясно, чей это процесс.
Чем различаются способы снятия блокировки
| Способ | Когда применять | Что потеряется |
|---|---|---|
| Штатный выход пользователей | Всегда первым | Ничего |
Завершение работы пользователей из программы | Нужно освободить базу для обновления | Несохранённые данные у тех, кто не успел выйти |
Закрытие файла через Открытые файлы / net file | Клиент отвалился по сети, файловая база | Работа этого клиента |
taskkill зависшего процесса | Процесс висит на терминальном сервере | Работа этого сеанса |
Удаление сеанса в консоли или rac | Клиент-серверная база | Работа удалённого сеанса |
Удаление 1Cv8.1CL | Файл остался после сбоя, процессов нет | Ничего, если проверка сделана |
Автоматическое снятие блокировок перед регламентными работами
Ночные копии, обновления и выгрузки часто падают из-за того, что кто-то забыл закрыть 1С. Эту задачу можно автоматизировать.
Для файловой базы подойдёт пакетный файл, который запускается планировщиком Windows перед копированием. Он пытается удалить 1Cv8.1CL и по результату понимает, свободна ли база. Удалить занятый файл Windows не даст, поэтому сценарий сам по себе безопасен:
@echo off
chcp 65001 >nul
set "BASE=D:\Bases\Buh"
if not exist "%BASE%\1Cv8.1CL" (
echo База свободна
exit /b 0
)
del /q "%BASE%\1Cv8.1CL" 2>nul
if exist "%BASE%\1Cv8.1CL" (
echo База занята: в ней есть активный процесс
exit /b 1
) else (
echo Файл блокировки удален, база свободна
exit /b 0
)
Код возврата 1 можно использовать в следующем шаге сценария: не запускать копирование, а отправить уведомление.
Для клиент-серверной базы автоматизация строится на rac: включить запрет начала сеансов, завершить оставшиеся сеансы, выполнить работы, снять запрет. Запрет включается командой rac infobase update с параметром --sessions-deny=on и кодом разрешения; точный набор параметров проверьте в rac help infobase для своей версии платформы.
Встроенный механизм. В типовых конфигурациях на БСП есть обработка блокировки работы пользователей: в БП 3.0 её ищите в разделе Администрирование → Обслуживание. Она запрещает новые входы, показывает пользователям предупреждение и через заданное время завершает их сеансы. Это мягче любого ручного способа.
Ошибки, из-за которых снятие блокировки заканчивается восстановлением базы
- 🗑️ Удаление
1Cv8.1CDвместо1Cv8.1CL. Имена отличаются одной буквой. Удалив файл данных, вы теряете базу целиком. Проверяйте расширение до нажатия Delete. - 🔨 Принудительное удаление занятого файла. Утилиты, которые «разблокируют» файл, закрывают дескриптор у работающего процесса. Тот продолжает запись в никуда — отсюда битые страницы в
1Cv8.1CD. - 🌐 Забытая веб-публикация. Если файловая база опубликована через IIS или Apache, её держит процесс веб-сервера, даже когда в браузере никто не работает . Для освобождения базы перезапустите пул приложений IIS или службу Apache.
- 🧾 Удаление
1Cv8tmp.1CDво время реструктуризации. Если обновление конфигурации «зависло» на этапе обработки данных, оно может просто долго работать на большой базе. Прерывание этого этапа — прямой путь к тестированию и исправлению. - 🧹 Чистка
srvinfoна работающем сервере. Кэш сеансов в каталоге кластера чистят только при остановленной службе агента сервера и только когда понятно, зачем. Для снятия блокировки одного пользователя это не нужно.
Как сделать, чтобы блокировки не зависали снова
Зависшая блокировка — почти всегда следствие внешнего сбоя. Сократить их число можно настройками рабочего места и сервера.
Пара пояснений к списку:
- Антивирус. При проверке «на лету» он открывает
1Cv8.1CDи может держать файл, пока сканирует. Исключение для папки базы снимает и блокировки, и тормоза. - Терминальный сервер . Если пользователь закрыл окно RDP крестиком, его сеанс остаётся в состоянии «Отключён», а вместе с ним и запущенная 1С. Лимит для отключённых сеансов задаётся групповой политикой в разделе служб удалённых рабочих столов, ограничений сеансов по времени.
- Облачная синхронизация. Яндекс Диск, OneDrive и похожие клиенты копируют файл базы, пока с ним работают. Это не только блокировки, но и риск получить конфликтную копию вместо рабочей.
- Объём работы. Файловый вариант рассчитан на небольшие коллективы. Когда пользователей становится больше, зависания и блокировки появляются чаще, и правильнее переходить на сервер, а не чистить файлы каждую неделю.