svn cleanup:sqlite:数据库磁盘映像格式错误


Answers:


98

我有同样的问题。以下博客文章帮助我解决了该问题:http : //www.polak.ro/svn-e200030-sqlite-database-disk-image-is-malformed.html

您在sqlite数据库上进行完整性检查,以跟踪存储库(/.svn/wc.db):

sqlite3 .svn/wc.db "pragma integrity_check"

那应该报告一些错误。

然后,您可以通过执行以下操作清除它们:

sqlite3 .svn/wc.db "reindex nodes"
sqlite3 .svn/wc.db "reindex pristine"

如果之后仍然存在错误,您仍然可以选择将存储库的新副本检出到临时文件夹,然后将.svn文件夹从新副本复制到旧文件夹。然后,旧副本应该可以再次使用,您可以删除临时文件夹。


6
这实际上解决了我的问题。非常感谢你。
Erdogan Kurtur,2013年

17
如果仍然出现错误,该怎么办?错误:数据库磁盘映像格式错误?
j将

3
@jwill在实现了上面给出的解决方案后也出现了错误...但是我尝试的只是检出您存储库的新副本,然后将新检出副本的.svn文件夹覆盖到旧的..i解决了这样的问题...
Rushabh Shah 2015年

6
很奇怪,我知道了Error: unable to identify the object to be reindexed
Pacerier '16

4
链接polak.ro/...似乎是永久下来。
MadMike

21

完整性检查

sqlite3 .svn/wc.db "pragma integrity_check"

清理

sqlite3 .svn/wc.db "reindex nodes"
sqlite3 .svn/wc.db "reindex pristine"

或者

您也许可以将可以读取的数据库内容转储到备份文件,然后将其重新添加到新的数据库文件中:

sqlite3 .svn/wc.db

sqlite> .mode insert
sqlite> .output dump_all.sql
sqlite> .dump
sqlite> .exit

mv .svn/wc.db .svn/wc-corrupt.db
sqlite3 .svn/wc.db

sqlite> .read dump_all.sql
sqlite> .exit

2
这有助于解决我在使用其他软件时遇到的错误,因此,谢谢您,先生!
Azirius

对我来说,“重新索引节点”命令失败,但是其他解决方法(从转储中创建数据库)对我有帮助!谢谢。
EvAlex

1
我没有把所有的东西都扔掉,但这足够了。通过SQL文件滚动,并改变了最终ROLLBACK;COMMIT;前doung的.read dump_all.sql
Jan Katins

2
这种方法现在似乎因错误而失败svn: E235000: In file 'D:\Development\SVN\Releases\TortoiseSVN-1.9.7\ext\subversion\subversion\libsvn_wc\wc_db_wcroot.c' line 311: assertion failed (format >= 1),但是这里有一种解决方法:hanscarpenter.blogspot.com.au/2016/05/…–
mpeac

断言错误的正确解决方法是:1. sqlite3 .svn/wc.db 'PRAGMA user_version;'对原始数据库运行以获取正确的编号。2. sqlite3 .svn/wc.db 'PRAGMA user_version = XXX;'对具有正确编号的还原版本运行。
年度

18

SVN清理无效。我的本地系统上的SVN文件夹已损坏。因此,我只是删除了该文件夹,重新创建了一个文件夹,然后从SVN更新了该文件夹。那解决了问题!


1
到目前为止,这是最简单的解决方案。获取新的工作副本并使用它:svn co URL。
Jahmic

16

停电后,我遇到了数据库磁盘映像格式错误,并且由于违反了约束,建议的reindex nodes命令不能解决所有问题。另外,http://mail-archives.apache.org/mod_mbox/subversion-users/201111.mbox/%3C874nybhpxi.fsf@stat.home.lan%3E中描述的过程也无法解决问题。

我的解决方案:

  • 再次将svn存储库检出到临时文件夹中
  • 将文件“ .svn / wc.db”从新的结帐复制(即替换)到损坏的文件

如果原始的svn签出包含许多已修改或未版本控制的文件,并且您不想切换到新的svn签出,则这可能很有用。


13

我从同工的目录中复制了.svn文件夹,从而解决了该问题。


在这里,我们还可以仅在同一系统中签出新的工作副本,然后用新的.svn文件夹替换旧的.svn文件夹,并且通过这种方式,我们也可以解决此问题...
Rushabh Shah 2015年

3
  1. 在另一个地方查看此svn
  2. 显示隐藏的.svn文件
  3. 替换wc文件

这对我有用!


2

也许是一个解决方案:

  1. 右键单击项目
  2. 团队->断开连接
  3. 选择:也删除...

现在,再次重新连接:

  1. 右键单击项目
  2. 团队->分享项目
  3. 选择您的repositorie:我的SVN(其他情况:git等)
  4. 选择你的repositorie文件夹

注意:

就我而言,我备份了文件。(安全ur back:P)

编辑:

我在谈论SVN插件Eclipse:)


1

您在Subversion网站上看到过此帖子吗?您也可以按照此处所述直接尝试验证和“修复”数据库。(请注意,我不是专家,我只是在Google上进行了快速搜索。可能根本与您的问题无关)。

就个人而言,我将尝试再次签出该存储库并重新应用您的更改。不确定您是否可以这样做?


