我有一个关于sqlite3数据库的问题,它在某次访问后仍然被锁定/无法访问。
该行为迄今发生在Ubuntu 10.4和自定义(OpenEmbedded)Linux上。sqlite版本为3.7.7.1)。Db是一个本地文件。
一个C++应用程序定期(5秒钟)访问db。每次执行多个插入语句并包装在延迟事务中。这只在一个线程中发生。与db的连接在整个应用程序的生命周期内保持打开状态。使用的语句也是持久的,并通过
然后我同时使用sqlite命令行工具打开sqlite db。我输入
此后,应用程序的db访问失败:
有人有想法如何解决这个问题或者有什么可能导致它的想法吗?
编辑:有一个解决方法:如果出现上述错误,我关闭并重新打开db连接。这解决了问题,但我目前不知道原因。
该行为迄今发生在Ubuntu 10.4和自定义(OpenEmbedded)Linux上。sqlite版本为3.7.7.1)。Db是一个本地文件。
一个C++应用程序定期(5秒钟)访问db。每次执行多个插入语句并包装在延迟事务中。这只在一个线程中发生。与db的连接在整个应用程序的生命周期内保持打开状态。使用的语句也是持久的,并通过
sqlite3_reset
重复使用。sqlite_threadsafe设置为1(串行化),日志记录设置为WAL。然后我同时使用sqlite命令行工具打开sqlite db。我输入
BEGIN IMMEDIATE;
,等待>5s,然后使用END;
提交。此后,应用程序的db访问失败:
BEGIN TRANSACTION
返回代码1(“SQL错误或缺少数据库”)。如果我在开始之前执行ROLLBACK TRANSACTION
,只是为了确保没有已经存在的活动事务,则返回代码5(“数据库文件被锁定”)。有人有想法如何解决这个问题或者有什么可能导致它的想法吗?
编辑:有一个解决方法:如果出现上述错误,我关闭并重新打开db连接。这解决了问题,但我目前不知道原因。