Журнал регистрации 1С повреждён или пуст: как вернуть события и починить файлы
Содержание
Журнал регистрации 1С восстанавливают на уровне файлов, а не через Конфигуратор: это папка 1Cv8Log рядом с файловой базой или в каталоге кластера на сервере. Повреждённый файл журнала откладывают в сторону, платформа создаёт новый, а старые события достают из резервной копии этой папки или чинят SQLite-файл 1Cv8.lgd утилитой sqlite3. Выгрузка .dt и бэкап SQL журнал не содержат, поэтому вернуть из них историю событий нельзя.
Способ зависит от цели. Нужно, чтобы база снова писала журнал и не падала с ошибкой, — хватит «чистого старта». Нужно вернуть историю для расследования (кто удалил документ, кто менял права) — придётся проверять целостность, чинить файл или поднимать копию каталога.
Всё ниже относится к платформе 8.3 и не зависит от конфигурации: журнал одинаково устроен в Бухгалтерии, ЗУП, УТ и любой другой базе.
Где хранится журнал регистрации и почему он ломается
Журнал — это не таблица в базе данных, а отдельные файлы. Отсюда все особенности восстановления.
Расположение файлов
| Вариант базы | Где искать журнал |
|---|---|
| Файловая | Подкаталог 1Cv8Log в каталоге базы, рядом с файлом 1Cv8.1CD |
| Клиент-серверная | <каталог srvinfo>\reg_1541\<GUID базы>\1Cv8Log на сервере 1С |
Каталог srvinfo по умолчанию находится в папке установки платформы или в профиле пользователя, от имени которого работает служба сервера. Точный путь видно в параметрах запуска службы агента сервера (ключ -d).
GUID базы удобно узнать в консоли администрирования кластера: в свойствах информационной базы. Другой способ — открыть каталог reg_1541: там лежит по папке на каждую базу кластера, и нужная обычно самая «тяжёлая» по журналу.
Два формата журнала
- 📄 Старый, последовательный. Файл-словарь
1Cv8.lgf(пользователи, компьютеры, объекты метаданных) и файлы событий*.lgp, по одному на период. Имя.lgpсодержит дату начала периода, например20260901000000.lgp. - 🗄 SQLite. Один файл
1Cv8.lgd— обычная база SQLite со всеми событиями внутри. Формат появился в платформе 8.3.5.
Какой формат у вашей базы, видно по содержимому 1Cv8Log. Есть 1Cv8.lgd — SQLite. Есть 1Cv8.lgf и пачка .lgp — старый формат.
Что обычно портит журнал
- 💥 Аварийное выключение сервера или компьютера с файловой базой во время записи.
- 💾 Закончилось место на диске: файл журнала дописан наполовину.
- 🛡 Антивирус проверяет или блокирует файлы журнала во время записи.
- 📈 Журнал разросся до десятков гигабайт: открытие идёт часами, отбор зависает.
- 📂 Файловая база лежит на сетевой папке с нестабильным соединением.
- 🧹 Кто-то вручную удалил или скопировал часть файлов при работающей базе.
Диагностика: что именно случилось с журналом
Сначала поймите, с чем имеете дело. От этого зависит, какой из способов ниже нужен.
Уровень регистрации проверяют в Конфигураторе: Администрирование → Настройка журнала регистрации. Если там стоит «Не регистрировать», журнал пуст не из-за сбоя: события просто не пишутся.
Размер журнала смотрите в проводнике по папке 1Cv8Log. Файл 1Cv8.lgd на 20–50 ГБ — это уже не поломка, а запущенное обслуживание.
Проверка целостности журнала и базы: что за что отвечает
Частая ошибка — запускать на повреждённый журнал инструменты, которые его не касаются.
| Инструмент | Что проверяет | Поможет журналу? |
|---|---|---|
| Тестирование и исправление (Конфигуратор) | Данные и структуру информационной базы | Нет, файлы журнала не проверяет |
chdbfl.exe | Физическую целостность файла 1Cv8.1CD файловой базы | Нет |
sqlite3 с PRAGMA integrity_check | Целостность файла 1Cv8.lgd | Да |
Просмотр .lgp в текстовом редакторе | Читаемость отдельного файла старого формата | Частично: видно обрезанные файлы |
Если вместе с журналом пострадала и сама база (например, после того же аварийного отключения), тестирование нужно, но это отдельная задача. Оно требует монопольного доступа, поэтому запускайте его, когда все пользователи вышли.
Проверка файла SQLite
Работайте только с копией файла. Скопируйте 1Cv8.lgd в отдельную папку, например D:\lgcheck\, и скачайте консольную утилиту sqlite3 с официального сайта SQLite.
cd /d D:\lgcheck
sqlite3.exe 1Cv8.lgd "PRAGMA integrity_check;"
Ответ ok означает, что файл целый, и проблема в другом: размер, права, антивирус. Любой другой ответ — список повреждённых страниц. Значит, файл надо пересобирать.
Для быстрой проверки большого файла есть PRAGMA quick_check;. Она идёт быстрее, но ловит не все виды повреждений.
Способ 1. Чистый старт: сбросить повреждённый журнал
Это самый быстрый путь, когда база падает или тормозит из-за журнала, а история нужна не срочно. Повреждённые файлы не удаляют, а переносят: позже их можно попытаться починить.
В клиент-серверном варианте для замены файлов останавливают службу агента сервера 1С. Все сеансы пользователей на этом сервере оборвутся, несохранённые документы пропадут. Делайте это вне рабочего времени и предупредите людей заранее.
Файловая база
- Попросите всех выйти из базы и убедитесь, что процессов
1cv8.exeи1cv8c.exeс этой базой не осталось. - Переименуйте папку
1Cv8Log, например в1Cv8Log_broken_0910. - Запустите базу. Платформа создаст новую пустую папку
1Cv8Logи начнёт писать события заново. - Проверьте, что журнал открывается и в нём появились события вашего входа.
Клиент-серверная база
- Найдите папку базы по GUID в каталоге
reg_1541. - Остановите службу агента сервера 1С в оснастке «Службы» Windows или командой
systemctlна Linux. - Переименуйте
1Cv8Logв этой папке. - Запустите службу и войдите в базу.
Если вы хотите сменить формат с SQLite на старый (а это частый совет при постоянных сбоях больших .lgd), после переименования создайте новую папку 1Cv8Log и положите в неё пустой файл 1Cv8.lgf. Платформа увидит файл старого формата и продолжит писать в нём.
Способ 2. Ремонт файла 1Cv8.lgd через SQLite
Нужен, когда историю обязательно вернуть, а свежей копии нет. Работайте с копией, оригинал не трогайте до конца.
Пересборка через .recover
Команда .recover есть в sqlite3 начиная с версии 3.29. Она вытаскивает всё, что можно прочитать, в том числе из повреждённых страниц.
cd /d D:\lgcheck
sqlite3.exe 1Cv8.lgd ".recover" > dump.sql
sqlite3.exe 1Cv8_new.lgd < dump.sql
sqlite3.exe 1Cv8_new.lgd "PRAGMA integrity_check;"
Если последняя команда ответила ok, у вас целый файл. Записи с разрушенных страниц будут потеряны, остальное сохранится.
Пересборка через .dump
На старых версиях sqlite3 или если .recover падает, попробуйте классический дамп:
sqlite3.exe 1Cv8.lgd ".dump" > dump.sql
sqlite3.exe 1Cv8_new.lgd < dump.sql
.dump останавливается на первой нечитаемой странице, поэтому восстановленных событий обычно меньше.
Как подложить исправленный файл
- Остановите базу (файловая) или службу сервера (клиент-сервер) — с тем же предупреждением о сеансах.
- Перенесите текущий
1Cv8.lgdв сторону. - Переименуйте
1Cv8_new.lgdв1Cv8.lgdи положите в папку1Cv8Log. - Запустите базу и откройте журнал с отбором за нужный период.
Не обязательно возвращать восстановленный файл в рабочую базу. Создайте пустую файловую базу, положите исправленный 1Cv8.lgd в её папку 1Cv8Log и смотрите историю там. Рабочая база тем временем пишет свой новый журнал, и никто не простаивает.
Не правьте таблицы .lgd SQL-запросами вручную: удаление «лишних» строк легко ломает ссылки на словари пользователей и метаданных. Чистить старые события надо штатным сокращением журнала (о нём ниже).
Способ 3. Старый формат: заменить повреждённые .lgp и словарь .lgf
В последовательном формате повреждение почти всегда локальное. Ломается один .lgp за период, когда случился сбой, а остальные целые.
- Скопируйте всю папку
1Cv8Logв отдельное место. - Отсортируйте
.lgpпо имени: имя — дата начала периода. Найдите файл, на котором открытие журнала падает. Подсказка — ошибка при отборе за конкретные даты. - Откройте подозрительный файл в текстовом редакторе, который справляется с большими файлами. Обрыв посреди записи или мусор в конце — признак повреждения.
- Перенесите этот файл из папки
1Cv8Logв сторону. Журнал откроется, события за остальные периоды будут на месте. - Если повреждённый файл всё-таки нужен, сделайте его копию и удалите в ней хвост после последней целой записи. Это ручная работа, и результат проверяйте в пустой файловой базе, а не в рабочей.
Со словарём 1Cv8.lgf так не получится. В нём коды пользователей, компьютеров и объектов, на которые ссылаются все .lgp. Если словарь заменить чужим или более старым, события откроются, но с неверными именами. Поэтому 1Cv8.lgf берите только из той же копии, что и .lgp.
Восстановление журнала регистрации из резервной копии
Это единственный надёжный способ вернуть историю целиком. Но сначала главное ограничение.
Выгрузка информационной базы в .dt не содержит журнал регистрации. Бэкап базы на стороне MS SQL или PostgreSQL его тоже не содержит: журнал хранится в файлах на сервере 1С, а не в СУБД.
Что из этого следует на практике:
- 🔹 После
Загрузить информационную базуиз.dtжурнал целевой базы остаётся своим. Старых событий исходной базы в нём не будет. - 🔹 Восстановили SQL-бэкап в новую базу кластера — у неё новый GUID и новый пустой журнал.
- 🔹 История есть только там, где лежит папка
1Cv8Log: в исходной папке базы, в копии диска, в архиве каталогаsrvinfo.
Порядок восстановления из файловой копии
- Найдите в резервной копии папку
1Cv8Logнужной базы. Для сервера — по GUID вreg_1541. - Решите, куда восстанавливать. В рабочую базу — только если текущие события после копии не нужны. Иначе — в отдельную пустую файловую базу , только для просмотра.
- Для рабочей базы: остановите базу или службу сервера, переименуйте текущую
1Cv8Log, скопируйте папку из копии, запустите. - Для просмотра: создайте пустую файловую базу, замените её
1Cv8Logпапкой из копии и откройтеАдминистрирование → Журнал регистрациив Конфигураторе или режиме Предприятия.
Если базу перенесли на другой сервер
При переносе клиент-серверной базы через .dt историю тоже можно сохранить. Скопируйте папку 1Cv8Log со старого сервера в папку новой базы на новом сервере (по её GUID), пока служба остановлена. Формат файлов от сервера не зависит.
Профилактика: чтобы журнал регистрации больше не пришлось восстанавливать
Большинство повреждений случается с журналом, за которым никто не следит. Набор мер короткий.
Сокращение и разделение журнала
Оба действия делаются в Конфигураторе: Администрирование → Настройка журнала регистрации.
- ✂️ Сокращение. Кнопка удаляет события до выбранной даты. Поставьте флажок сохранения удаляемых событий в файл: тогда старая история уйдёт в архив, а не в никуда. Операция на большом журнале идёт долго, запускайте её вечером.
- 📅 Разделение по периодам. Новые события пишутся в отдельные файлы по дням, неделям или месяцам. Сбой портит один период, а не весь журнал. Старые периоды проще архивировать и удалять.
Какой уровень регистрации выбрать
| Уровень | Что пишется | Когда подходит |
|---|---|---|
| Ошибки | Только ошибки | Небольшие базы, где журнал смотрят редко |
| Предупреждения | Ошибки и предупреждения | Компромисс для средних баз |
| Информация | Плюс входы, выходы, изменения данных | Когда нужно знать, кто и что менял |
| Примечания | Всё, включая служебные события | Временно, на период расследования |
Для бухгалтерских баз обычно нужен уровень «Информация»: без него в журнале не видно, кто удалил или перепровёл документ. Тогда обязательно разделяйте журнал по периодам — он растёт быстро.
Резервная копия папки журнала
Ежедневная выгрузка .dt журнал не сохраняет, поэтому копируйте папку отдельно. Для сервера — весь каталог srvinfo: там же лежат настройки кластера и список баз. Копировать файлы на ходу можно, но последний открытый файл может оказаться неполным. Чистую копию даёт короткая остановка службы ночью или снимок тома средствами ОС.