谢谢,让我看看你的建议。
鲁本斯·马里努佐

再次检查是我最终要做的事情,绝对是最简单的解决方案(取决于重新应用的更改^^)
elgui

我的情况并不能解决问题,只是在Tortoise SVN中引起了更多错误。
komorra

1

在整个研究过程中,我发现了2种可行的解决方案。

  1. 如果您使用任何类型的连接,那么ssh,samba,安装,断开/卸载和重新连接/重新安装。再试一次,这通常为我解决了问题。之后,您可以进行svn清理或仅继续正常工作(取决于问题出现的时间)。重新启动计算机也可以解决此问题,是的,我知道这很愚蠢!

  2. 有时要做的只是对文件rm -rf(或者,如果您不熟悉该术语,只需删除svn文件夹),然后再次重新签出svn存储库。请注意,这并不总是能解决问题,并且您可能还会有不想丢失的更改。这就是为什么我将其用作第二个选项。

希望这对你们有帮助!


1

我解决了视觉SVN服务器rep-cache.db损坏的问题。

他们是两个解决方案。

停止Visual SVN服务器服务。

从sqllite网站下载sqllite3.exe shell,然后将其复制到repo的db文件夹中。

在仓库的db文件夹中的命令提示符处键入以下命令。

-第一个解决方案-

sqlite3 rep-cache.db

.clone rep-cache-new.db

按ctrl + c退出sqllite。

ren rep-cache.db rep-cache-old.db

ren re-cache-new.db rep-cache.db

-第二解决方案-

删除rep-cache.db

del rep-cache.db

它将自动创建。


谢谢穆罕默德-只是我需要的线索!需要确定问题是出在工作副本中的sqlite数据库还是服务器上的sqlite数据库。在命令行上尝试提交-如果文件已成功传输,并且在“提交事务”时发生错误,则问题可能出在服务器端。穆罕默德的决议在这里像是一种魅力。这个旧的listserve存档具有更多详细信息:svn.haxx.se/users/archive-2010-12/0257.shtml
powderflask

1

我通过删除隐藏的.svn文件夹,然后对该文件夹执行到同一URL的签出操作,来解决此问题。

这不会覆盖我的任何修改文件,而只是对所有现有文件进行版本控制,而不是从服务器中获取新副本。


1

不要浪费时间checking integrity或从中删除数据work queue表表中因为这是临时解决方案,过一会儿您就会被打回。

只需再做一次,checkout然后用新文件夹替换现有的.svn文件夹即可。做一个update,然后它应该会顺利。



0

根据颠覆清除,标记的答案可能是正确的答案。但是错误绝对是一个普遍的错误,这导致我在此提问页面。

我们的项目具有依赖项System.Data.SQLite,并且错误消息相同:

数据库磁盘映像格式错误

就我而言,我已经通过SQLiteStudio 3.1.1执行了以下检查脚本和以下内容。

pragma integrity_check

(我不知道这些统计信息是否会有所帮助,但无论如何我都会分享它们……)

通过内存上的连接日志模式,DataBase文件每天使用1.5年,它的大小约为750 MB。每张表大约有140K条记录,而6张表是如此之大。

执行完整性检查脚本后,执行30分钟后返回了11行。

wrong # of entries in index sqlite_autoindex_MyTableName_1
wrong # of entries in index MyOtherTableAndOrIndexName_1
wrong # of entries in index sqlite_autoindex_MyOtherTableAndOrIndexName_2
etc...

所有结果均与指标有关。在重新构建每个索引之后,我的问题得以解决。

reindex sqlite_autoindex_MyTableName_1;
reindex MyOtherTableAndOrIndexName_1;
reindex sqlite_autoindex_MyOtherTableAndOrIndexName_2;

重新索引后,完整性检查结果为“ ok”。

去年我遇到了这个错误,我从备份中还原了数据库,然后重新提交了所有更改,这真是一场噩梦...

我希望这个答案能有所帮助。


-1

无需担心目录锁定人员。

您只需要做的是,如果未安装sqllite3,请输入以下命令,

>sudo apt-get install sqlite3

通过键入以下命令打开SVN数据库,

>sqlite3 .svn/wc.db 

现在,您需要做的就是从SVN DB中删除锁条目。

sqlite>  select * from wc_lock;
1|-1           
sqlite>  delete from wc_lock;
sqlite>  select * from wc_lock;
sqlite>  .q

流程完成。您可以在SVN存储库上工作,进行提交,更新,添加,删除操作而不会出现问题。

:-)


-2

在应用程序开发期间,我发现消息来自频繁且大量的INSERT和UPDATE操作。确保在一个操作中插入和更新多行或数据。

var updateStatementString : String! = ""

for item in cardids {

let newstring = "UPDATE "+TABLE_NAME+" SET pendingImages = '\(pendingImage)\' WHERE cardId = '\(item)\';"
            updateStatementString.append(newstring)

        }


        print(updateStatementString)
        let results = dbManager.sharedInstance.update(updateStatementString: updateStatementString)

        return Int64(results)

-4

cd到包含.svn的文件夹

rm -rf .svn
svn co http://mon.svn/mondepot/ . --force
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.