Перезапуск информационной базы 1С без потери данных и лишних звонков от пользователей

· 9 мин

Содержание

Чтобы перезапустить базу 1С, сначала запретите новые входы, затем завершите активные сеансы (в консоли кластера или командой rac session terminate) и только после этого откройте базу заново. Если зависла не одна база, а весь сервер, перезапускают службу «Агент сервера 1С:Предприятия 8.3». Отключение соединений на уровне СУБД нужно редко: когда сервер 1С уже остановлен, а база в SQL всё ещё занята.

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

Что сейчас происходит в базе: кто подключён и что зависло

Без диагностики перезапуск часто ничего не решает. Например, через минуту фоновое задание снова съедает всю память, и всё зависает опять.

Клиент-серверная база . Откройте консоль администрирования серверов 1С:

  1. Разверните Центральные серверы 1С:Предприятия → <сервер> → Кластеры → <кластер> → Информационные базы → <база> → Сеансы.
  2. Посмотрите колонки «Пользователь», «Компьютер», «Приложение», «Начало работы».
  3. Отдельно откройте ветку Рабочие процессы: там видны память и загрузка по каждому rphost.

На что смотреть в первую очередь:

  • 🔒 сеансы с приложением «Конфигуратор» — кто-то может держать конфигурацию;
  • ⏳ «Фоновое задание», которое висит часами (обмен, закрытие месяца , пересчёт итогов);
  • 📈 рабочий процесс с памятью намного выше остальных;
  • 👻 «висящие» сеансы пользователей, которые давно ушли домой.

Тот же список есть в командной строке. Утилита rac работает через службу ras (по умолчанию порт 1545), поэтому ras должна быть запущена:

rac cluster list
rac infobase summary list --cluster=<uuid_кластера>
rac session list --cluster=<uuid_кластера> --infobase=<uuid_базы>

Файловая база. Кто подключён, видно изнутри типовой конфигурации: список «Активные пользователи» (в БП 3.0 он в разделе Администрирование → Обслуживание). Если базу открыть нельзя, зайдите на компьютер, где лежит папка базы. Там откройте Управление компьютером → Общие папки → Открытые файлы и найдите, с каких машин открыт 1Cv8.1CD.

Перед перезапуском: предупредить, запретить вход, сохранить копию

Перезапуск обрывает работу людей. Документ, который бухгалтер не успел записать, пропадёт. Незавершённая транзакция откатится, и обмен придётся запускать заново.

Перед перезапуском базы
Выполнено: 0 / 5

Блокировка через саму конфигурацию

В типовых конфигурациях на БСП (БП 3.0, ЗУП 3.1, УТ 11) есть обработка «Блокировка работы пользователей». В БП 3.0 её ищите в Администрирование → Обслуживание. В ней задают:

  • текст сообщения для пользователей;
  • время начала и окончания блокировки;
  • код разрешения — с ним администратор может войти, пока база заблокирована.

После установки блокировки программа сама предупреждает пользователей и через несколько минут завершает их сеансы. Чтобы войти в заблокированную базу, добавьте к строке запуска параметр /UC<код>:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /UC"0705"

Блокировка в консоли кластера

Откройте свойства информационной базы, отметьте «Блокировка начала сеансов включена» и заполните сообщение, период и код разрешения. Для этого нужен логин и пароль администратора самой базы. Там же есть флажок «Блокировка регламентных заданий включена» — отметьте его, чтобы фоновые задания не стартовали сразу после перезапуска.

Блокировка в консоли не завершает уже открытые сеансы. Она только не пускает новые. Тех, кто уже внутри, нужно отключить отдельно — это следующий шаг.

Завершение сеансов в консоли администрирования серверов

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

В графической консоли

  1. Откройте Информационные базы → <база> → Сеансы.
  2. Выделите сеансы (Ctrl+A — все сразу).
  3. В контекстном меню выберите «Удалить». Подтвердите.
  4. Подождите 10–30 секунд и обновите список (F5). Пустой список — значит, база свободна.

Пользователи увидят сообщение о разрыве соединения. Когда снимете блокировку, они смогут войти снова.

Через rac

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

rac session list --cluster=<uuid_кластера> --infobase=<uuid_базы>
rac session terminate --cluster=<uuid_кластера> --session=<uuid_сеанса>

Если на кластер назначен администратор, добавьте --cluster-user=<имя> --cluster-pwd=<пароль>. Блокировку можно включить той же утилитой:

