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

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

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

Проанализируем две основные категории блокировок:

  1. Административная блокировка — устанавливается администратором вручную или программно для выполнения регламентных работ (обновление конфигурации, резервное копирование, тестирование). Часто для этих целей используется полноценный центр администрирования 1С, позволяющий управлять сеансами и блокировками из одной обработки. Пользователи в этот момент не могут войти в базу.
  2. Транзакционные блокировки — возникают в ходе штатной работы пользователей, когда несколько сеансов одновременно обращаются к одним и тем же данным. Длительные ожидания на таких блокировках (тайм-ауты) и взаимоблокировки (deadlocks) являются признаками проблем с производительностью.

Рассмотрим способы отслеживания для каждого типа.

Решение 1. Отслеживание административной блокировки

Это самый частый сценарий, когда требуется уведомление. Например, администратор заблокировал базу для обновления, и нужно сообщить об этом ключевым пользователям. Способы отлова зависят от варианта работы с базой.

Для клиент-серверных баз данных

В клиент-серверном варианте у нас есть несколько надежных способов отследить установку блокировки. Стоит отметить, что если ваши серверы работают на ОС Linux, то для управления процессом пригодится специальная обработка для установки и снятия блокировок у БД на сервере под Linux.

Способ 1: Анализ журнала регистрации

Это самый правильный и "внутренний" метод. При установке и снятии блокировки в консоли администрирования кластера серверов 1С в журнал регистрации записываются соответствующие события. Наша задача — настроить их автоматический отлов. Чтобы не писать систему уведомлений с нуля, можно применить готовый инструмент для рассылки e-mail уведомлений по записям журнала регистрации, который позволяет гибко настраивать отборы.

Разберем по шагам, как это реализовать самостоятельно:

  1. Создадим регламентное задание, которое будет выполняться с необходимой периодичностью (например, каждые 5 минут).
  2. В коде регламентного задания будем анализировать записи журнала регистрации за последний период. Нас интересует событие "Установка блокировки соединений с информационной базой".
  3. Для отбора событий из журнала можно использовать объект ВыборкаЖурналаРегистрации, установив фильтр по событию и периоду.

Посмотрим на пример кода для серверного модуля:


Процедура МониторингБлокировкиБазы() Экспорт

    // Определяем период для анализа (например, последние 5 минут)
    ДатаОкончания = ТекущаяДата();
    ДатаНачала = ДатаОкончания - 300; // 300 секунд = 5 минут

    // Настраиваем отбор
    Отбор = Новый Структура;
    Отбор.Вставить("Событие", "Установка блокировки соединений с информационной базой");
    
    // Получаем записи из журнала регистрации
    Выборка = ПолучитьЗаписиЖурналаРегистрации(Отбор, ДатаНачала, ДатаОкончания);
    
    // Проверяем, были ли события
    Если Выборка.Количество() > 0 Тогда
        // Если найдено событие блокировки, значит, базу заблокировали
        // Здесь размещаем код для отправки почтового сообщения
        ОтправитьУведомление("Информационная база была заблокирована для работы пользователей.");
    КонецЕсли;

КонецПроцедуры


Функция ПолучитьЗаписиЖурналаРегистрации(Отбор, ДатаНачала, ДатаОкончания)
    
    МассивСобытий = Новый Массив;
    МассивСобытий.Добавить(ПланыВидовХарактеристик.ИменаСобытийЖурналаРегистрации.НайтиПоНаименованию(Отбор.Событие));
    
    ОтборЖР = Новый Структура;
    ОтборЖР.Вставить("Событие", МассивСобытий);

    Возврат ВыгрузитьЖурналРегистрации(ОтборЖР, , ДатаНачала, ДатаОкончания);

КонецФункции

Важный момент: этот код необходимо разместить в общем модуле с установленными флагами "Сервер" и "Внешнее соединение" и вызывать его из регламентного задания.

Способ 2: Метод пробного соединения

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

  1. Создаем в базе специального технического пользователя с минимальными правами (достаточно прав на запуск тонкого или толстого клиента).
  2. Пишем внешний скрипт (например, на PowerShell, Python или даже в другой базе 1С), который будет по расписанию пытаться установить COM-соединение с целевой базой под этим пользователем.
  3. В скрипте анализируем результат попытки соединения. Если мы получаем ошибку с текстом, содержащим "установлена блокировка соединений с информационной базой", скрипт формирует и отправляет письмо.

