Проблема: На торговой точке при попытке запуска 1С появляется страшная и пугающая ошибка:
Ошибка: “sqlite3_exec failed: database disk image is malformed
db: C:BasesMain1Cv8Log1Cv8.lgd
sql: PRAGMA journal_mode = delete”
Решение проблемы: Чисто теоретически можно получить данные, нажав на “Показать информацию для технической поддержки”. Но скорее всего там вы в дополнение к уже известным сведениям на незнакомом английском языке получите нечто в стиле: “Невосстановимая ошибка. Ошибка при выполнении запроса POST к ресурсу /e1cib/login”.
Вообще я уже заметил по своему опыту работы, что если продавцы или работники магазина ошибки на русском более-менее могут озвучить, то английский – это просто полный караул. Вот тут и появляется демонстрация того, что учителя иностранного в школах не дорабатывают! (шутка, конечно, учителя – не злитесь, если вдруг читаете).
В общем, что тут есть. База данных 1С имеет свой каталог. В котором и хранится. В частности, на торговой точке база данных хранится в каталоге: C:BasesMain и имеет наименование 1Cv8.1CD. Но все сведения и действия с базой данных сохраняются программой в другом файле. то так называемая “история”. То есть если вдруг захочется посмотреть, что делал конкретный пользователь с базой данных (это если вдруг какой-то косяк или кто-то злонамеренно “нахимичил” – тогда очень полезная штука). Хранится данный файл в другом месте. C:BasesMain1Cv8Log и называется как раз 1Cv8.lgd. 1С сама создаёт файл во внутренней дирректории. Если нет папки, то создаст и папку.
Ошибка, что появилась при запуске, говорит о том, что по какой-то причине (чаще всего – внезапное отключение питания, скачок электроэнергии) была нарушена работа жёсткого диска. И получились сбойные сектора (либо же при отключении записывалась информация в БД истории). И потому теперь 1С не может даже прочитать информацию о том, про каких пользователей забита информация.
Конечно, можно попробовать проверить файл. В частности, может помочь видоизменённая утилита chdbfl.exe. Изначально просто она проверяет только файл-базы данных 1CD. Однако в этим, как мне кажется, не стоит сильно заморачиваться. Я в подобных ситуациях просто удаляю файл истории. К сожалению, данные о том, кто что делал за все предыдущее время работы, не сохранятся. Но они далеко не всегда и нужны.
То есть: нужно зайти непосредственно через проводник и удалить C:BasesMain1Cv8Log1Cv8.lgd
Подписывайтесь на канал “Кассовик”, пишите мне – greenand@rambler.ru. Ещё можно в ВК или в Facebook.
One of the most common errors which SQLite database users face is SQLite/SQLite3 error database disk image is malformed. This interruption usually occurs when there is a bug in DBMS or there is a problem in hardware.
Best way to come out of such a situation is to have a backup. And if it is not so then you need to follow certain steps in order to fix this error. But, first, let’s have a short overview of SQLite database
No doubt, SQLite database is one of the most widely deployed database engine worldwide, as it is used by many operating system, different browsers, and mobile phones as well. Apart from that, it has binding with many programming languages like Python, Java, C etc. But, it does not have a separate server like other databases. There are times when SQLite database gets corrupted and error message appears on your screen. One such error is the database disk image is malformed.
Now let’s see the reason behind Error SQLite Database Disk Image is Malformed
Like any other database, SQLite database is vastly used for managing data and information in a systematic way. But if precautions are not taken SQLite database can also give you errors message. Some of the reasons behind this error are as follows:
-
If there is any minor bug present in SQLite database then there are chances SQLite database might give you this error.
-
If there is a problem present in flash/disk drive memory it can result in an interruption in the functioning of the SQLite database.
-
Many times it is seen if a user is trying to access a non-SQLite file in SQLite database which leads to the error in the SQLite database.
-
Presence of corrupt SQLite files in SQLite database.
-
A user is managing SQLite data improperly which causes an increase in its size and ultimately causes problems in SQLite functioning.
These are some of the reasons which you have seen now let’s see how you can fix it.
Manual Approach To Fix SQLite Error Database Disk Image is Malformed
Follow the below mentioned steps
-
First, you need to launch DB browser for SQLite.
-
Then run database check command. You need to press on the tab of Execute SQL
-
Now type PRAGMA integrity check and press on the play. If it is damaged then same error you will see. Otherwise, you will see “Query executed successfully: PRAGMA integrity_check ( tool 0ms)”.
-
There is also an option to export the database into SQL. To perform this click on File &
after this click on Export >> Database to SQL file.
-
As per requirement select desired objects in order to migrate on the dialog box of SQL. You can define other options too.
-
Now click on OK to begin the export process.
-
After its completion, you can import it to SQLite browser.
-
To import you just need to Click on File>> Import >> Database from SQL File.
A professional way to fix Error Database Disk Image is Malformed
These are some of the ways which work when your SQLite database is corrupted and you have to access your SQLite files. But if still the problem persists and you need to access your files on an urgent basis. Then you should take help of SQLite Database Recovery software to quickly solve this SQLite error database disk image is malformed.
Download Now
Conclusion
Best way to work error free on SQLite database is by using it in an appropriate way. Otherwise you need to fix SQLite errors manually or by using a recovery tool.
Related Post
Когда вы используете RHEL/Fedora/CentOS/SUSE Linux, вы иногда можете получить ошибку ‘Database Disk is Malformed’. В этой статье мы узнаем, как исправить эту ошибку.
Как исправить ошибку Yum: Образ диска базы данных неправильно сформирован
Yum – это менеджер пакетов по умолчанию для систем RHEL/CentOS/SUSE/Fedora, который позволяет загружать, устанавливать, обновлять и удалять пакеты в вашей системе. Начиная с версии yum 3.2.26, он хранит дополнительную информацию об установленных пакетах вашей системы в плоском файле вне rpmdatabase в /var/lib/yum/yumdb. Он известен как yumdb.
Вы можете проверить его содержимое с помощью команды ls.
Вы увидите список папок с алфавитом в качестве названия папки. В каждой из этих папок вы увидите файлы, связанные с пакетами, названия которых начинаются с буквы, соответствующей названию папки. Эти файлы содержат информацию о конкретном контексте, в котором был установлен пакет. Вы можете легко получить необходимую информацию из yumdb с помощью yum-utils.
yum-utils поставляется вместе с командой yumdb, которую можно использовать для доступа к информации в базе данных yum. Вот команда для получения имени репо пакета httpd, установленного в вашей системе.
yumdb get from_repo httpd
Вы также можете использовать команду yumdb для внесения изменений в существующие файлы в базе данных yum. Вот команда для установки примечания в файлах yumdb пакетов httpd и mariadb.
yumdb set note "установлен пользователем abc для установки LAMP" httpd
Если вы хотите просмотреть всю информацию о пакете, используйте команду yumdb info. Вот команда для получения полной информации о пакете httpd, установленном в вашей системе.
Исправление ошибки Yum: Database Disk Image is Malformed
Обычно, когда вы устанавливаете пакет с помощью Yum, вы можете получить эту ошибку. Это может быть связано с повреждением yumdb, проблемами в команде ‘yum update’ или во время установки пакета. Это происходит потому, что каждый раз, когда вы запускаете yum update или устанавливаете пакет с помощью yum, yumdb обновляется. Если это происходит неправильно или завершается до завершения, то это может привести к повреждению yumdb.
Чтобы исправить эту ошибку, очистите кэш базы данных, выполнив следующую команду.
Если вышеуказанная команда по какой-то причине не сработала, попробуйте выполнить команды, перечисленные ниже.
Удалите записи в каталоге /var/cache/yum/.
очистить метаданные XML
очистить кэшированные файлы для базы данных
Создать кэш.
Далее необходимо пересобрать базу данных RPM вашей системы, чтобы она работала как раньше.
mv /var/lib/rpm/__db* /tmp
rpm --rebuilddb
Наконец, выполните команду yum update для обновления до последней версии.
Вот и все. На этом этапе ваша проблема должна быть решена.
Я создал БД для SQLite с помощью gui DB Browser for SQLite. Там было несколько простых таблиц, заполненных небольшим количеством данных, буквально записей 10 самое большое. Данные тоже простые – короткие предложения и маленькие цифры. Скопировал эту БД в ассеты, весьма успешно подключился к ней, считал и отобразил на экране.
После этого добавил пару полей, изменил названия и добавил чуть больше данных. И все, с этого момента получаю сообщение вроде
E/SQLiteLog: (11) database corruption at line 66390 of [d2e6722037]
E/SQLiteLog: (11) statement aborts at 8: [select id, code from item_subcategory where id = 10] database disk image is malformed
Сперва подумал может из-за данных, убрал из записей строки со слэшами – не помогло. Подумал, может DB Browser при изменении полей как-то сломал базу и попробовал создать заново – и запросами заранее заготовленными, и руками создавал таблицы и поля. И даже код программы перенес в новый проект (все равно в исходном было много лишнего) – ошибка все та же.
Эмулятор не использую – запускаю через подключенный телефон, но и в эмуляторе была ошибка.
Более подробный список ошибок
E/SQLiteLog: (11) database corruption at line 66390 of [d2e6722037]
E/SQLiteLog: (11) statement aborts at 8: [select id, code from item_subcategory where id = 10] database disk image is malformed
W/asampleprognam: Got a deoptimization request on un-deoptimizable method long android.database.sqlite.SQLiteConnection.nativeExecuteForCursorWindow(long, long, long, int, int, boolean)
E/DefaultDatabaseErrorHandler: Corruption reported by sqlite on database: /data/user/0/com.example.sampleprogname/databases/dbmanual.db
W/asampleprognam: Got a deoptimization request on un-deoptimizable method void sun.nio.fs.UnixNativeDispatcher.stat0(long, sun.nio.fs.UnixFileAttributes)
E/SQLiteDatabase: DB wipe detected: package=com.example.sampleprogname reason=corruption file=/data/user/0/com.example.sampleprogname/databases/dbmanual.db ctime=2023-02-16T12:31:09Z mtime=2023-02-16T12:31:09Z atime=2023-02-16T12:30:17Z checkfile [unable to obtain timestamp]
java.lang.Throwable: STACKTRACE
…
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.sampleprogname, PID: 24638
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sampleprogname/com.example.sampleprogname.activities.itemcatalog.ItemsCatalogActivity}: android.database.sqlite.SQLiteDatabaseCorruptException: database disk image is malformed (code 11 SQLITE_CORRUPT)
При этом в том же самом DB Browser проверка на ошибки говорит что все в порядке. Я копирую запросы из строк, которые генерируются в приложении, выполняю их отдельно – запросы корректные.
My database is about 25 MB, and I’ve verified that the username accessing it, as well as the file permissions haven’t changed in months. I’m having a problem where queries are failing due to a “database or disk is full” and then sometimes “database disk image is malformed” issue.
Unless I’m reading this wrong, my disk isn’t anywhere near full (this is an Ubuntu server, 9.10, if it makes any difference)
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 19610300 2389596 16224560 13% /
udev 10240 128 10112 2% /dev
none 254136 0 254136 0% /dev/shm
none 254136 36 254100 1% /var/run
none 254136 0 254136 0% /var/lock
none 254136 0 254136 0% /lib/init/rw
As a test I just did an action that added a new record, and it’s fine. I’m trying to fiqure out if there’s a specific set of actions that are failing. However, after the insert (and verifying that it’s there) the number of bytes on disk for the database has not changed (neither up nor down).
Using the command line utility results in something like the following, which is failing spectacularly 🙂
SQLite version 3.6.12
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> pragma integrity_check;
*** in database main ***
On tree page 2 cell 0: 2nd reference to page 26416
On tree page 2 cell 1: 2nd reference to page 26417
On tree page 2 cell 2: 2nd reference to page 26434
On tree page 2 cell 3: 2nd reference to page 26449
On tree page 2 cell 4: 2nd reference to page 26464
On tree page 2 cell 5: 2nd reference to page 26358
On tree page 2 cell 6: 2nd reference to page 26494
On tree page 2 cell 7: Child page depth differs
On tree page 2 cell 8: 2nd reference to page 26190
On tree page 2 cell 8: Child page depth differs
... etc., etc. ...
Any ideas on where I should be looking next? Is there a problem with the maximum number of rows in a table or something? I did some reading on SQLite3 max values, and nothing in my database is anything close to them as far as I can tell.
I then took a look at my daily backups, and I see that the database backup hasn’t changed in file size for 3-4 days – very strange. I restored a backup copy of the database from before the time it was not changing in file size, and still getting strange issues.
I’m thinking I’m going to have to (1) restore from an older backup, and (2) re-run my Rails migrations to fix.