rac infobase update --cluster=<uuid_кластера> --infobase=<uuid_базы> ^
  --infobase-user=Администратор --infobase-pwd=<пароль> ^
  --sessions-deny=on --scheduled-jobs-deny=on ^
  --denied-message="Плановый перезапуск, 15 минут" --permission-code=0705

После работ снимите блокировку той же командой: --sessions-deny=off --scheduled-jobs-deny=off. Полный список параметров вашей версии покажет rac help infobase.

Если сеанс не удаляется

Иногда сеанс исчезает и тут же появляется снова. Или он висит в списке с длинной транзакцией. Чаще всего это значит, что рабочий процесс занят долгим запросом к СУБД. Сначала дождитесь, пока транзакция откатится: на больших документах это может занять минуты. Если не помогает, переходите к рестарту службы.

Рестарт службы агента сервера 1С

Перезапуск службы обрывает сеансы во ВСЕХ базах кластера, а не только в зависшей. Делайте это вне рабочего времени или предупредите всех пользователей сервера.

Windows

Узнайте точное имя службы — оно зависит от разрядности и версии:

sc query state= all | findstr /i "1C:Enterprise"

Затем перезапустите её (командная строка от имени администратора):

net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
net start "1C:Enterprise 8.3 Server Agent (x86-64)"

Того же результата можно добиться через оснастку services.msc: служба «Агент сервера 1С:Предприятия 8.3», команда «Перезапустить». Если служба застряла в статусе «Остановка», проверьте в диспетчере задач, остались ли процессы ragent, rmngr, rphost. Завершайте их принудительно, только когда служба уже не отвечает.

Linux

С версии 8.3.21 сервер устанавливается юнитом systemd, в имени которого есть номер версии. Найдите его и перезапустите:

systemctl list-units --type=service | grep -i srv1cv8
sudo systemctl restart srv1cv8-8.3.<версия>@default

На более ранних версиях служба обычно называлась srv1cv83.

Перезапуск со сбросом серверного кэша

Если после обычного рестарта ошибки повторяются (странные сообщения о структуре, сеансы «из ниоткуда»), администраторы чистят сеансовые данные кластера:

  1. Остановите службу агента.
  2. Откройте каталог кластера: в Windows по умолчанию C:\Program Files\1cv8\srvinfo\reg_1541\.
  3. Удалите только папки snccntx… (их может быть несколько).
  4. Запустите службу.

Не трогайте файл 1CV8Clst.lst и остальные файлы в reg_1541. В нём хранится реестр кластера: список баз, рабочих серверов, администраторов. Без него кластер придётся настраивать заново.

Клиентский кэш — отдельная история. Если «глючит» у одного пользователя, перезапускать сервер не нужно. Достаточно запустить клиент с параметром /ClearCache.

Что проверить сразу после рестарта

Служба поднялась — это ещё не значит, что база работает. Пройдите короткую проверку, прежде чем снимать блокировку:

  1. Откройте консоль и убедитесь, что кластер виден, а в ветке Рабочие процессы есть хотя бы один rphost со статусом «Включён».
  2. Войдите в базу сами, с кодом разрешения. Откройте пару журналов документов и сформируйте любой отчёт.
  3. Проверьте журнал регистрации за последние 15 минут: нет ли там новых ошибок.
  4. Снимите блокировку регламентных заданий и посмотрите, что обмены стартуют без ошибок.
  5. Только после этого снимите блокировку начала сеансов и сообщите пользователям, что можно работать.

Если служба не стартует, откройте журнал событий Windows (eventvwr.msc, раздел «Приложение») и найдите записи с источником 1С. Частые причины — порт 1540 или 1541 уже кем-то занят либо у учётной записи службы нет прав на каталог srvinfo. Занятость порта видно командой netstat -ano | findstr :1541: в последней колонке будет PID процесса, который его держит.

Отключение соединений в MS SQL и PostgreSQL

Этот уровень нужен, когда сервер 1С остановлен, а СУБД не даёт выполнить операцию с базой. Например, восстановить её из бэкапа или переименовать. Пока работает rphost, соединения на уровне СУБД появятся снова. Рабочий процесс держит пул соединений, и один сеанс 1С не соответствует одному соединению SQL.

Microsoft SQL Server

Посмотреть, кто держит базу:

SELECT session_id, login_name, host_name, program_name, status
FROM sys.dm_exec_sessions
WHERE database_id = DB_ID('buh');

Отключить всех разом и вернуть обычный режим:

