Будет ли поврежден файл базы данных SQLite3 при внезапном отключении питания или сбое ОС? - PullRequest
8 голосов
/ 21 сентября 2009

Я открываю файл базы данных и получаю соединение с базой данных, используя метод open () sqlite3, и соединение не будет закрыто, пока программа не закроется. Если произойдет непредвиденная ошибка, такая как внезапное отключение компьютера или сбой ОС, будет ли поврежден режим файла базы данных или потерян его дескриптор? В частности, может ли он оставаться доступным для записи при перезагрузке компьютера? Кстати, меня не волнует потеря данных при возникновении ошибок.

Большое спасибо!

Ответы [ 3 ]

12 голосов
/ 21 сентября 2009

SQLite специально разработан для защиты от этого С официальной SQLite является транзакционной страница:

Все изменения в пределах одного транзакция в SQLite либо происходит полностью или не совсем, даже если акт написания изменений в диск прерван

  • сбой программы,
  • сбой операционной системы или
  • сбой питания.

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

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


Относительно записи после сбоя: (от Блокировка файлов и параллелизм )

Горячий журнал создается, когда процесс находится в середине обновления базы данных, и сбой программы или операционной системы или сбой питания препятствуют завершению обновления. Горячие журналы являются исключением. Горячие журналы существуют для восстановления после сбоев и сбоев питания. Если все работает правильно (то есть, если нет сбоев или сбоев питания), вы никогда не получите горячий журнал.

Худшее, что может произойти, это то, что вам нужно удалить горячий журнал, оставшийся после сбоя.

4 голосов
/ 21 сентября 2009

Поскольку Sqlite совместим с ACID, отключение питания не должно быть проблемой.

http://en.wikipedia.org/wiki/ACID

1 голос
/ 21 сентября 2009

все может произойти при внезапном отключении питания. Однако я бы посоветовал UPS уменьшить риск.

...