首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在包含-journal文件的只读文件系统上打开sqlite3 DB

在包含-journal文件的只读文件系统上打开sqlite3 DB
EN

Stack Overflow用户
提问于 2011-11-01 02:07:42
回答 1查看 5.1K关注 0票数 2

我在一个只读文件系统上有一个需要读取(而不是写入)的sqlite3 DB。还有一个与数据库相关联的-journal文件,它干扰了数据库的打开,因为sqlite代码要做的第一件事就是删除该-journal文件,但由于文件系统是只读的,所以无法删除该文件。将journal_mode设置为off无济于事,因为这显然只适用于新事务。有没有一种方法可以让sqlite3忽略所有提到的与DB关联的-journal文件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-01 23:20:26

不幸的是,没有。

问题是,日志文件的存在表明事务处于不完整状态,需要通过将日志文件的内容传输回数据库文件来回滚。

这需要文件系统的写访问权限,并且SQLite不允许您在不执行回滚的情况下打开文件。

你可以在这里阅读更多信息:Read-Only Databases

如果SQLite数据库位于只读介质上并且需要恢复,则该数据库(无论其是否为WAL模式)都是可读的。因此,例如,如果应用程序崩溃并留下带有热日记帐SQLite数据库,则除非打开进程对数据库文件、包含数据库文件的目录和热日记帐具有写入权限,否则无法打开该数据库。这是因为必须在读取数据库之前回滚崩溃遗留的未完成事务,如果没有对所有文件和包含这些文件的目录的写权限,则无法进行回滚。

如果您不关心丢弃日志文件可能导致的损坏,您可以复制数据库文件,并留下日志。不过,如果您有这样做的能力,我实际上也会将日志文件复制到一个可写的文件系统,并正常打开该数据库,这将正确地回滚事务。

但是,只读文件系统上的副本在其当前状态下不可用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7957778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档