Перезапуск информационной базы 1С без потери данных и лишних звонков от пользователей
Содержание
Чтобы перезапустить базу 1С, сначала запретите новые входы, затем завершите активные сеансы (в консоли кластера или командой rac session terminate) и только после этого откройте базу заново. Если зависла не одна база, а весь сервер, перезапускают службу «Агент сервера 1С:Предприятия 8.3». Отключение соединений на уровне СУБД нужно редко: когда сервер 1С уже остановлен, а база в SQL всё ещё занята.
Порядок зависит от варианта работы. У файловой базы нет своей службы: перезапуск — это когда все вышли, а файл 1Cv8.1CD освободился. У клиент-серверной базы есть три уровня: сеансы, служба кластера и СУБД. Начинайте с самого мягкого из них и переходите к следующему, только если не помогло.
Что сейчас происходит в базе: кто подключён и что зависло
Без диагностики перезапуск часто ничего не решает. Например, через минуту фоновое задание снова съедает всю память, и всё зависает опять.
Клиент-серверная база . Откройте консоль администрирования серверов 1С:
- Разверните
Центральные серверы 1С:Предприятия → <сервер> → Кластеры → <кластер> → Информационные базы → <база> → Сеансы. - Посмотрите колонки «Пользователь», «Компьютер», «Приложение», «Начало работы».
- Отдельно откройте ветку
Рабочие процессы: там видны память и загрузка по каждому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.
Перед перезапуском: предупредить, запретить вход, сохранить копию
Перезапуск обрывает работу людей. Документ, который бухгалтер не успел записать, пропадёт. Незавершённая транзакция откатится, и обмен придётся запускать заново.
Блокировка через саму конфигурацию
В типовых конфигурациях на БСП (БП 3.0, ЗУП 3.1, УТ 11) есть обработка «Блокировка работы пользователей». В БП 3.0 её ищите в Администрирование → Обслуживание. В ней задают:
- текст сообщения для пользователей;
- время начала и окончания блокировки;
- код разрешения — с ним администратор может войти, пока база заблокирована.
После установки блокировки программа сама предупреждает пользователей и через несколько минут завершает их сеансы. Чтобы войти в заблокированную базу, добавьте к строке запуска параметр /UC<код>:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /UC"0705"
Блокировка в консоли кластера
Откройте свойства информационной базы, отметьте «Блокировка начала сеансов включена» и заполните сообщение, период и код разрешения. Для этого нужен логин и пароль администратора самой базы. Там же есть флажок «Блокировка регламентных заданий включена» — отметьте его, чтобы фоновые задания не стартовали сразу после перезапуска.
Блокировка в консоли не завершает уже открытые сеансы. Она только не пускает новые. Тех, кто уже внутри, нужно отключить отдельно — это следующий шаг.
Завершение сеансов в консоли администрирования серверов
Это самый мягкий способ перезапустить клиент -серверную базу . Он не затрагивает другие базы кластера.
В графической консоли
- Откройте
Информационные базы → <база> → Сеансы. - Выделите сеансы (Ctrl+A — все сразу).
- В контекстном меню выберите «Удалить». Подтвердите.
- Подождите 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.
Перезапуск со сбросом серверного кэша
Если после обычного рестарта ошибки повторяются (странные сообщения о структуре, сеансы «из ниоткуда»), администраторы чистят сеансовые данные кластера:
- Остановите службу агента.
- Откройте каталог кластера: в Windows по умолчанию
C:\Program Files\1cv8\srvinfo\reg_1541\. - Удалите только папки
snccntx…(их может быть несколько). - Запустите службу.
Не трогайте файл 1CV8Clst.lst и остальные файлы в reg_1541. В нём хранится реестр кластера: список баз, рабочих серверов, администраторов. Без него кластер придётся настраивать заново.
Клиентский кэш — отдельная история. Если «глючит» у одного пользователя, перезапускать сервер не нужно. Достаточно запустить клиент с параметром /ClearCache.
Что проверить сразу после рестарта
Служба поднялась — это ещё не значит, что база работает. Пройдите короткую проверку, прежде чем снимать блокировку:
- Откройте консоль и убедитесь, что кластер виден, а в ветке
Рабочие процессыесть хотя бы одинrphostсо статусом «Включён». - Войдите в базу сами, с кодом разрешения. Откройте пару журналов документов и сформируйте любой отчёт.
- Проверьте журнал регистрации за последние 15 минут: нет ли там новых ошибок.
- Снимите блокировку регламентных заданий и посмотрите, что обмены стартуют без ошибок.
- Только после этого снимите блокировку начала сеансов и сообщите пользователям, что можно работать.
Если служба не стартует, откройте журнал событий 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и временными файлами.