"Database or disk is full"真空,拥有充足的可用空间



我花了一个小时搜索了许多其他有这个确切问题的线程,并试图应用解决方案,但一半的线程说问题是磁盘已满(没有(,其余的线程我无法理解答案,或者它们对我不起作用。

我的数据库文件是8MB,我的SSD有314GB可用空间。唯一的另一个音量是我的iCloud Drive,它有237MB的可用空间。

其他线程建议更改临时目录所在的卷,但是:

(1( 我的两本书都有足够的空闲空间。

(2( 我找不到如何设置临时目录的说明。尝试以下语法会出现语法错误:SQLITE_TMPDIR="/path/">

(3( 我找不到如何显示当前临时目录的说明。[UPDATE:在终端中键入"env"显示TMPDIR=/var/folders…,它在我的SSD上,据我所知没有空间限制。]

更新:运行pragma_integrity_check,我得到:

On tree page 1206 cell 0: invalid page number 1658652726
On tree page 746 cell 0: invalid page number 205562142
On tree page 94 cell 0: invalid page number 1932643690
Page 1051 is never used
Page 1079 is never used
Page 1385 is never used

更新:尝试恢复损坏数据库的各种建议方法都失败了。

(1( 恢复。在下面的代码中,"sqlite>"是命令提示符。我通过在终端中输入"sqlite3"来获得它。

sqlite>$sqlite3-batch bad.db.recover>抢救的.sql;#无法识别的代币$

sqlite>sqlite3-batch bad.db.recover>抢救的.sql;#错误:在"sqlite3"附近:语法错误

sqlite>-batch bad.db.recover>抢救的.sql;#错误:接近"-":语法错误

(2( 真空进入

出现语法错误。发现我的SQLite版本太旧了。下载了新版本,查找有关如何升级的说明。找到"brew update sqlite"。试过了,但出错了,鲁比太老了。更新Ruby。再次尝试"brew-update sqlite",得到错误,"错误:sqlite未安装。"尝试"brew install sqlite"得到错误"sqlite仅为keg,这意味着它没有符号链接到/usr/local,因为macOS提供了一个旧的sqlite3。">

(3( 真空一台

我的数据库只有一个表。

由于数据库文件已损坏,您将不得不尝试恢复。我会从使用VACUUM和INTO子句开始,例如

VACUUM INTO 'recovery.db';

如果这不起作用,那就试着一次抽一张桌子。

尝试从损坏的数据库中恢复数据的最佳方法是使用sqlite3命令行程序的.recover命令,该命令可以为尽可能多的数据打印SQL DDL语句。

示例:

$ sqlite3 -batch bad.db .recover > salvaged.sql

有关完整的详细信息,请参阅文档。

您可能想要sqlite3shell的最新版本,可以是下载的二进制文件,也可以是从源代码构建的,因为.recover在3.30版本中进行了改进。

相关内容

最新更新