Ошибка формата файла журнала регистрации, database disk image is malformed

Настройка журнала

Чтобы увидеть доступные настройки, необходимо зайти в режиме 1С конфигуратор и в главном меню найти пункт «Администрирование — Настройка журнала регистрации…»:

Получите 267 видеоуроков по 1С бесплатно:

В открывшемся интерфейсе доступны следующие настройки ведения журнала:

Здесь в поле «Регистрировать в журнале события» можно указать детализацию регистрируемых данных. Пункт «Не регистрировать» позволяет отключить ведение журнала вовсе. Другие пункты расшифровываются следующим образом:

  1. Ошибки — все возможные варианты сбоев и ошибок в системе;
  2. Предупреждения — важные сообщения системы, которые не являются ошибками;
  3. Информация — вся информация об изменяемых данных системы;
  4. Примечания — неважные сообщения (почти всегда их можно отключить).

Другие настройки рассмотрим далее, они относятся к оптимизации работы журнала.

Существуют активные сеансы работы с данной базой, использующие версию платформы, не поддерживающую совместную работу с этой версией. Не совпадает версия временного файла

Крепко призадумался, что все это означает. Версия платформы везде абсолютно одинаковая. Специально прошелся по всем компьютерам и убедился, что везде установлена одна и та же версия платформы.

Начал искать информацию в интернете. Удивился ,что ошибка на самом деле не очень популярная, хотя привык к тому, что по ошибкам 1С всегда много информации находится, потому что продукт очень популярный. Но не в этот раз. В одном месте заметил упоминание установленного антивируса Kaspersky Endpoint Security 10

Обратил внимание, что у меня установлена эта же версия. Автор указывал, что проблема кроется конкретно в этой версии антивируса

После удаления, ошибка у него исчезла.

Немного поискав информации конкретно по этой ошибке с антивирусом, убедился, что такие случаи не редкость и встречались у других людей. Удалил с компьютера Kaspersky Endpoint Security 10 и установил 8-ю версию. Ошибка 1С «Существуют активные сеансы работы с данной базой, использующие версию платформы, не поддерживающую совместную работу с этой версией. Не совпадает версия временного файла» исчезла.

Вот такой вот неожиданный глюк совместимости программ. С Kaspersky Endpoint Security 10, к сожалению, это не первый подобный случай. Хоть продукт вышел уже достаточно давно, ошибки с ним случаются до сих пор, приходится использовать более ранние версии.

30.10.2015 Дополнение.

Сегодня вновь столкнулся с подобной ошибкой — Существуют активные сеансы работы с данной базой, использующие версию платформы, не поддерживающую совместную работу с этой версией. Не совпадает версия временного файла. При этом у всех пользователей как минимум пол года стоит 10-я версия Касперского и все было в порядке. Невозможно было зайти ни с одного компьютера. База локальная, расположенная в сетевой папке. Зайти не получалось никому. Была предпринята попытка удалить файлы с маской 1Cv8tmp* в папке с базой, но не получалось, так как файлы были заняты.

У меня не было доступа к серверу с сетевой папкой, посмотреть у кого открыты файлы не получалось. Пользователей с базой работало всего несколько человек и у всех база была закрыта. Но оказалось, что у одного пользователя завис процесс 1С на компьютере и его не было видно, если не заглянуть в список процессов. Через диспетчер задач удалил этот процесс, затем удалил файлы 1Cv8tmp* и зайти в базу удалось.

Онлайн курс «DevOps практики и инструменты»

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, научиться непрерывной поставке ПО, мониторингу и логированию web приложений, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.

Проверьте себя на вступительном тесте и смотрите программу детальнее по .

Где хранится журнал регистрации

Начнем с того, где хранится журнал регистрации в 1С. Варианта может быть два — для файлового и клиент серверного режима работы.

Файловая база

Для файловых баз данных 1С журнал находится в папке с базой данных. Расположение файлов можно узнать при запуске программы в меню выбора базы данных:

Красным выделен путь. Если мы проследуем по этому пути, то увидим следующую картину:

Папка 1Cv8Log — это и есть директория, содержащая журнал регистрации.

  • Если Вы планируете перенести файловую базу данных и хотите сохранить историю журнала регистрации, Вам обязательно надо скопировать папку 1Cv8Log в категорию новой базы 1С.
  • Если необходимо очистить журнал регистрации 1С в файловой базе, просто удалите папку 1Cv8Log.

Клиент-серверная база 1С SQL

В клиент-серверном режиме файлы истории обычно хранятся на сервере в каталоге:

C:Program Files1cv8srvinfo 1Cv8Log

Чтобы перенести журнал регистрации 1С для базы SQL, так же, как и для файловой, достаточно перенести папку в расположение новой базы.

Так же и с удалением — достаточно просто удалить данную папку.

Решение

Утилита командной строки sqlite

Для Windows утилиту нужно скачать отсюда.

Для Linux следует использовать утилиту, доступную в официальных репозиториях.

Восстановление

ВНИМАНИЕ! Все нижеследующие операции обязательно производите над копией файла журнала регистрации

  • Остановите кластер «1С:Предприятия» или завершите все клиенты для файлового варианта.
  • Скопируйте испорченный файл 1Cv8.lgd в отдельную директорию. Например, «C:LogRestore».
  • Туда же разархивируйте sqlite3.exe из архива, который скачале ранее.
  • В командной строке перейдите в рабочую директорию («C:LogRestore»).
  • Выполните команду:

sqlite3 1Cv8.lgd .dump >> backup.sql

