При работе с крупными информационными базами системные администраторы и программисты часто сталкиваются с тем, что журнал регистрации (ЖР) разрастается до огромных размеров (100, 200 ГБ и более). В таких случаях стандартная процедура сокращения журнала через Конфигуратор может завершиться критическим сбоем с текстом ошибки: sqlite3_step failed: callback requested query abort. Это происходит из-за того, что движок SQLite, на котором построен современный журнал регистрации (формат .lgd), не справляется с объемом операций в рамках установленных таймаутов или из-за нехватки ресурсов дисковой подсистемы.
В данной статье мы разберем, как выйти из этой ситуации, «обнулить» текущий журнал без потери архивных данных и как обеспечить возможность просмотра старых событий, даже если база работает на старых конфигурациях, таких как Управление торговлей 10.3.
Прежде чем переходить к активным действиям, проанализируем ситуацию. Ошибка callback requested query abort буквально означает, что внешнее приложение (в данном случае платформа 1С) принудительно прервало выполнение SQL-запроса к файлу журнала. Основные причины:
DELETE или VACUUM в SQLite системе требуется свободное место, сопоставимое с размером самого файла. Если ваш журнал занимает 200 ГБ, а на диске осталось менее 200 ГБ, операция гарантированно прервется.Если стандартное сокращение через интерфейс не работает, мы применим метод ручной ротации. Рассмотрим этот процесс по шагам:
1Cv8.lgd постоянно открыт процессом rphost. Попытка копирования «на горячую» может привести к повреждению структуры базы данных SQLite.C:\Program Files\1cv8\srvinfo\<ID_базы>\1Cv8Log\.1Cv8.lgd (это и есть наш журнал на 200 ГБ).2023_archive.lgd.После запуска платформа увидит, что в папке 1Cv8Log отсутствует файл журнала, и автоматически создаст новый, пустой файл 1Cv8.lgd. С этого момента база начнет летать, а запись событий будет происходить мгновенно.
Теперь разберем ситуацию: руководство просит узнать, кто изменил документ месяц назад, а эти данные остались в том самом старом файле на 200 ГБ. В современных конфигурациях (на управляемых формах) реализован удобный механизм просмотра внешних логов.
Проанализируем алгоритм действий:
2023_archive.lgd.Платформа подгрузит данные из файла без необходимости импорта их в основную базу. Стоит помнить, что открытие файла в 200 ГБ может занять длительное время, поэтому рекомендуется использовать фильтры по периоду или объекту сразу при возможности.
Если ваша конфигурация построена на обычных формах, стандартная кнопка «Посмотреть из файла» может отсутствовать. В этом случае мы воспользуемся специализированными инструментами.
Рассмотрим вариант использования внешней обработки. Фирма 1С предоставляет специальную обработку для работы с журналом регистрации, которую можно найти на диске ИТС или в составе методической поддержки. Данная обработка позволяет открывать произвольные файлы .lgd и работать с ними в привычном интерфейсе 1С.
Если же доступ к 1С ограничен, можно воспользоваться сторонними утилитами для работы с SQLite, такими как DB Browser for SQLite. Поскольку формат журнала — это стандартная реляционная база данных, мы можем выполнить прямой SQL-запрос к таблице событий:
SELECT
datetime(date/10000 - 62135596800, 'unixepoch') as EventDate,
userName,
presentation
FROM EventLog
WHERE presentation LIKE '%НомерДокумента%'
LIMIT 100;
Этот метод работает значительно быстрее встроенных средств 1С, так как позволяет использовать всю мощь индексов SQLite без накладных расходов платформы.
Чтобы в будущем не сталкиваться с проблемой 200-гигабайтных файлов, проанализируем настройки системы:
.lgd создается папка с множеством мелких файлов, разделенных по времени. Это позволяет удалять старые записи простым удалением файлов из папки, что исключает ошибки SQLite.Регистрация изменений, а Информацию (просмотр, открытие) можно отключить для некритичных справочников.sqlite3_step.При использовании команды Сократить в конфигураторе, не забывайте указывать путь к файлу, куда будут сохранены удаляемые записи. Это позволит вам всегда иметь доступ к истории, не перегружая основную систему.
Важное замечание: Если после удаления большого количества записей размер файла .lgd на диске не уменьшился — это нормальное поведение SQLite. Чтобы физически сжать файл, необходимо выполнить команду VACUUM. В 1С это происходит автоматически при завершении процедуры сокращения, если она прошла успешно. Если же вы работаете с файлом через сторонние утилиты, выполните команду вручную, но помните о необходимости двойного запаса свободного места на диске.