用于SQLite的数据库浏览器上的错误-数据库浏览器崩溃时……“无法打开数据库文件。原因:尝试编写一个只读数据库”

问题描述 投票:0回答:1

Error message screen-shot 我使用数据库浏览器在SQLite上创建了一个大型数据库...,突然数据库浏览器崩溃了。崩溃后出现此错误:

“无法打开数据库文件。原因:尝试写入只读数据库”

附有屏幕截图。我在Stackoverflow上进行了搜索...但是我无法弄清楚如何授予权限以避免DB锁定?逐步执行此操作的任何帮助都将非常有帮助...。因为我不熟悉SQLite和数据库浏览器。

RgdsVij

sqlite
1个回答
0
投票

通常,当您收到这样的错误时,它表明另一个进程正在积极使用数据库并对其进行锁定。鉴于您说过您的程序崩溃,我推测它上的锁从未正确释放。

要回答您的问题,IRT如何“忽略”锁:你不能关系数据库被设计为在事务开始时一直锁定,一直到提交为止(如果事务出错,则回滚,例如说...程序崩溃)。这是为了确保ACID(原子性,一致性,隔离性,耐久性)而设计的,这几乎是RDBM的基础。如果绕过DBlock琐碎,那么到处都会遇到数据错误。锁定的全部目的是确保程序要放入数据库的内容被放入其中,而不会受到试图同时访问完全相同的资源的其他线程/程序/等的干扰。

但是。。。不是所有的火和硫磺。如果没有,请下载Microsoft Process Explorer,它基本上是类固醇上的任务管理器。使用该工具,您可以查明进程可能在DB文件本身上拥有的任何文件保留,并删除该保留。然后,SQLlite将在下一次连接到数据库时回滚所有未完成的事务,您应该一切顺利。

参见此处:https://www.sqlite.org/howtocorrupt.html

这里是IRT SQLite3的锁定机制的很好参考:https://www.sqlite.org/lockingv3.html

© www.soinside.com 2019 - 2024. All rights reserved.