Как удалить информационную базу 1С из кластера на Linux с помощью rac?

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

При администрировании серверов 1С на базе Linux часто возникает необходимость удалить информационную базу из кластера через командную строку. Для этого используется стандартная утилита rac. Однако на практике системные администраторы нередко сталкиваются с ошибками вида "Недостаточно прав пользователя на информационную базу", проблемами с разбором параметров или странной ошибкой "Already open" на порту 1545. Рассмотрим эти ситуации подробно и разберем по шагам правильный алгоритм удаления базы.

Анализ проблемы и ошибок синтаксиса

Проанализируем типичную ситуацию. Изначально администратор вводит базовую команду для удаления:


/opt/1C/v8.3/x86_64/rac infobase --cluster="" drop --infobase=""

И получает ответ: Недостаточно прав пользователя на информационную базу. Причина проста — у информационной базы (в конфигураторе) задан свой администратор, и кластер требует его логин и пароль для подтверждения операции.

Далее начинаются попытки передать параметры пользователя и пароля: --infobase-user и --infobase-pwd. И здесь утилита rac может выдать ошибку "Ошибка разбора параметра" или "Ошибка соединения с сервером infobase-user=:1545 Already open". Выясним причину такого поведения.

Порядок параметров в утилите rac

В утилите rac строгий синтаксис. Порядок следования аргументов имеет критическое значение. Утилита разделяет параметры на две группы: параметры кластера и параметры конкретной команды (в нашем случае — команды drop).

Параметры самого кластера (включая логин и пароль администратора кластера, если они установлены) должны идти до команды drop. А вот параметры удаляемой информационной базы — строго после нее. Если поставить параметр --infobase-user до команды drop, утилита посчитает, что он относится к контексту управления кластером, и выдаст ошибку.

Рассмотрим правильный шаблон команды:


/opt/1C/v8.3/x86_64/rac infobase \
  --cluster= \
  --cluster-user=<Логин_админа_кластера> \
  --cluster-pwd=<Пароль_админа_кластера> \
  drop \
  --infobase= \
  --infobase-user="<Логин_админа_базы>" \
  --infobase-pwd="<Пароль_админа_базы>"

Почему возникает ошибка "Already open" на порту 1545?

Разберем специфическую ошибку, с которой сталкиваются пользователи Linux:

"Ошибка соединения с сервером infobase-user=:1545 Already open".

Она возникает из-за банальной синтаксической опечатки. Пользователь пропускает двойные дефисы перед параметром и пишет infobase-user=... вместо --infobase-user=....

Из-за отсутствия дефисов утилита rac воспринимает этот текст не как ключ-параметр, а как позиционный аргумент — адрес сервера администрирования ras (который по умолчанию работает на порту 1545). Программа пытается открыть сетевое соединение по несуществующему адресу infobase-user=, что и приводит к сбою. Всегда проверяйте наличие двойных дефисов -- перед ключами!

Специфика Bash: работа с кавычками и паролями

При работе в терминале Linux необходимо учитывать особенности командной оболочки (Bash). Рассмотрим важные правила:

  1. Пустые пароли: Если у администратора базы данных пустой пароль, его нужно передавать в явном виде с помощью кавычек: --infobase-pwd="" или --infobase-pwd=''.
  2. Спецсимволы в пароле: Если пароль содержит символы вроде $, !, & или \, их обязательно нужно заключать в строгие одинарные кавычки (например, --infobase-pwd='MyP@ssw0rd!'). В двойных кавычках Bash попытается интерпретировать символ $ как начало переменной окружения, и до утилиты 1С дойдет искаженный (обрезанный) пароль.

Физическое удаление данных и очистка СУБД

Важно понимать, что обычная команда drop удаляет информационную базу только из реестра кластера 1С. Сама база данных на сервере СУБД (например, в PostgreSQL или MS SQL) при этом остается целой и продолжает занимать место на диске.

Если вы хотите полностью уничтожить базу вместе с ее таблицами в СУБД, добавьте в конец команды флаг --clear-database:


rac infobase --cluster= drop --infobase= --infobase-user="admin" --infobase-pwd="123" --clear-database

Если вы забыли указать этот флаг, базу потребуется удалять вручную средствами самой СУБД (например, выполнив SQL-команду DROP DATABASE имя_базы; под суперпользователем СУБД).

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

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

  1. Установите блокировку сеансов и регламентных заданий:
    
    rac infobase update --cluster= --infobase= --sessions-deny=on --scheduled-jobs-deny=on
    
  2. Принудительно разорвите существующие соединения с помощью команды rac connection disconnect.
  3. Только после этого запускайте команду drop.

Проблемы со службой RAS

Все команды администрирования работают только при запущенной службе ras (Remote Administration Server). Если при выполнении команд (например, rac cluster list) вы видите ошибку "Не найдено ни одного сервера с размещенным сервисом serviceName=ClusterConfigService", это говорит о том, что служба ras зависла или завершилась аварийно.

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

← На главную