ALTER DATABASE [buh] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
-- здесь выполняете восстановление или обслуживание
ALTER DATABASE [buh] SET MULTI_USER;

Одно зависшее соединение завершается командой KILL <session_id>.

PostgreSQL

SELECT pid, usename, client_addr, state, query_start
FROM pg_stat_activity
WHERE datname = 'buh';

SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'buh' AND pid <> pg_backend_pid();

ROLLBACK IMMEDIATE и pg_terminate_backend откатывают незавершённые транзакции. Документ, который проводился в эту секунду, не запишется. Не запускайте это в рабочее время без предупреждения.

Перезапуск самой службы SQL Server или PostgreSQL затрагивает все базы на этом экземпляре. Это крайняя мера, к ней прибегают уже после остановки службы 1С.

Какой способ выбрать

СпособКогда применятьЧто затронетРиск
Блокировка + завершение сеансовОбновление, исправление, «висит» одна базаТолько эту базуМинимальный
rac session terminate по расписаниюНочные регламенты, массовое отключениеТолько эту базуМинимальный
Рестарт службы агентаТормозит весь сервер, rphost раздулсяВсе базы кластераСредний
Рестарт со сбросом snccntxОшибки повторяются после обычного рестартаВсе базы кластераСредний
Отключение в СУБДСервер 1С остановлен, а база в SQL занятаБаза в СУБДОткат транзакций
Что у вас случилось?

Автоматический перезапуск и профилактика зависаний

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

Настройки кластера

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

  • 🔁 «Интервал перезапуска» — через сколько секунд рабочий процесс заменяется новым. Пользователи переходят на новый процесс без разрыва. Ориентир — раз в сутки (86400).
  • 🧠 «Допустимый объём памяти» — при превышении процесс тоже уходит на плановую замену.
  • ⛔ «Принудительно завершать проблемные процессы» — кластер сам закрывает процессы, которые перестали отвечать.

Ночной скрипт для одной базы

Пример для планировщика заданий Windows. Он включает блокировку, завершает все сеансы базы и через час снимает блокировку (снятие — отдельной задачей):

@echo off
set RAC="C:\Program Files\1cv8\8.3.24.1548\bin\rac.exe"
set IB=<uuid_базы>

for /f "tokens=3" %%i in ('%RAC% cluster list ^| findstr /b /c:"cluster "') do set CL=%%i

%RAC% infobase update --cluster=%CL% --infobase=%IB% --infobase-user=Администратор --infobase-pwd=<пароль> --sessions-deny=on --scheduled-jobs-deny=on --permission-code=0705

for /f "tokens=3" %%s in ('%RAC% session list --cluster=%CL% --infobase=%IB% ^| findstr /b /c:"session "') do (
  %RAC% session terminate --cluster=%CL% --session=%%s
)

Путь к rac.exe замените на свою версию платформы. Если на кластере есть администратор, добавьте к каждой команде --cluster-user и --cluster-pwd. Скрипт берёт первый кластер из списка. Если кластеров несколько, впишите UUID нужного вручную, как для базы.

Что снижает число вынужденных перезапусков

  • 📋 Регламентные задания (обмены, загрузка курсов) разнесены по времени, а не стартуют все в 00:00.
  • 🧹 Регламентное обслуживание СУБД: обновление статистики и перестроение индексов по ночам.
  • 📊 Технологический журнал включён хотя бы на события EXCP — после сбоя видно, что его вызвало.
  • 💾 На сервере хватает свободного места на диске с srvinfo и временными файлами.

Частые вопросы

Потеряются ли данные при перезапуске базы 1С?
Записанные и проведённые документы останутся. Пропадёт только то, что пользователь не успел записать, а незавершённые транзакции откатятся.
Сколько длится перезапуск службы сервера 1С?
Обычно от 30 секунд до пары минут. Дольше бывает, если при остановке откатываются длинные транзакции.
Можно ли перезапустить одну базу, не трогая другие на сервере?
Да. Завершите сеансы только этой базы в консоли кластера или через rac. Служба агента и остальные базы продолжат работать.
Помогает ли перезагрузка всего сервера Windows?
Помогает, но это самый грубый вариант: останавливаются и 1С, и СУБД, и всё остальное на машине. Обычно хватает рестарта службы агента 1С.
Как перезапустить файловую базу?
Попросите всех закрыть 1С, проверьте по открытым файлам на сервере, что 1Cv8.1CD никем не занят, и откройте базу заново. Отдельной службы у файловой базы нет.