В процессе администрирования систем на базе 1С:Предприятие часто возникает необходимость временно ограничить доступ пользователей к информационной базе. Это делается для проведения регламентных работ, обновления конфигурации или резервного копирования. Однако иногда администраторы сталкиваются с неприятной ситуацией: база заблокирована, доступ к консоли администрирования сервера 1С отсутствует (или консоль зависает), а войти в систему для снятия блокировки обычным способом невозможно.
В этой статье мы подробно разберем, как обойти или снять административную блокировку соединений в различных сценариях, используя как стандартные механизмы платформы, так и альтернативные низкоуровневые методы.
Если блокировка была установлена штатным образом, система при попытке входа выдает предупреждение, содержащее текст блокировки. Если при установке блокировки был указан код разрешения (специальный пароль для административного входа), мы можем использовать его для запуска сеанса вопреки установленному запрету.
Рассмотрим по шагам, как запустить 1С с кодом разрешения:
/UCКодРазрешения (например, если код разрешения был установлен как 12345, то строка будет выглядеть так: /UC12345). Обратите внимание, что пробел между /UC и самим кодом ставить не нужно.После успешного входа в систему мы можем перейти в раздел администрирования (в зависимости от конфигурации это может быть «НСИ и администрирование» -> «Обслуживание» -> «Блокировка работы пользователей») и полностью снять флаг блокировки соединений.
Что делать, если код разрешения утерян, забыт или вообще не был задан, а войти в консоль администрирования сервера все еще нельзя? В этом случае мы можем отредактировать конфигурационные файлы самого кластера серверов 1С. Вся информация о базах данных кластера хранится в текстовом файле 1CV8Clst.lst.
Проанализируем этот процесс подробно:
ragent).services.msc). Внимание! Редактировать конфигурационные файлы при работающей службе категорически не рекомендуется, так как изменения могут быть перезаписаны или проигнорированы.C:\Program Files\1cv8\srvinfo\reg_1541\1CV8Clst.lst (путь может отличаться в зависимости от версии платформы и настроек установки).1CV8Clst.lst перед началом редактирования.1 или SNC_DENY означает, что блокировка включена, а 0 — отключена).В современных версиях платформы 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=Пароль
Этот метод позволяет мгновенно восстановить доступ без перезапуска службы сервера и прерывания работы других информационных баз кластера.
Для системных администраторов, предпочитающих автоматизацию, хорошим решением станет использование скриптов 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 "Блокировка базы успешно снята"
}
}
Очень важно различать понятия «Блокировка соединений 1С» (которую мы обсуждали выше) и «Блокировки на уровне СУБД» (транзакционные блокировки, Deadlocks или Lock Timeout).
Если пользователи не могут работать, потому что база «зависает» при выполнении определенных операций, а система выдает ошибки превышения времени ожидания блокировки, то административные методы 1С здесь не помогут. В этом случае проблема кроется в незавершенных или тяжелых транзакциях на уровне SQL Server.
Посмотрим, как решить проблему транзакционных блокировок через Microsoft SQL Server Management Studio (SSMS):
EXEC sp_who2;
BlkBy (Blocked By). Если в ней указан идентификатор процесса (SPID), это означает, что данный процесс блокирует выполнение других транзакций.SPID номер блокирующего процесса:
DBCC INPUTBUFFER(SPID);
KILL SPID;
Использование этого метода требует осторожности, однако оно позволяет оперативно восстановить работоспособность СУБД без перезагрузки всего SQL-сервера.
Мы рассмотрели целый арсенал инструментов для работы с заблокированными базами 1С: от самого простого ключа запуска /UC до низкоуровневой правки конфигурационных файлов и работы с транзакциями SQL. Понимание этих механизмов поможет вам оперативно реагировать на любые аварийные ситуации и минимизировать время простоя бизнес-систем.