sqlite> DELETE FROM mails WHERE (`id` = 71);
SQL error: database is locked
Comment puis-je déverrouiller la base de données pour que cela fonctionne ?
sqlite> DELETE FROM mails WHERE (`id` = 71);
SQL error: database is locked
Comment puis-je déverrouiller la base de données pour que cela fonctionne ?
Les fichiers SQLite db sont juste des fichiers, donc la première étape serait de s'assurer qu'ils ne sont pas en lecture seule. L'autre chose à faire est de s'assurer que vous n'avez pas une sorte de GUI SQLite DB viewer avec la DB ouverte. Vous pouvez avoir la base de données ouverte dans un autre shell, ou votre code peut avoir la base de données ouverte. Typiquement, vous verrez cela si un autre thread, ou une application telle que SQLite Database Browser a la base de données ouverte pour l'écriture.
J'ai eu ce problème à l'instant, en utilisant une base de données SQLite sur un serveur distant, stockée sur un montage NFS. SQLite n'a pas pu obtenir un verrou après que la session shell distante que j'ai utilisée ait planté alors que la base de données était ouverte.
Les recettes de récupération suggérées ci-dessus n'ont pas fonctionné pour moi (y compris l'idée de déplacer d'abord et de recopier ensuite la base de données). Mais après l'avoir copiée sur un système non-NFS, la base de données est devenue utilisable et aucune donnée ne semble avoir été perdue.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Il se peut qu'un autre processus accède au fichier de la base de données - avez-vous vérifié lsof ?
0 votes
J'ai eu le même problème, le problème était dans l'antivirus quand je le désactive mon application fonctionne bien, mais quand je l'active je trouve l'erreur "la base de données est verrouillée", j'espère que cela va vous aider.