通过Mac网络的SQLite中出现“数据库已锁定”错误

zengzsys  于 2022-11-15  发布在  SQLite
关注(0)|答案(5)|浏览(198)

我已经使用SQLite(实际上是PySQLite)创建了一个简单的数据库。当我从本地机器(即Windows机器驱动器上的程序和数据库文件)查询或写入数据库时,它工作得很好。然而,当我将数据库文件复制到我的网络驱动器(时间胶囊)时,那么Windows计算机,尽管它们可以看到文件并对驱动器拥有完全的读/写访问权限,但即使在执行简单的SELECT时,也会给我一个“SQL错误:数据库已锁定”!
Mac上的查询在网络上运行得很好。
没有花哨的多路访问--只有一台机器打开了数据库。看起来像是一些奇怪的Mac网络问题。在Python程序中或在SQLite3命令行中发生。我正在使用SQLite 3.6.14.2。
有人见过这个问题吗?有什么办法修好它吗?我真的不想对MySQL过重,因为这是一个简单的单用户程序,但我想在多台机器上使用它。
谢谢。

vojdkbi0

vojdkbi01#

我不知道这是否可以在Mac上完成,在Debian上,我必须使用nobrl选项挂载samba目录。
从mount t.cif(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).
relj7zay

relj7zay2#

阅读SQLite常见问题解答:http://www.sqlite.org/faq.html#q5
“对Windows有很多经验的人告诉我,网络文件的文件锁定问题很大,而且不可靠。如果他们说的是真的,在两台或更多Windows计算机之间共享一个SQLite数据库可能会导致意想不到的问题。”
所以它在Windows上不起作用,它不会告诉你关于Mac的信息。

qij5mzcb

qij5mzcb3#

可能它无法通过网络锁定文件,我认为您使用的是SMB协议,所以错误随包而来。如果您想通过网络使用SQLite,请参见SQLite Network以获得替代方案。

ryevplcw

ryevplcw4#

我也遇到过类似的问题,我通过安装较新的SQLite版本解决了这个问题。从Python2.6开始,这个问题也消失了,因为它使用了更新的SQLite DLL。

js81xvg6

js81xvg65#

谢谢你卡洛斯。Cherrytree依赖于SQLite,由于某种原因,它最近停止使用我装载的samba安装的SQLite数据库文件,并抱怨数据库被锁定。在我的ubuntu fstab条目中添加“nobrl”解决了这个问题。
//192.168.3.122/Files/mnt/Files cif用户名=PUBLIC,PASSWORD=asdf,rw,nperm,nobrl 0 0

相关问题