Su Windows:
tl; dr: Prova ad aprire di nuovo il file.
Il nostro sistema stava soffrendo di questo problema, e sicuramente non era un problema di autorizzazioni, dal momento che il programma stesso sarebbe stato in grado di aprire il database come scrivibile da molti thread la maggior parte del tempo, ma occasionalmente (solo su Windows, non su OSX), un thread otterrebbe questi errori anche se tutti gli altri thread nel programma non avevano difficoltà.
Alla fine abbiamo scoperto che i thread che stavano fallendo erano solo quelli che stavano cercando di aprire il database immediatamente dopo che un altro thread lo aveva chiuso (entro 3 ms). Abbiamo ipotizzato che il problema fosse dovuto al fatto che Windows (o l'implementazione sqlite in Windows) non sempre ripulisce immediatamente le risorse file alla chiusura di un file. Abbiamo aggirato questo problema eseguendo una query di scrittura test contro il db all'apertura (ad es., Creando quindi una tabella con un nome stupido). Se la funzione di creazione/rilascio non è riuscita, abbiamo aspettato per 50 ms e ci ha provato di nuovo, ripetendo finché non ci siamo riusciti o trascorsi 5 secondi.
Ha funzionato; a quanto pare c'era solo bisogno di tempo sufficiente per le risorse da svuotare sul disco.
fonte
2017-06-22 21:32:33
L'utente che esegue sqlite3 (o qualsiasi altra cosa si utilizzi per eseguire la query) ha i permessi di scrittura sul db? Hai ricontrollato la proprietà del file? –
Sono sicuro che hanno il permesso di farlo. – user143482
L'ho visto in un'app web in cui mi sono dimenticato di impostare il GID sul file del database e l'account "www-data" (che Apache funziona sotto) è stato rifiutato l'accesso in scrittura al file. – finnw