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

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

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

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

Способ 1. Вход в заблокированную базу с помощью кода разрешения (ключ UC)

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

Рассмотрим по шагам, как запустить 1С с кодом разрешения:

  1. Откроем окно запуска 1С:Предприятие.
  2. Выберем нужную информационную базу в списке и нажмем кнопку Изменить.
  3. В открывшемся окне параметров нажмем кнопку Далее, чтобы перейти к странице дополнительных настроек.
  4. В поле Дополнительные параметры запуска введем специальный ключ в формате: /UCКодРазрешения (например, если код разрешения был установлен как 12345, то строка будет выглядеть так: /UC12345). Обратите внимание, что пробел между /UC и самим кодом ставить не нужно.
  5. Нажмем кнопку Готово и запустим базу в режиме «Предприятие» или «Конфигуратор».

После успешного входа в систему мы можем перейти в раздел администрирования (в зависимости от конфигурации это может быть «НСИ и администрирование» -> «Обслуживание» -> «Блокировка работы пользователей») и полностью снять флаг блокировки соединений.

Способ 2. Снятие блокировки через файл конфигурации кластера 1CV8Clst.lst

Что делать, если код разрешения утерян, забыт или вообще не был задан, а войти в консоль администрирования сервера все еще нельзя? В этом случае мы можем отредактировать конфигурационные файлы самого кластера серверов 1С. Вся информация о базах данных кластера хранится в текстовом файле 1CV8Clst.lst.

Проанализируем этот процесс подробно:

  1. Подключимся к серверу, на котором запущена служба кластера 1С (ragent).
  2. Остановим службу 1C:Enterprise Server Agent через оснастку «Службы» (services.msc). Внимание! Редактировать конфигурационные файлы при работающей службе категорически не рекомендуется, так как изменения могут быть перезаписаны или проигнорированы.
  3. Перейдем в каталог хранения данных кластера. По умолчанию в Windows этот файл расположен по пути:
    C:\Program Files\1cv8\srvinfo\reg_1541\1CV8Clst.lst (путь может отличаться в зависимости от версии платформы и настроек установки).
  4. Сделаем резервную копию файла 1CV8Clst.lst перед началом редактирования.
  5. Откроем оригинальный файл с помощью текстового редактора (например, Notepad++).
  6. Найдем в тексте упоминание нашей информационной базы по ее имени или идентификатору (GUID). Информация о базе представлена в виде сложной структуры вложенных массивов.
  7. Найдем параметры блокировки внутри блока нашей базы. Они выглядят как последовательность флагов, строк с текстом сообщения и кодом блокировки. Сам признак блокировки имеет булево значение (где 1 или SNC_DENY означает, что блокировка включена, а 0 — отключена).
  8. Мы можем либо найти записанный там в открытом виде код разрешения (чтобы использовать его по методу из Способа 1), либо вручную сбросить параметр блокировки, заменив его значение на отключенное.
  9. Сохраним файл, закроем редактор и запустим службу сервера 1С. Блокировка будет снята.

Способ 3. Использование утилиты командной строки RAC

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

Для работы утилиты должен быть запущен сервис администрирования ras. Выясним, как снять блокировку программно через командную строку:

Сначала мы подключаемся к кластеру и получаем список баз, чтобы узнать их идентификаторы:


rac connection register --host=localhost --port=1545
rac infobase --cluster=00000000-0000-0000-0000-000000000000 list

Найдя нужную базу, мы выполняем команду изменения ее параметров, отключая блокировку сеансов (параметр --sessions-deny=off):


rac infobase --cluster=00000000-0000-0000-0000-000000000000 update --infobase=11111111-1111-1111-1111-111111111111 --sessions-deny=off --user=Администратор --password=Пароль

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

Способ 4. Программное снятие блокировки через PowerShell

Для системных администраторов, предпочитающих автоматизацию, хорошим решением станет использование скриптов PowerShell, взаимодействующих с сервером 1С через COM-соединение. Мы можем программно подключиться к менеджеру кластера и сбросить свойства блокировки.

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


$connector = New-Object -ComObject "V83.COMConnector"
$agent = $connector.ConnectAgent("localhost")
$clusters = $agent.GetClusters()
$cluster = $clusters[0] # Выбираем первый кластер в списке

$agent.Authenticate($cluster, "", "")
$ibases = $agent.GetInfoBases($cluster)

foreach ($ib in $ibases) {
    if ($ib.Name -eq "Trade") {
        # Сбрасываем флаг блокировки соединений
        $ib.SessionsDenied = $false
        # Применяем изменения на сервере
        $agent.UpdateInfoBase($cluster, $ib)
        Write-Host "Блокировка базы успешно снята"
    }
}

Способ 5. Различие между блокировкой соединений 1С и блокировками в SQL (СУБД)

Очень важно различать понятия «Блокировка соединений 1С» (которую мы обсуждали выше) и «Блокировки на уровне СУБД» (транзакционные блокировки, Deadlocks или Lock Timeout).

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

Посмотрим, как решить проблему транзакционных блокировок через Microsoft SQL Server Management Studio (SSMS):

  1. Откроем SSMS и подключимся к нашему серверу баз данных SQL.
  2. Выполним встроенную системную процедуру для анализа текущих процессов:

EXEC sp_who2;

  1. Проанализируем колонку BlkBy (Blocked By). Если в ней указан идентификатор процесса (SPID), это означает, что данный процесс блокирует выполнение других транзакций.
  2. Для получения детальной информации о запросе, который вызывает зависание, выполним команду, подставив вместо SPID номер блокирующего процесса:

DBCC INPUTBUFFER(SPID);

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

KILL SPID;

Использование этого метода требует осторожности, однако оно позволяет оперативно восстановить работоспособность СУБД без перезагрузки всего SQL-сервера.

Резюме

Мы рассмотрели целый арсенал инструментов для работы с заблокированными базами 1С: от самого простого ключа запуска /UC до низкоуровневой правки конфигурационных файлов и работы с транзакциями SQL. Понимание этих механизмов поможет вам оперативно реагировать на любые аварийные ситуации и минимизировать время простоя бизнес-систем.

← На главную