我有一个sqlite3数据库,需要读取(不能写入)坐在只读文件系统上。还有一个与数据库相关的-journal文件,它干扰打开数据库,因为sqlite代码想要做的第一件事是删除该-journal文件,并且它不能因为该文件系统是只读的。将journal_mode设置为off不会有帮助,因为这显然只适用于新事务。有没有办法告诉sqlite3简单地忽略与数据库关联的-journal文件的所有提及?使用-journal文件在只读文件系统上打开sqlite3数据库
2
A
回答
3
不幸的是没有。
问题是日志文件的存在表明事务处于未完成状态,需要通过将日志文件的内容传回数据库文件来回退。
这需要对文件系统的写入权限,并且SQLite将不允许您在不执行此回滚的情况下打开文件。
你可以阅读更多关于此这里:Read-Only Databases:
没有SQLite数据库(不论它是否是WAL模式)是可读的,如果它位于只读介质,它需要恢复。因此,例如,如果应用程序崩溃并使用热日志保留SQLite数据库,则除非打开过程对数据库文件,包含数据库文件的目录和热日志具有写权限,否则无法打开该数据库。这是因为在读取数据库之前必须回滚崩溃遗留的未完成事务,并且如果没有对所有文件和包含它们的目录的写入权限,则无法执行回滚。
如果您不关心丢弃日志文件可能导致的损坏情况,则可以复制数据库文件并留下日记。但是,如果您有能力这样做,我实际上也会将日志文件复制到可写入的文件系统,然后像平常一样打开该数据库,这将正确地回滚事务。
只读文件系统上的副本虽然在当前状态下不可用。
相关问题
- 1. 从只读文件系统打开SQL Server CE数据库数据
- 2. sqlite3 - 无法打开数据库文件
- 3. 无法打开数据库文件 - sqlite3?
- 4. sqlite3只读在不支持锁定的文件系统上
- 5. psql:FATAL:无法打开文件“base/11951/11717”:只读文件系统
- 6. getAssets()。打开 - 打开失败:EROFS(只读文件系统)
- 7. Android文件系统:java.io.FileNotFoundException:/ savedArticlesFile:打开失败:EROFS(只读文件系统)
- 8. Android:只读文件系统
- 9. 只读文件系统
- 10. java.io.FileNotFoundException:output.mp4(只读文件系统)
- 11. Flask OperationalError:无法使用sqlite3打开数据库文件
- 12. Heroku只读文件系统上的ActiveScaffold?
- 13. 直接在资产文件夹中打开只读数据库
- 14. java.io.FileNotFoundException:/temp.png:打开失败:EROFS(只读文件系统)
- 15. java.io.FileNotFoundException:打开失败:EROFS(只读文件系统)
- 16. jedit在打开文件时使用键导航文件系统
- 17. 打开文件只读
- 18. 打开文件只读
- 19. Ubuntu非只读文件系统非系统文件
- 20. sqlite3:只读主数据库和附件
- 21. 在数据库vs文件系统上存储xml文件
- 22. 只读从ZIP文件打开数据库而不拆包
- 23. 在另一个系统上解密来自Android的sqlite3数据库文件
- 24. 使用在文件系统上打开xml文件的XSLT创建超链接
- 25. 在Windows文件系统中检测元数据只读请求
- 26. 管理数据库或文件系统中上传的文件?
- 27. SQLite3打开文件问题
- 28. 将文件系统读入数据集
- 29. sqlite3.OperationalError:无法打开数据库文件
- 30. sqlite3.OperationalError:无法打开数据库文件
为什么在文件系统上存在日志文件(如果它是只读的)? –
它是从可写文件系统创建的。 – ericg