10

データベース ファイルを開き、sqlite3 の open() メソッドを使用してデータベース接続を取得すると、プログラムが終了するまで接続が閉じられません。コンピュータの突然の電源オフやOSのクラッシュなどの予期しないエラーが発生した場合、データベース ファイルのモードが破損したり、ハンドルが失われたりしませんか? より具体的には、コンピューターを再起動しても書き込み可能な状態を維持できますか? ところで、エラーが発生したときのデータ損失は気にしません。

どうもありがとうございました!

4

3 に答える 3

14

SQLiteは、これから保護するように特別に設計されています。公式SQLiteからトランザクションページです:

SQLiteの単一のトランザクション内のすべての変更は、変更をディスクに書き出す動作がによって中断された場合でも、完全に発生するか、まったく発生しません。

  • プログラムのクラッシュ、
  • オペレーティングシステムのクラッシュ、または
  • 停電。

前の段落の主張は、オペレーティングシステムのクラッシュと電源障害のデータベースファイルへの影響をシミュレートする特別なテストハーネスを使用して、SQLite回帰テストスイートで広範囲にチェックされています。

上記のようなクラッシュからどのように保護するかについての具体的な詳細を知る必要がある場合は、SQLiteの記事「SQLiteのアトミックコミット」にも興味があるかもしれません。


クラッシュ後の書き込みについて:(ファイルロックと同時実行から)

プロセスがデータベースの更新の最中にあり、プログラムまたはオペレーティングシステムのクラッシュまたは電源障害により更新が完了できない場合、ホットジャーナルが作成されます。ホットジャーナルは例外条件です。クラッシュや電源障害から回復するためのホットジャーナルが存在します。すべてが正しく機能している場合(つまり、クラッシュや電源障害がない場合)、ホットジャーナルを取得することはありません。

発生する可能性のある最悪の事態は、クラッシュ後に残っているホットジャーナルを削除する必要があることです。

于 2009-09-21T03:40:56.697 に答える
4

SqliteはACIDに準拠しているため、電源オフは問題になりません。

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

于 2009-09-21T03:53:41.340 に答える
1

突然の電源オフで何かが起こる可能性があります。ただし、リスクを軽減するためにUPSをお勧めします。

于 2009-09-21T03:42:02.950 に答える