Этот метод хорош тем, что он не зависит от работоспособности регламентных заданий в самой блокируемой базе.

Способ 3: Проверка блокировки для обновления конфигурации

Если вам нужно отловить только тот вид блокировки, который устанавливается для обновления конфигурации, можно воспользоваться готовой функцией из Библиотеки стандартных подсистем (БСП). Эта функция проверяет наличие и параметры блокировки, предназначенной именно для динамического или монопольного обновления.

Функция находится в общем модуле ОбновлениеИнформационнойБазыСлужебный:

ОбновлениеИнформационнойБазыСлужебный.ИнформационнаяБазаЗаблокированаДляОбновления()

Она возвращает Истина, если база заблокирована для обновления. Ее также можно вызывать в регламентном задании для мониторинга.

Для файловых баз данных

В файловом варианте механизм блокировки устроен проще. При установке блокировки в каталоге с информационной базой создается специальный служебный файл 1Cv8.cdn. Как только блокировка снимается, этот файл удаляется.

Это позволяет организовать мониторинг очень просто:

  1. Создаем внешний скрипт (например, на PowerShell или в командном файле .bat).
  2. Скрипт по расписанию проверяет наличие файла 1Cv8.cdn в папке с файловой базой.
  3. Если файл обнаружен, скрипт отправляет email-уведомление.

Это надежный и простой способ для файловых баз.

Решение 2. Отслеживание транзакционных блокировок

Если под "блокировкой" вы понимаете проблемы производительности — длительные ожидания или взаимные блокировки (deadlocks), — то для их отлова нужен более мощный инструмент, такой как замер производительности контура 1С и поиск узких мест.

Основной инструмент — Технологический журнал (ТЖ)

Технологический журнал 1С — это система сбора низкоуровневой информации о работе платформы. Он позволяет отловить практически любые проблемы, включая конфликты блокировок. Также в дополнение к ТЖ бывает крайне полезно провести анализ SQL сервера глазами 1С-ника, чтобы увидеть картину происходящего на уровне СУБД.

Шаг 1: Настройка технологического журнала

Настройка выполняется через конфигурационный файл logcfg.xml, который должен находиться в каталоге conf папки с бинарными файлами сервера 1С (например, C:\Program Files\1cv8\conf).

Для отлова блокировок нас интересуют следующие события:

Пример файла logcfg.xml для отслеживания этих событий:


<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
    <log location="C:\1C\Logs\TLogs" history="168">
        <event>
            <eq property="name" value="TLOCK"/>
        </event>
        <event>
            <eq property="name" value="TTIMEOUT"/>
        </event>
        <event>
            <eq property="name" value="TDEADLOCK"/>
        </event>
        <property name="all"/>
    </log>
</config>

Важно: После создания или изменения файла logcfg.xml необходимо перезапустить службу Агента сервера 1С:Предприятия.

Шаг 2: Анализ и реагирование

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

Для автоматического реагирования необходимо:

  1. Создать внешний сервис или скрипт, который будет в реальном времени или с небольшой задержкой "читать" новые записи в логах ТЖ.
  2. При обнаружении записи о событии TTIMEOUT или TDEADLOCK скрипт должен "распарсить" эту запись, извлекая из нее ключевую информацию.
  3. На основе полученных данных сформировать информативное письмо и отправить его администратору.

Этот метод требует более глубоких технических знаний, но является самым эффективным способом борьбы с проблемами производительности, связанными с блокировками.

Заключение

Как мы выяснили, задача "отловить блокировку базы" не имеет одного универсального решения. Первый и самый важный шаг — определить, о какой именно блокировке идет речь. Для административных блокировок отлично подходит анализ Журнала регистрации или внешние проверки. Если же баз в вашей ответственности много, стоит рассмотреть специализированную конфигурацию для администрирования большого количества баз. А для проблем с транзакционными блокировками незаменимым инструментом является Технологический журнал. Выбрав правильный метод, вы сможете настроить надежную систему уведомлений и оперативно реагировать на важные события в жизни вашей информационной базы.

← На главную