【发布时间】:2011-07-13 13:13:58
【问题描述】:
我的数据库大约 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 命令行实用程序来排除应用程序代码的任何问题?
-
您能说得更具体一点吗(例如,您将从 CLU 运行哪个命令)?
-
嗯,危机快结束了。我能够将损坏的数据库导出到一个新的数据库中,该数据库现在正在通过其完整性检查。我确认所有关键数据都是完整的(即“用户”表等)。我还确认(非常幸运)唯一无法恢复的实际上是一些我当然可以没有的微不足道的网站使用数据(页面浏览统计数据等)。有一些数据无法保存,这很重要,但我有一个备份,因此我可以通过 INSERT 重新导入它。所以,没有什么重要的损失;我还有一点工作要做。
标签: file sqlite filesystems corruption