Откройте файл backup.sql. Он может быть большой и MS Notepad его может не открыть. В этом случае воспользуйтесь, например, Notepad++.
Если самой последней строкой у вас является «ROLLBACK;» — замените ее на «COMMIT;» и сохраните файл.
Переименуйте файл 1Сv8.lgd в текущей директории в 1Cv8-orig.lgd.
В этой же директории выполните команду:

При этом могут выводиться ошибки. Это нормально.

Откройте файл 1Сv8.lgd Конфигуратором пустой файловой базы. Убедитесь, что данные сохранены.
Замените испорченный файл в том месте, где он был изначально на 1Cv8.lgd из текущей директории.

Журнал регистрации 1С — специальный механизм платформы 1С версий 8.2 и 8.3, который позволяет фиксировать работу пользователей с системой. С помощью журнала можно узнать, кто и когда изменял объекты в системе: справочники, документы, регистры и т.д. Ниже мы рассмотрим, как работать с этим механизмом, где хранятся файлы журнала регистрации 1С, каким образом происходит его настройка, как оптимизировать журнал регистрации и как можно произвести полную очистку данных.

Solution

  1. Firstly, we should try to verify the database with an embedded SQLite3 command. So, we need to have  installed (v3.25.2 or later). The installation steps depend on the OS.
  2. We will use Docker instead of direct installation (this option is available only for x86_64 CPUs, for arm-based boards you will need to install  via the package manager of your OS).
  3. Stop the storagenode
  4. Make a backup of all the  databases. They are located in the  folder for your data storage. For example , where  is the data folder you had specified in the  option of the  command for your storagenode, or in case of using the Windows GUI, in the option of the file.
  5. Check each database for errors. We will use  as an example in this guide.
    1. Docker (replace with an absolute path to the databases location, or simple switch the current location to there)
      docker run --rm -it --mount type=bind,source=${PWD},destination=/data sstc/sqlite3 find . -iname "*.db" -maxdepth 1 -print0 -exec sqlite3 '{}' 'PRAGMA integrity_check;' ';'
    2. Direct installation
      1. Linux

        sudo apt update && sudo apt install sqlite3 -y
      2. Windowshttps://www.sqlitetutorial.net/download-install-sqlite/
      3. Make sure that the version is v3.25.2 or later, otherwise the check will not work correctly. 
        sqlite3 --version
      4. perform the integrity check (perform for each database), for example for :
        sqlite3 /path/to/storage/bandwidth.db "PRAGMA integrity_check;"
      5. Or check all databases with help of shell commands:
        1. bash (Linux)
          find /path/to/storage/ -iname "*.db" -maxdepth 1 -print0 -exec sqlite3 '{}' 'PRAGMA integrity_check;' ';'
        2. PowerShell (Windows)
          Get-ChildItem X:\storagenode\storage\*.db -File | %{$_.Name + " " + $(sqlite3.exe $_.FullName "PRAGMA integrity_check;")}
  6. If you see errors in the output, then the check did not pass. We will unload all uncorrupted data and then load it back. But this could sometimes fail, too. If no errors occur here, you can skip all the following steps and start the storagenode again.
  7. If you were not lucky and the check failed, then please try to fix the corrupted database(s) as shown below.

  8. Open a shell

    1. Docker version of sqlite3. Open a shell Inside the container:

      docker run --rm -it --mount type=bind,source=x:\storagenode\storage,destination=/storage sstc/sqlite3 sh

      Tip. You can use  to restore your databases. It uses memory instead of disk and should take a lot less time than on HDD (you can read more about usage of  with Docker in the Use tmpfs mounts guide or this forum comment). For Windows or MacOS you must increase the allocated RAM for the docker’s VM via Docker desktop application to fit a double size of the greatest corrupted database file in case of usage of .

    2. You could use your shell directly if you have sqlite3 installed. In that case, use the path to your storage instead of «/storage/» across this guide below.
    3. For Windows with local sqlite3 installed, we recommend to use a PowerShell to execute the commands below. Don’t forget to replace the «/storage/» folder with your local path to the folder where the databases are stored. If the  executable is not in the system variable PATH, then you should specify the full path to it or run from the location of the executable.
  9. Now run the following commands in the shell. You need to repeat steps 9 to 14 for each corrupted  database:

    cp /storage/bandwidth.db /storage/bandwidth.db.baksqlite3 /storage/bandwidth.db
  10. You will see a prompt from . Run this SQL script:

    .mode insert.output /storage/dump_all.sql.dump.exit
  11. We will edit the SQL file 

    1. Linux or docker version:

      cat /storage/dump_all.sql | grep -v TRANSACTION | grep -v ROLLBACK | grep -v COMMIT >/storage/dump_all_notrans.sql
    2. PowerShell (Windows) with a local sqlite3 version:
      Get-Content dump_all.sql | Select-String -NotMatch TRANSACTION | Select-String -NotMatch ROLLBACK | Select-String -NotMatch COMMIT | Set-Content -Encoding utf8 dump_all_notrans.sql
  12. Remove the corrupted database (make sure that you have a backup!)

    rm /storage/bandwidth.db
  13. Now we will load the unloaded data into the new database

    sqlite3 /storage/bandwidth.db ".read /storage/dump_all_notrans.sql"
  14. Check that the new database ( in our example) has a size larger than 0:

    1. Linux or docker version

      ls -l /storage/bandwidth.db
    2. PowerShell (Windows) with a local sqlite3 version:
      ls /storage/bandwidth.db
  15. Exit from the container (skip this step, if you use a directly installed sqlite3)

    exit
  16. If you are lucky and all corrupted  databases are fixed, then you can start the storagenode again.

Рейтинг
( 1 оценка, среднее 5 из 5 )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: