Файл не является файлом базы данных

Обновлено: 21.11.2024

Резюме. В этом блоге собраны сведения о методах устранения ошибки шифрования SQLite. Иногда мы сталкиваемся с множеством ошибок при работе с базой данных SQLite. Но ошибка шифрования SQLite очень распространена, и сообщение выглядит так:
"Исправлена ​​ошибка SQLite — файл зашифрован или не является базой данных"

Итак, если вы неохотно получаете эту ошибку и ищете подлинное решение для исправления этой ошибки шифрования, то вы находитесь в правильном месте, чтобы решить эту ошибку. Это самая распространенная ошибка, с которой сталкиваются пользователи SQLite. Теперь, прежде чем перейти к решению, давайте взглянем на краткое описание базы данных SQLite.

Введение в SQLite

SQLite – это облегченная версия базы данных SQL, которая широко используется в мире приложений. Он отличается от других баз данных SQL тем, что не требует отдельного серверного процесса. И он напрямую выполняет операции чтения и записи в обычные файлы на диске. В один файл включена вся база данных SQL, содержащая несколько таблиц, индексов, триггеров и представлений. Коды SQLite находятся в открытом доступе, благодаря чему он широко используется в личной и профессиональной деятельности.

Теперь я собираюсь упомянуть еще некоторые функции, которые делают его исключительным среди других СУБД.

Возможности базы данных SQLite

  1. Не требует отдельного серверного процесса, в отличие от других баз данных SQL.
  2. В SQLite есть функция прямого чтения и записи в обычные файлы на диске.
  3. Эта база данных позволяет создавать, удалять, выполнять команды SQL и выполнять другие распространенные операции управления базой данных.
  4. В основном исходный код SQLite предназначен для тестирования и проверки.
  5. SQLite встроен в конечную программу. Его механизм базы данных не является клиент-серверным.

Причины того, что файл SQLite зашифрован или не является ошибкой базы данных:

Две основные причины вызывают ситуацию, когда файл SQLite зашифрован или не является базой данных. Эти причины следующие:

  1. Возможно, файл данных не защищен паролем.
  2. SQLite — это последовательная база данных, состоящая как минимум из одной таблицы и одной записи. Таким образом, ошибка возникает, когда вы создали файл как новый файл, в котором он находится вне таблицы.

Устранение этой ошибки шифрования SQLite вручную:

Автоматический метод:

Как мы все видим, ручной способ очень сложен и требует глубоких знаний для выполнения этих шагов. Следовательно, рекомендуется попробовать сторонний инструмент, такой как SysInfoTools SQLite Repair, чтобы избавиться от этих сложных ошибок за очень простые шаги. Программное обеспечение имеет встроенный алгоритм, ориентированный на результат, который идеально выполняет восстановление базы данных SQLite.

Заключение

В предыдущем разделе мы обсудили ручной и автоматизированный подход к устранению ошибки шифрования SQLite. Ручной метод требует технических знаний и не подходит для начинающего пользователя, тогда как использование стороннего инструмента делает его более простым и ориентированным на результат способом. В любом случае, вы можете выбрать любой метод, который подходит вам, и если у вас есть какие-либо предложения для нас, пожалуйста, укажите их в нашем разделе комментариев.

Я только что запустил Signal и получаю сообщение об ошибке Ошибка запуска базы данных: Ошибка: SQLITE_NOTADB: файл не является базой данных с возможностью удаления всех данных и создания новой.

Странно то, что у меня есть папка Signal и Signal-beta в ~/Library/Application Support/ . Однако все файлы в бета-версии созданы 08 января 2020 г., и после этого никаких изменений не производилось. Я думал, что использую бета-версию, но почему-то нет.

Также интересно, что он пытается перенести данные при каждом перезапуске.

Я включал и выключал Signal на этом компьютере, а не каждый день.

Скриншоты

Информация о платформе

Версия связанного устройства:

Ссылка на журнал отладки

Ссылки нет, т.к. приложение не запустилось, поэтому вот лог-файл.

файл config.js содержит ключ.

Текст был успешно обновлен, но возникли следующие ошибки:

прокомментировал eppfel 16 сентября 2020 г.

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

scottnonnenberg-signal изменил название Ошибка запуска базы данных: Ошибка: SQLITE_NOTADB: файл не является базой данных при переносе базы данных. 16 сентября 2020 г.

scottnonnenberg-signal прокомментировал 16 сентября 2020 г.

прокомментировал eppfel 17 сентября 2020 г.

Это кажется другим в том смысле, что в моем случае не удается перенести базу данных. Может ли это быть связано с обновлением?

scottnonnenberg-signal прокомментировал 17 сентября 2020 г.

Это определенно одно и то же.Мы готовы перенести базу данных (шифровальные шифры или схему базы данных, если это необходимо) при каждой открытой базе данных.

bjdooi прокомментировал 30 сентября 2020 г.

комментарий Primeos прокомментирован 8 декабря 2020 г. •

Это случилось и со мной после обычной перезагрузки (без сбоев или чего-то еще, и повреждение FS кажется маловероятным):

Я использую GNU/Linux с Signal-Desktop 1.38.2. Я постараюсь узнать больше.

Обновления:

Это журнал последнего закрытия приложения:

Кажется, нет никаких признаков того, что что-то пошло не так. Я создал резервную копию сразу после закрытия Signal-Desktop, но БД ( ~/.config/Signal/sql/db.sqlite) из резервной копии имеет тот же хэш и также повреждена (я не могу открыть ее вручную с помощью sqlcipher, и поскольку он зашифрован, я не могу понять, почему. ).

Сравнение размеров файлов (последняя рабочая резервная копия и поврежденная БД):

Но только первые 16 байт db.sqlite кажутся идентичными в обоих файлах (я не смотрел документацию по SQLCipher, не уверен, должно ли это выглядеть так или нет).

ryantrinkle прокомментировал 24 декабря 2020 г.

Я пытаюсь обновить версию 1.37.3 до версии 1.39.4 и получаю ту же ошибку (NOTADB). Если я вручную запускаю версию 1.37.3, все по-прежнему работает и все данные сохраняются.

ryantrinkle прокомментировал 24 декабря 2020 г. •

Теперь я немного сузил это: я смог пройти через версии до 1.38.2, которые работают успешно. Запуск 1.39.2 (который, кажется, является следующим выпуском после 1.38.2) приводит к NOTADB.

scottnonnenberg-signal прокомментировал 4 января 2021 г.

@ryantrinkle Удивительно, что изменения с версии 1.37 на версию 1.39 привели к такой ошибке, поскольку низкоуровневые изменения базы данных не включены. Как вы устанавливаете Signal Desktop?

комментарий Primeos прокомментирован 8 января 2021 г. •

Я ненавижу Сигналы, как они работают с долгосрочными разговорами и архивированием истории, это отстой - нет подходящих способов справиться с этим. @moxie0

+1, сделайте что-нибудь с этим.

Поиск и исправление ошибки может быть сложной задачей, но в любом случае Signal-Desktop должен (IMO) как минимум:

комментарий neonfuz прокомментировал 15 января 2021 г.

Сегодня я получаю сетевые ошибки в сигнале, поэтому я просмотрел проблемы для моего дистрибутива (nixos) и нашел эту ошибку, поэтому я закрыл сигнал, чтобы сделать резервную копию моей папки сигналов, и при повторном открытии я обнаружил поврежденную базу данных. очень раздражает, мой телефон сломался, так что получить доступ к сигналу сейчас будет проблематично.

fdietze прокомментировал 1 февраля 2021 г.

У меня такая же проблема. Итак, каковы мои варианты сейчас? Есть ли способ восстановить поврежденную базу данных? Должен ли я удалить свою историю? Стоит ли ждать исправления?

комментарий backuitist от 1 февраля 2021 г.

Вы можете проверить первые 16 байт вашего файла базы данных:

Вы должны увидеть это:

В моей сломанной БД у меня было это:

Я не смог найти ни одного инструмента, способного исправить БД с неверным заголовком.

fdietze прокомментировал 1 февраля 2021 г.

прокомментировал mehdibo 2 февраля 2021 г.

Сегодня у меня произошла такая же ошибка

Ошибка запуска базы данных:

Ошибка: SQLITE_NOTADB: файл не является базой данных

fdietze прокомментировал 4 февраля 2021 г.

Поскольку я хотел снова использовать Signal на своем рабочем столе, я просто удалил всю историю чата. Это было очень плохо.

комментарий panicfarm прокомментирован 27 февраля 2021 г. •

Эта ошибка запуска базы данных: Ошибка: SQLITE_NOTADB: файл не является базой данных в Windows 10, что делает программу непригодной для использования — она дважды уничтожала историю моего чата. Это происходит только после автообновления приложения, когда я выхожу и перезапускаю ту же версию Signal, БД открывается нормально.
Когда я выбираю "Удалить все данные" в диалоговом окне ошибки, оно показывает

С помощью Process Explorer мне не удалось найти процесс, блокирующий db.sqlite

Этот комментарий был скрыт.

sonergonul прокомментировал 28 февраля 2021 г.

комментарий justinclift прокомментировал 28 февраля 2021 г. •

@backuitist Если Signal использует SQLCipher, как упоминалось ранее в этой теме, заголовок зашифрованной базы данных не является стандартным заголовком SQLite.

Например, это заголовок из базы данных SQLCipher с некоторыми сгенерированными случайными данными для целей тестирования:

Этот файл базы данных отлично открывается на любом клиенте, который может использовать SQLCipher версии 4.x. например Браузер БД для SQLite

Обратите внимание, что это сама тестовая база данных выше (не база данных Signal), на тот случай, если кому-то будет полезно исследовать ее. Пароль "abc123":

комментарий justinclift прокомментировал 28 февраля 2021 г. •

Я пытаюсь обновить версию 1.37.3 до версии 1.39.4 и получаю ту же ошибку (NOTADB). Если я запускаю версию 1.37.3 вручную, все работает и все данные сохраняются. .

Похоже, что новые версии Signal используют другие настройки шифрования, чем старые версии.Лично я ожидал бы, что более новая версия хотя бы попытается прочитать «старую» базу данных, используя «старые» настройки, а затем запишет новую базу данных, используя «новые» настройки. Может, с этим процессом что-то не так?

@norpol Похоже, что журналисты, теряющие свои данные, должны вернуться к старой версии Signal, пока эта проблема не будет решена. Надеюсь, они смогут это сделать.

norpol прокомментировал 28 февраля 2021 г. •

@justinclift Спасибо, я перешлю эту информацию. Обновление: Внезапно просто просит пересвязать, так что архив, к счастью, не пропал.

Относительно SQLCipher. По крайней мере, для моей текущей версии (1.39.6) заголовок базы данных 00000000 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 |Формат SQLite 3. и использование sqlite3-cli это позволяет мне видеть фактическое содержимое сообщения - просто открыв базу данных. Если бы SQLCipher использовался, я бы не увидел этот заголовок/не смог бы извлечь базу данных, которую я предполагаю.

justinclift прокомментировал 1 марта 2021 г.

@norpol Да, похоже, что база данных, которую вы пытаетесь использовать, не зашифрована. По крайней мере, не с SQLCipher.

комментарий backuitist от 1 марта 2021 г.

Спасибо, @justinclift, приятно знать! Я думал, что будет какое-то шифрование, но ничего не смог найти в кодовой базе, а сообщение об ошибке сигнала точно совпадало с сообщением SQLite.

комментарий Primeos прокомментирован 11 мая 2021 г.

Это случилось только что на моем компьютере с Windows 7.

Было бы интересно узнать, не зашифрована ли сейчас БД и в Windows, но я не знаю, как это проверить в Windows.

Комментарий GDmac от 17 мая 2021 г.

На Mac в качестве временного решения (отключить все/начать с нуля) я удалил ApplicationSupport/Signal, чтобы вообще иметь возможность запускать приложение.

thrien прокомментировал 21 мая 2021 г.

У меня также есть эта проблема (Arch), и понижение версии gtk3 до ..-3 «решило» проблему. Сигнал начинается снова.

Я сделал то же самое несколько недель назад, но, поскольку это просто деактивировало шифрование, я попытался найти лучшее решение.
Я знаю, что у меня снова установлена ​​последняя версия gtk-3, и я повторно зашифровал базу данных в .config/Signal/sql/db.sqlite, следуя этому примеру, используя ключ в .config/Signal/config.json .
Теперь мое сообщение об ошибке выглядит так:

Я понимаю это или нет, я помещаю зашифрованный или незашифрованный файл в .config/Signal/sql/db.sqlite. Поскольку баз данных больше, мне было интересно, может быть, их тоже нужно шифровать, но когда у меня ничего нет в .config/Signal/sql/db.sqlite, Signal запускается без ошибки (как уже сообщали другие люди).
Я не понимаю, почему изменилось сообщение об ошибке, но, возможно, кто-то знает, и это может быть полезно.

комментарий Primeos прокомментирован 21 мая 2021 г.

Вам также необходимо вручную скопировать user_version (и schema_version ), иначе Signal-Desktop повредит вашу БД при запуске при выполнении всех миграций БД.

Я не понимаю, почему изменилось сообщение об ошибке, но, возможно, кто-то другой понимает, и это может быть полезно.

Не уверен, почему он изменился, но IIRC изменил его в Signal-Desktop 5.1.0 (вероятно, влияет и на другие сообщения об ошибках — вероятно, это преднамеренное изменение для предоставления дополнительного контекста (трассировка стека) вместо того, чтобы просто печатать «файл не сообщение об ошибке "база данных").

Прокомментировал LukeLR 21 мая 2021 г.

Я уже ответил на предыдущий комментарий по электронной почте, но, видимо, GitHub снова проглотил мой ответ :/ Вот он:

Проблема заключалась в том, что в некоторых более новых версиях была нарушена поддержка sqlcipher. При понижении версии поддержка sqlcipher должна была быть восстановлена. Поэтому, если вы понизили версию до правильной, вы должны были использовать зашифрованную базу данных. И после обновления до последней версии он должен продолжать работать с этой зашифрованной базой данных.

kpcyrd прокомментировал 21 мая 2021 г.

Я собираюсь отказаться от подписки, так как первоначальная проблема была решена. Если возникнет новая проблема с пакетом Arch Linux, пожалуйста, создайте проблему в системе отслеживания проблем Arch Linux.

Вероятно, эту проблему с github можно закрыть.

joukewitteveen прокомментировал 21 мая 2021 г.

Я откажусь от подписки, так как первоначальная проблема была решена

@kpcyrd: Мне любопытно, какое было решение. Я не могу найти никаких изменений, указывающих на решение проблемы статической/динамической компоновки. Не могли бы вы указать на это?

Призрак прокомментировал 21 мая 2021 г.

Также я давно не сталкивался с этой проблемой в Arch Linux. Не знаю, временное ли это состояние или проблема устранена. В любом случае спасибо всем, кто участвовал в решении этой проблемы!

Черти прокомментировал 21 мая 2021 г.

Я также не сталкивался с этой проблемой некоторое время в Arch Linux. Не знаю, временное ли это состояние или проблема устранена.В любом случае спасибо всем, кто участвовал в решении этой проблемы!

Это временное решение. Пакет gtk3 хочет включить функцию, связанную с sqlite, которая конфликтует с использованием signal-desktop реализации sqlcipher. Из-за этого эта функция в gtk3 была временно отменена, но все еще находится в планах, чтобы снова включить ее, когда бы это ни произошло. В конце концов, я думаю, учитывая проблему с sqlcipher (а именно: sqlcipher маскируется под sqlite, чтобы заменить его, но функция gtk3 загрузит sqlite на ранней стадии (т.е. до того, как появится само приложение), а затем предназначенный sqlcipher место уже занято нормальным sqlite, который потом не может читать базу, так как это sqlcipher-один, отсюда и ошибка.)

thrien прокомментировал 21 мая 2021 г. •

Черт возьми, он снова работает. Большое спасибо!
Я использовал sqlcipher в командной строке для шифрования базы данных.

В этом техническом блоге мы сначала познакомим вас с образцом базы данных SQLite. Затем мы дадим вам ссылки для загрузки примера базы данных и ее схемы. В конце вы узнаете, как подключиться к образцу базы данных с помощью инструмента sqlite3.

SQLite – популярный выбор в качестве встроенного программного обеспечения базы данных для локального/клиентского хранилища в прикладном программном обеспечении, таком как веб-браузеры.
SQLite также считается уникальной внутрипроцессной библиотекой, которая представляет собой автономный, не требующий конфигурации, безсерверный, транзакционный механизм базы данных SQL. Код для SQLite находится в общественном достоянии и поэтому может использоваться бесплатно для любых целей, коммерческих или частных.

Кроме того, у него нет отдельного серверного процесса, в отличие от большинства других баз данных SQL. SQLite также имеет возможность чтения и записи непосредственно в обычные файлы на диске. SQLiteDatabase имеет методы для создания, удаления, выполнения команд SQL и выполнения других общих задач управления базой данных. Большая часть исходного кода SQLite посвящена исключительно тестированию и проверке SQLite не является механизмом базы данных клиент-сервер. Скорее, он встроен в конечную программу.

В последнее время многие пользователи получают сообщения о том, что файл SQLITE зашифрован или не является базой данных. что это?

Эта проблема возникает по двум причинам.

Либо файл данных не защищен паролем, либо (2) это секвенированная база данных, содержащая как минимум одну таблицу и одну запись.

Ошибка возникает из-за того, что вы создаете файл как новый файл, а затем вне таблицы. Этот метод полностью действителен, но он создает базу данных второй версии.

Чтобы решить эту проблему, следуйте приведенным ниже советам.

1) Установите SQLite3:
>> sudo apt-get update
>> sudo apt-get install sqlite3 libsqlite3-dev

Вывод. Если проблема не устранена, используйте программное обеспечение для защиты базы данных SQLite от Aryson SQLite Recovery. В настоящее время это программное обеспечение пользуется большим спросом из-за его потребности и эффективного решения. Программное обеспечение легко решит все проблемы, нажав на несколько вариантов.

Читайте также: