SQL网络上的“数据库被锁定”错误

时间:2009-05-25 20:41:20

标签: sqlite file-locking

我使用SQLite(实际上是PySQLite)创建了一个简单的数据库。当我从本地机器(即Windows机器驱动器上的程序和数据库文件)查询或写入数据库时​​,它工作正常。但是,当我将数据库文件复制到我的网络驱动器(一个时间胶囊),然后Windows机器,虽然他们可以看到文件并具有对驱动器的完全读/写访问权限,但给我一个“SQL错误:数据库被锁定”甚至在进行简单的选择时!

从Mac上通过网络查询工作正常。

没有花哨的多次访问 - 只有一台机器打开了数据库。看起来像一些奇怪的Mac网络问题。发生在Python程序或SQLite3命令行中。我正在使用SQLite 3.6.14.2。

有人看过这个问题吗?有什么方法可以解决它吗?不想真的想用MYSQL,因为这是一个简单的单用户程序,但我想从多台机器上使用它。

感谢。

4 个答案:

答案 0 :(得分:3)

我不知道是否可以在MAC上完成,在Debian上我必须使用 nobrl 选项安装samba目录。

来自mount.cifs(8):

  nobrl
      Do not send byte range lock requests to the server. This is
      necessary for certain applications that break with cifs
      style mandatory byte range locks (and most cifs servers do
      not yet support requesting advisory byte range locks).

答案 1 :(得分:2)

阅读sqlite常见问题解答:http://www.sqlite.org/faq.html#q5

  

“有很多经验的人   用Windows告诉我文件锁定   网络文件是非常错误的   不可靠。如果他们说的是   是的,共享一个SQLite数据库   两台或多台Windows机器之间   可能会导致意想不到的问题。“

所以它在Windows上不起作用,它没有告诉MAC。

答案 2 :(得分:1)

可能无法通过网络锁定文件,我认为您使用SMB协议,因此包装会出现问题。如果您想通过网络使用SQLite,请参阅SQLite Network了解替代方案。

答案 3 :(得分:0)

I've had a similar problem我通过安装更新​​的sqlite版本解决了这个问题。从Python 2.6开始,问题也消失了,因为它使用了更新的sqlite dll。