文件 – SQLite3数据库或磁盘已满/数据库磁盘映像格式不正确

我的数据库大约是25 MB,我已经验证访问它的用户名以及文件权限在几个月内没有改变。我有一个问题,其中查询失败,由于“数据库或磁盘已满”,然后有时“数据库磁盘映像格式错误”的问题。

除非我读错了,我的磁盘不是接近满的(这是一个Ubuntu服务器,9.10,如果它有什么区别)

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

作为一个测试,我只是做了一个动作,添加了一个新的记录,这是好的。我试图找出,如果有一组特定的行动是失败。然而,在插入(并且验证它在那里)数据库的磁盘上的字节数没有改变(既不向上也不向下)。

使用命令行实用程序导致类似以下,这是失败壮观:)

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. ...

任何想法,我应该在下一步?有一个表中的最大行数或某事有问题吗?我对SQLite3的最大值做了一些阅读,我的数据库中没有什么是接近他们,只要我能告诉。

然后我看看我的每日备份,我看到数据库备份没有改变文件大小3-4天 – 很奇怪。我恢复了数据库的备份副本之前,它没有改变文件大小,仍然有奇怪的问题。

我想我必须(1)从较旧的备份还原,(2)重新运行我的Rails迁移修复。

最佳答案
需要考虑的几件事:

> SQLite3数据库文件大约是DB页面大小的倍数,除非使用VACUUM,否则不会收缩。如果删除某些行,则会在内部标记释放的空间,并在以后的插入中重复使用。因此,插入操作通常不会导致后台DB文件的大小发生变化。
>对于SQLite(或任何其他数据库),您不应使用传统备份工具,因为它们不考虑对确保数据库未损坏至关重要的数据库状态信息。特别是,在插入事务中复制DB文件是灾难的一种方法…
> SQLite3有一个API专门用于备份或复制正在使用的数据库。
>是的,它似乎是你的数据库文件是corrupted.它可能是一个硬件/文件系统错误。或者你在使用时复制了他们?或者可能还原未正确采取的备份?

转载注明原文:文件 – SQLite3数据库或磁盘已满/数据库磁盘映像格式不正确 - 代码日志