При работе с клиент-серверными базами 1С (на базе MS SQL или PostgreSQL) администраторы часто сталкиваются с ситуацией, когда невозможно выполнить выгрузку информационной базы в файл .dt. Система выдает сообщение о том, что база занята фоновым заданием, хотя в списке активных пользователей в режиме «1С:Предприятие» никого нет. Рассмотрим подробно, почему это происходит и как решить проблему, используя стандартные и системные инструменты. Для автоматизации выгрузки можно использовать скрипт создания dt-файлов MS SQL и PostgreSQL без закрытия сессий.
Для создания файла выгрузки .dt платформе требуется монопольный доступ к информационной базе. Это означает, что в момент начала процесса в системе не должно быть ни одного активного сеанса (пользовательского, фонового или внешнего соединения). Основная сложность заключается в том, что регламентные задания (например, обновление полнотекстового поиска или извлечение текста) запускаются планировщиком платформы автоматически. Даже если вы принудительно завершили сеанс фонового задания, через несколько секунд менеджер кластера может запустить его снова, снова «захватив» базу.
Проанализируем самый надежный способ остановки активности на уровне платформы 1С. Простого удаления сеансов в консоли администрирования mmc недостаточно. Необходимо временно запретить сам запуск заданий.
После этого действия планировщик перестанет инициировать новые фоновые процессы. Теперь можно повторно зайти в ветку «Сеансы» и завершить оставшиеся там записи. Для быстрого контроля и остановки таких процессов подойдёт обработка для управления регламентными и фоновыми заданиями.
Часто начинающие администраторы смотрят только в раздел «Сеансы», забывая о разделе Соединения. Выясним разницу. Сеанс — это логическая связь пользователя с базой. Соединение — это физический канал связи между процессом rphost и СУБД. Иногда бывает так, что сеанс уже закрыт, а соединение «подвисло» и продолжает удерживать блокировку на стороне SQL-сервера.
Рассмотрим ситуацию, когда пароль в ветку «Соединения» не проходит. Это может свидетельствовать о некорректной работе процесса менеджера кластера. В таком случае нам помогут консольные утилиты или средства СУБД.
Если средства 1С не помогают, проанализируем состояние базы непосредственно на SQL-сервере. Для этого воспользуемся SQL Server Management Studio (SSMS). Посмотрим на активные процессы, используя стандартную процедуру:
EXEC sp_who2;
В колонке DBName найдем нашу базу. Если мы видим процессы (SPID), которые до сих пор активны, их необходимо принудительно завершить. Выполним команду:
KILL [номер_вашего_spid];
Важный момент: если вы используете PostgreSQL, аналогичное действие выполняется через запрос к таблице pg_stat_activity и функцию pg_terminate_backend(pid).
В версиях платформы 8.3.8 и смежных релизах часто наблюдались «фантомные» сеансы. Это ошибки платформы, при которых информация о задании застревает в оперативной памяти рабочего процесса rphost. Рассмотрим алгоритм «убийства» процесса, если у вас есть права администратора сервера:
rphost.exe.rphost через консоль 1С (в свойствах рабочего процесса указан его PID).rphost, но «зависшие» в памяти блокировки исчезнут.Чтобы зайти в базу для выгрузки, когда установлена блокировка сеансов, удобно использовать параметр Код разрешения. Разберем по шагам:
AdminBackup./UC AdminBackup.Этот метод гарантирует, что пока вы делаете выгрузку, никто другой (включая фоновые задания) не сможет прорваться в базу.
Выясним еще одну редкую причину. Если ваша конфигурация обращается к внешним базам данных через ВнешниеИсточникиДанных, фоновое задание может ожидать ответа от стороннего сервера. В этом состоянии процесс 1С находится в режиме ожидания ядра ОС и может не реагировать на команды завершения из консоли 1С. В этом случае поможет только разрыв сетевого соединения или перезапуск службы 1C:Enterprise 8.3 Server Agent.
Для успешной выгрузки .dt в условиях «зависших» заданий мы рекомендуем придерживаться следующего чек-листа:
sp_who2 на SQL.rac, если графическая консоль зависает.sncfg) при остановленной службе, если фантомные сеансы появляются регулярно.Помните, что использование .dt для резервного копирования больших баз на SQL является не самым оптимальным способом. Для регулярных бэкапов лучше использовать средства самой СУБД (создание .bak файлов), которые не требуют выгона пользователей и монопольного доступа.