在Mac网络中使用SQLite时出现“数据库被锁定”错误

3

我使用SQLite(实际上是PySQLite)创建了一个简单的数据库。当我从本地机器查询或写入数据库时(即程序和数据库文件在Windows机器驱动器上),它可以正常工作。然而,当我将数据库文件复制到我的网络驱动器(时间胶囊)时,尽管Windows机器可以看到文件并完全读/写访问该驱动器,但即使执行简单选择时也会出现“SQL错误:数据库已锁定”!

来自Mac的查询在网络上正常工作。

没有花哨的多用户访问 - 只有一台机器打开了数据库。似乎是一些奇怪的Mac网络问题。无论是在Python程序中还是在SQLite3命令行中都会发生。我正在使用SQLite 3.6.14.2。

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

谢谢。

5个回答

6

我不知道在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).

2

请阅读sqlite FAQ:http://www.sqlite.org/faq.html#q5

“有很多在Windows上有丰富经验的人告诉我,网络文件的文件锁定非常不稳定,不可靠。如果他们所说的是真的,那么在两台或更多Windows机器之间共享SQLite数据库可能会导致意想不到的问题。”

因此,在Windows上无法使用,对于MAC没有提及。


1

可能它无法在网络上锁定文件,我认为您使用的是SMB协议,因此错误随之而来。如果您想在网络上使用SQLite,请参考SQLite Network以获取替代方案。


0

谢谢Carlos。Cherrytree依赖于SQLite,但由于某种原因,它最近无法使用我通过Samba挂载的SQLite数据库文件,抱怨数据库被锁定。在我的Ubuntu fstab条目中添加"nobrl"解决了这个问题。

//192.168.3.122/Files /mnt/Files cifs username=public,password=asdf,rw,noperm,nobrl 0 0


这不是答案,而是评论:您可能还没有足够的声望来评论别人的帖子,但这是未来需要记住的事情。 - Barry the Platipus

0

我曾经遇到过类似的问题,但是通过安装更新版本的sqlite解决了。自从Python 2.6以后,这个问题也消失了,因为它使用了更新的sqlite dll。


希望事情能够如此。遗憾的是,我正在运行最新版本的SQLite。基本上,看起来当Windows客户端查询Mac网络(在我的情况下为Time Capsule)上的文件时,SQLite无法工作。我将尝试使用其他组合方式,例如在Windows或其他* Nix基础设施上运行数据库。 - Thomas Browne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接