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

Программист 1С v8.3 (Управляемые формы)
← К списку

При работе с серверными информационными базами 1С:Предприятия мы часто сталкиваемся с необходимостью временной блокировки доступа к ним. Это может быть нужно для проведения регламентных операций, таких как резервное копирование, обновление конфигурации или выполнение административных задач. Однако иногда блокировка может остаться активной из-за сбоя или некорректного завершения процесса, оставляя базу недоступной для пользователей. В этой статье мы разберем, как эффективно управлять блокировками и, что особенно важно, как их автоматически снимать с серверной базы 1С, используя как встроенные механизмы, так и возможности СУБД.

Штатные механизмы управления блокировками в 1С:Предприятии

Для начала, давайте рассмотрим, какие типы блокировок существуют в 1С:Предприятии и как мы можем управлять ими вручную. В системе 1С существуют два основных вида блокировок:

  1. Автоматические блокировки: Эти блокировки устанавливаются самой системой для обеспечения целостности данных. Они предотвращают одновременное изменение одной и той же информации разными пользователями.
  2. Управляемые блокировки: Эти блокировки устанавливаются администратором для контроля доступа к базе данных, например, для запрета входа пользователей на определенное время.

Для установки и снятия управляемой блокировки соединений с информационной базой в 1С:Предприятии предусмотрена штатная обработка. Вы можете найти ее, перейдя в меню "Сервис" - "Пользователи" - "Установка блокировки соединений с информационной базой". При установке блокировки мы можем указать:

Если блокировка установлена с кодом разрешения, мы, как администраторы, можем войти в базу, используя параметр запуска /UC. Например, команда запуска может выглядеть так:


ENTERPRISE /F"<Путь к базе>" /CРазрешитьРаботуПользователей /UC<код разрешения>

Здесь <Путь к базе> — это полный путь к файловой базе или строка подключения к серверной базе, а <код разрешения> — это тот код, который мы указали при установке блокировки.

Снятие блокировки в нештатных ситуациях

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

Мы можем использовать несколько подходов:

  1. Через параметры запуска 1С (если код разрешения известен):

    Если при установке блокировки был задан код разрешения, мы можем попытаться снять ее, запустив 1С с соответствующими параметрами:

    
    ENTERPRISE /CРазрешитьРаботуПользователей /UC<код разрешения>
    

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

  2. Для серверной базы через консоль кластера серверов 1С:Предприятия:

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

    1. Запустите Консоль администрирования серверов 1С:Предприятия.
    2. В дереве консоли найдите нужный кластер и внутри него — информационную базу, которая находится в заблокированном состоянии.
    3. Откройте свойства информационной базы (обычно это можно сделать через контекстное меню или двойным кликом).
    4. В окне свойств информационной базы снимите галочку "Блокировка начала сеансов включена".
    5. Система попросит ввести логин и пароль администратора кластера 1С для подтверждения операции. Введите их.

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

Использование внешних инструментов для автоматизации блокировок и бэкапов

На практике многие организации используют внешние инструменты, такие как "Effector Saver" (упоминаемый на форуме как "Г-эффектор"), для автоматизации процессов резервного копирования и управления доступом к базам 1С. Эти программы значительно упрощают жизнь системным администраторам, но и создают потребность в автоматическом снятии блокировок.

Такие инструменты обычно умеют:

Для корректной работы этих инструментов нам необходимо указать имя и пароль администратора кластера 1С, чтобы программа могла управлять сеансами и блокировками. Если такой инструмент по какой-то причине не снял блокировку, то нам придется использовать методы, описанные выше (например, через консоль кластера).

Резервное копирование средствами SQL Server и управление доступом к базе данных

Когда речь идет о серверной базе 1С, работающей под управлением Microsoft SQL Server, мы можем рассмотреть дополнительные возможности для управления доступом и выполнения резервного копирования, которые предоставляет сама СУБД. Важно понимать, что SQL Server может выполнять бэкапы без необходимости блокировки базы данных 1С на уровне приложения. Это достигается благодаря механизмам работы СУБД, таким как уровни изоляции транзакций. Например, использование режима READ_COMMITTED_SNAPSHOT или ALLOW_SNAPSHOT_ISOLATION ON в SQL Server позволяет значительно повысить параллельность работы пользователей и снизить количество блокировок, так как пользователи читают версии данных из tempdb, а не блокируют основную таблицу.

Управление доступом к базе данных SQL Server через SET SINGLE_USER и SET MULTI_USER

В контексте планов обслуживания SQL Server и задач, требующих эксклюзивного доступа к базе данных, мы можем использовать команды ALTER DATABASE ... SET SINGLE_USER и ALTER DATABASE ... SET MULTI_USER. Давайте разберем подробнее:

  1. SET SINGLE_USER:

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

    Если есть активные соединения, мы можем использовать опцию WITH ROLLBACK IMMEDIATE, которая принудительно откатывает все незавершенные транзакции и разрывает соединения. Рассмотрим пример:

    
    ALTER DATABASE [ИмяБазыДанных]
    SET SINGLE_USER
    WITH ROLLBACK IMMEDIATE;
    

    Здесь [ИмяБазыДанных] — это имя вашей базы данных 1С на SQL Server.

  2. SET MULTI_USER:

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

    Пример использования:

    
    ALTER DATABASE [ИмяБазыДанных]
    SET MULTI_USER;
    

Для выявления и отключения активных сессий в SQL Server перед переключением в режим SINGLE_USER (или если нужно принудительно отключить "зависшие" сессии) мы можем использовать следующие команды:

  1. Просмотр активных сессий:

    Мы используем системную хранимую процедуру sp_who для получения списка всех активных сессий и их идентификаторов (SPID).

    
    EXEC sp_who;
    
  2. Отключение конкретной сессии:

    После того как мы выяснили SPID нужной сессии, мы можем принудительно отключить ее с помощью команды KILL.

    
    KILL [SPID];
    

    Например, если SPID равно 55, команда будет выглядеть так:

    
    KILL 55;
    

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

← К списку