При работе с серверными информационными базами 1С:Предприятия мы часто сталкиваемся с необходимостью временной блокировки доступа к ним. Это может быть нужно для проведения регламентных операций, таких как резервное копирование, обновление конфигурации или выполнение административных задач. Однако иногда блокировка может остаться активной из-за сбоя или некорректного завершения процесса, оставляя базу недоступной для пользователей. В этой статье мы разберем, как эффективно управлять блокировками и, что особенно важно, как их автоматически снимать с серверной базы 1С, используя как встроенные механизмы, так и возможности СУБД.
Для начала, давайте рассмотрим, какие типы блокировок существуют в 1С:Предприятии и как мы можем управлять ими вручную. В системе 1С существуют два основных вида блокировок:
Для установки и снятия управляемой блокировки соединений с информационной базой в 1С:Предприятии предусмотрена штатная обработка. Вы можете найти ее, перейдя в меню "Сервис" - "Пользователи" - "Установка блокировки соединений с информационной базой". При установке блокировки мы можем указать:
Если блокировка установлена с кодом разрешения, мы, как администраторы, можем войти в базу, используя параметр запуска /UC. Например, команда запуска может выглядеть так:
ENTERPRISE /F"<Путь к базе>" /CРазрешитьРаботуПользователей /UC<код разрешения>
Здесь <Путь к базе> — это полный путь к файловой базе или строка подключения к серверной базе, а <код разрешения> — это тот код, который мы указали при установке блокировки.
Теперь давайте проанализируем ситуацию, когда блокировка базы произошла из-за нештатной ситуации (например, сбоя при автоматическом обновлении или резервном копировании), и вход в информационную базу остается заблокированным. В этом случае нам нужно снять блокировку.
Мы можем использовать несколько подходов:
Если при установке блокировки был задан код разрешения, мы можем попытаться снять ее, запустив 1С с соответствующими параметрами:
ENTERPRISE /CРазрешитьРаботуПользователей /UC<код разрешения>
Обратите внимание, что для серверной базы вам потребуется указать строку подключения к базе, а не путь к файлу.
Это основной и наиболее надежный способ снятия блокировки для серверных информационных баз. Мы выясним, как это сделать по шагам:
После выполнения этих действий блокировка будет снята, и пользователи смогут снова подключаться к базе.
На практике многие организации используют внешние инструменты, такие как "Effector Saver" (упоминаемый на форуме как "Г-эффектор"), для автоматизации процессов резервного копирования и управления доступом к базам 1С. Эти программы значительно упрощают жизнь системным администраторам, но и создают потребность в автоматическом снятии блокировок.
Такие инструменты обычно умеют:
Для корректной работы этих инструментов нам необходимо указать имя и пароль администратора кластера 1С, чтобы программа могла управлять сеансами и блокировками. Если такой инструмент по какой-то причине не снял блокировку, то нам придется использовать методы, описанные выше (например, через консоль кластера).
Когда речь идет о серверной базе 1С, работающей под управлением Microsoft SQL Server, мы можем рассмотреть дополнительные возможности для управления доступом и выполнения резервного копирования, которые предоставляет сама СУБД. Важно понимать, что SQL Server может выполнять бэкапы без необходимости блокировки базы данных 1С на уровне приложения. Это достигается благодаря механизмам работы СУБД, таким как уровни изоляции транзакций. Например, использование режима READ_COMMITTED_SNAPSHOT или ALLOW_SNAPSHOT_ISOLATION ON в SQL Server позволяет значительно повысить параллельность работы пользователей и снизить количество блокировок, так как пользователи читают версии данных из tempdb, а не блокируют основную таблицу.
SET SINGLE_USER и SET MULTI_USERВ контексте планов обслуживания SQL Server и задач, требующих эксклюзивного доступа к базе данных, мы можем использовать команды ALTER DATABASE ... SET SINGLE_USER и ALTER DATABASE ... SET MULTI_USER. Давайте разберем подробнее:
SET SINGLE_USER:
Эта команда переводит базу данных в однопользовательский режим. Это означает, что только одно подключение может быть активным к базе данных. Все остальные активные подключения к базе данных завершаются. Это полезно для выполнения операций обслуживания, которые требуют эксклюзивного доступа, например, восстановления базы данных, сжатия или проверки целостности.
Если есть активные соединения, мы можем использовать опцию WITH ROLLBACK IMMEDIATE, которая принудительно откатывает все незавершенные транзакции и разрывает соединения. Рассмотрим пример:
ALTER DATABASE [ИмяБазыДанных]
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
Здесь [ИмяБазыДанных] — это имя вашей базы данных 1С на SQL Server.
SET MULTI_USER:
Эта команда возвращает базу данных в многопользовательский режим, позволяя всем пользователям с соответствующими разрешениями снова подключаться к ней.
Пример использования:
ALTER DATABASE [ИмяБазыДанных]
SET MULTI_USER;
Для выявления и отключения активных сессий в SQL Server перед переключением в режим SINGLE_USER (или если нужно принудительно отключить "зависшие" сессии) мы можем использовать следующие команды:
Мы используем системную хранимую процедуру sp_who для получения списка всех активных сессий и их идентификаторов (SPID).
EXEC sp_who;
После того как мы выяснили SPID нужной сессии, мы можем принудительно отключить ее с помощью команды KILL.
KILL [SPID];
Например, если SPID равно 55, команда будет выглядеть так:
KILL 55;
Таким образом, для автоматического снятия блокировок и управления доступом к серверной базе 1С мы можем использовать как встроенные механизмы платформы 1С через консоль администрирования, так и мощные возможности SQL Server, включая его планы обслуживания и команды для изменения режима доступа к базе данных. Выбор конкретного метода будет зависеть от специфики вашей инфраструктуры и требований к автоматизации.
← К списку