В процессе администрирования баз данных «1С:Предприятие» системные администраторы и разработчики часто сталкиваются со сбоями в работе регламентных заданий. Одной из наиболее распространенных и неприятных проблем является сбой регламентного задания «Обновление индекса ППД» (полнотекстового поиска данных). Ошибка сопровождается аварийным завершением процедуры с системным сообщением об отсутствии файла separatorMain.dat в каталоге полнотекстового поиска.
В этой статье мы подробно проанализируем, почему возникает данная неполадка, как функционируют механизмы полнотекстового поиска платформы 1С на физическом уровне, и разберем пошаговый алгоритм решения этой проблемы раз и навсегда.
Для начала выясним причину и заглянем под капот платформы. Служба полнотекстового поиска 1С хранит свои данные в специальной директории 1Cv8FTxt, которая располагается в рабочем каталоге конкретной информационной базы на сервере приложений (внутри папки reg_1541). Индекс ППД состоит из двух ключевых частей: основного (глобального) индекса и дополнительного (частичного), в который записываются последние изменения объектов.
Файл separatorMain.dat является важнейшим служебным компонентом основного индекса. Он отвечает за правильную сегментацию текста, разделение сложных составных слов и подготовку поисковых токенов. Во время выполнения регламентного задания система обращается к методу ПолнотекстовыйПоиск.ОбновитьИндекс(). Этот метод запускает процедуру слияния накопленного дополнительного индекса с основным.
Если в процессе предыдущих сессий основной индекс был поврежден, некорректно записан или заблокирован сторонним процессом, структура файлов нарушается. Платформа пытается обратиться к файлу separatorMain.dat для проведения слияния, не находит его физически на диске и аварийно завершает работу с ошибкой:
Не удалось выполнить процедуру "Обновление индекса ППД":
{ОбщийМодуль.ПолнотекстовыйПоискСервер.Модуль(590)}: Ошибка при вызове метода контекста (ОбновитьИндекс)
ПолнотекстовыйПоиск.ОбновитьИндекс(РазрешитьСлияние, Порциями);
по причине:
Файл не обнаружен 'C:\Program Files\1cv8\srvinfo\reg_1541\...\1Cv8FTxt\separatorMain.dat'. 2(0x00000002): The system cannot find the file specified.
Простая очистка индекса через стандартное меню «1С:Предприятия» (раздел «Администрирование — Общие настройки — Поиск данных») в данном случае помогает лишь временно. Спустя несколько циклов регламентного слияния ошибка возвращается снова. Это происходит из-за более глубоких системных причин, которые мы рассмотрим далее.
Проанализируем ключевые факторы, которые приводят к повреждению файлов в каталоге 1Cv8FTxt:
rphost.exe во время слияния индексов активно перезаписывает файлы большого объема с расширениями .dat, .bin и .ind. Антивирусы часто расценивают такую дисковую активность как подозрительную и кратковременно блокируют или помещают эти файлы в карантин, нарушая целостность индекса.USR1CV8), под которым работает служба «Агент сервера 1С:Предприятия», нет полных прав «Запись» и «Модификация» на вложенные папки внутри каталога srvinfo, создание новых файлов слияния заблокируется операционной системой.snccntx могут кэшироваться устаревшие сведения о состоянии транзакций индексации, из-за чего регламентное задание пытается выполнить некорректные операции слияния несуществующих файлов.rphost.exe аварийно перезапускается, оставляя файлы индекса в «битом» (недозаписанном) состоянии.Рассмотрим подробнее комплексный метод исправления этой ошибки, который гарантированно устранит сбой работы регламентного задания.
Обычное удаление через интерфейс программы не затрагивает заблокированные процессы. Нам необходимо выполнить физическую очистку каталогов. Проанализируем этот процесс по шагам:
services.msc) или воспользуйтесь терминалом Linux и остановите службу сервера 1С (например, Агент сервера 1С:Предприятия 8.3). Это обязательное условие, так как запущенный процесс сервера намертво блокирует доступ к служебным файлам.C:\Program Files\1cv8\srvinfo\reg_1541\<GUID_Вашей_Базы>\ (где вместо GUID будет уникальный идентификатор базы).1Cv8FTxt и полностью удалите её вместе со всем содержимым. Не бойтесь удалять эту папку — при активации поиска платформа автоматически пересоздаст её структуру с нуля.snccntx (например, snccntx01e23456...), и удалите все файлы внутри неё.Temp этого пользователя и удалите временные данные.Для предотвращения повторного возникновения ошибок блокировки файлов настроим безопасность операционной системы:
srvinfo (или папки конкретного инстанса reg_1541).USR1CV8 или SYSTEM).Чтобы исключить влияние защитных систем на файлы индекса полнотекстового поиска, выполните следующие настройки в вашем антивирусном продукте на сервере:
C:\Program Files\1cv8\srvinfo\.rphost.exe, rmngr.exe и ragent.exe, а также маски типов файлов *.dat, *.bin, *.ind в пределах рабочих папок 1С.Теперь, когда все подготовительные работы выполнены, вернем систему в рабочее состояние:
Агент сервера 1С:Предприятия через консоль служб.Важное примечание: Первичное построение полнотекстового индекса на крупных информационных базах может занять продолжительное время (от нескольких десятков минут до нескольких часов). В этот период на сервере увеличится нагрузка на процессор и дисковую подсистему, поэтому процедуру обновления рекомендуется запускать в периоды минимальной активности пользователей.
Для того чтобы проблема с пропажей separatorMain.dat не повторилась в будущем, разберем несколько полезных профилактических мер:
Процедура ВыполнитьОбслуживаниеИндексаППД() Экспорт
Попытка
// Отключаем на время обслуживание, чтобы не мешать ручному обновлению
ПолнотекстовыйПоиск.УстановитьРежимПерезаписиИндекса(Истина);
// Запускаем полное обновление индекса ППД
ПолнотекстовыйПоиск.ОбновитьИндекс(Истина, Ложь);
ЗаписатьЛогСобытий("Полнотекстовый индекс успешно обновлен.");
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ЗаписатьЛогСобытий("Ошибка обновления индекса: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
КонецПопытки;
КонецПроцедуры
Использование предложенного нами комплексного подхода — от физического удаления поврежденных каталогов на остановленной службе до тонкой настройки прав безопасности и антивирусных исключений — позволит вам навсегда забыть об ошибках слияния индексов и восстановит стабильную работу поиска по всей базе данных.