锁定了s3db-journal

时间:2009-08-24 11:38:58

标签: sqlite networking

我们在sqlite上遇到了一个奇怪的错误。我们在网络共享上使用sqlite数据库,其中有几台计算机访问它。我们的客户报告说,数据库已经消失。快速概述显示,数据库仍然存在,但没有计算机可以访问它。它还显示了一个s3db-journal文件,表明有人在发生某些事情时正在访问数据库。奇怪的是 - s3db-journal文件被文件系统锁定(我们无法复制/删除它)。重新启动所有应用程序后,锁定的文件应该会消失。

这是怎么发生的?我们想以某种方式扣除我们的客户如何陷入这种情况。我们知道,其中一台计算机出现了腐败的网络连接。

感谢您的帮助。

托拜厄斯


澄清一下:几个=最多10台计算机

2 个答案:

答案 0 :(得分:0)

从“Appropriate uses for SQLite”页面:

  

如果有许多客户端程序通过网络访问公共数据库,则应考虑使用客户端/服务器数据库引擎而不是SQLite。 SQLite将在网络文件系统上运行,但由于与大多数网络文件系统相关的延迟,性能不会很好。此外,许多网络文件系统实现的文件锁定逻辑包含错误(在Unix和Windows上)。如果文件锁定不能正常工作,则两个或多个客户端程序可能同时修改同一数据库的同一部分,从而导致数据库损坏。因为这个问题是由底层文件系统实现中的错误引起的,所以SQLite无法阻止它。

     

一个好的经验法则是,在通过网络文件系统从多台计算机同时访问同一数据库的情况下,应避免使用SQLite。

很可能是您正在使用的网络文件系统中的错误。无论哪种方式,SQLite开发人员明确建议不要在网络文件系统上使用数据库。

答案 1 :(得分:0)

问题已解决。数据库组件(zeos)引发了异常,我们尝试了回滚。由于组件的设计方式,只有在启动事务时才允许这样做。如果没有,则会获得锁定的s3db-journal文件。

最后我们学到了两件事:当你没有开始交易时永远不会回滚,第二件事 - 来自zeos的函数InTransaction就是这样。