2017-11-27 19 views
0

明らかに任意の列の値を編集すると、チェックサムが変更されます。 元の値を元に戻しても、ファイルは元のチェックサムに戻されません。編集を元に戻した後、Sqliteチェックサムが同じではないのはなぜですか?

バッファのサイズに起因するものではないため、前後にVACUUMを実行しました。 カラムを参照するインデックスがなく、行が追加または削除されないため、pkインデックスも変更する必要はありません。 私はロールバックジャーナルをオフにしようとしましたが、それは別のファイルですので、何の効果もなかったことに驚くことはありません。

同じ内容で同じファイルバイトが生成されない理由を説明する内部ログや変更された日付はわかりません。

ファイル内で何が起こっているのかを調べ、それを説明する方法があるかどうかを調べます(関連するPRAGMAは表示されません)。そのため、他のプロセスができ

答えて

1

データベースファイルが(the equivalent of) a timestamp of the last modificationが含まれてかなり曖昧な原因がある

付与https://sqlite.org/dbhash.htmlは、この問題を回避するために存在しますが、私は「等々...と」トリガされ、これらの条件のいずれかが表示されませんデータが変更されたことを検出します。

SQLレベルで見られるようにデータに差異がなく、データベースファイル(ページ順序、Bツリー構造、未使用部分のランダムデータなど)には多くの変更があります。

SQLレベルでデータベースを比較する場合は、.dump出力などのデータの標準SQL表現を比較するか、dbhashなどの特殊なツールを使用する必要があります。

関連する問題