[Gfoss] Spatialite e Qspatialite: Messaggio di Errore sotto Debian Linux - SQL error. Database is locked

a.furieri a lqt.it a.furieri a lqt.it
Mer 27 Mar 2013 16:54:09 CET


On Wed, 27 Mar 2013 15:30:23 +0100, Luca Mandolesi wrote:
> Salve a tutti, stiamo facendo un corso di Qgis e stiamo provando ad
> utilizzare spatialite.
> Dopo aver creato con successo una tabella, successivamente abbiamo
> provato a crearne una nuova e abbiamo iniziato a ricevere SQL error.
> Database is locked.
>
> Abbiamo provato a chiudere sia QGis che spatialite-gui e anche a
> Riavviare la macchina, ma il database rimane bloccato.
>

Luca,

sinceri rallegramenti; e' la prima volta in assoluto che sento una
roba del genere, direi state esplorando frontiere ancora ignote alla
scienza ufficiale :-)

giusto per curiosita': quali versioni di sqlite / qgis ?
ma soprattuto: su quale sistema operativo ?

N.B.: SQLite non e' minimamente pensato per gestire accessi concorrenti
in scrittura.
detto in soldoni: e' bene che un unico processo alla volta cerchi di 
fare
delle operazioni di scrittura. tanto a maggior ragione se le 
connessioni
avvengono usando due librerie distinte che appartengono a due diverse 
versioni
di SQLite.
quello che e' invece ragionevole e' *leggere* un medesimo DB-file da 
parte
di molti processi concomitanti; ma deve trattarsi appunto di pure 
operazioni
di lettura senza alcuna scrittura (come ovviamente non e' per una 
CREATE TABLE).

insomma, se gli accessi concorrenti sono un prerequisito 
indispensabile, usare
sqlite / spatialite e' assolutamente fuori discussione: in questi casi 
occorre
evidentemente usare un DBMS client/server come PostgreSQL.

il punto piu' sconcertante e' che il DB-file resti bloccato anche dopo 
che
hai riavviato il sistema.
per quanto a mia conoscenza, SQLite si basa per intero sul locking di 
sistema,
e quindi evidentemente non puo' lasciare tracce di sorta dopo un 
reboot.

quindi ritengo molto piu' probabile che il problema sia piuttosto nel 
logfile:
se guardi bene, vedrai che ogni volta che apri in 
scrittura/aggiornamento un
DB SQLite nella medesima cartella appare magicamente un logfile che ha 
un
nome strettamente analogo a quello del DB-file.

- se lo trovi, prova a cancellarlo manualmente; magari puo' servire a 
ripristinare
   correttamente il funzionamento del tuo DB (ovviamente perderai le 
ultime modifiche).
- se invece non esiste, temo che l'unica spiegazione ragionevole e' 
quella di
   presumere che una qualche dissennata interazione tra due versioni 
contrastanti
   della libsqlite abbia finito per danneggiare fisicamente il DB-file.
   in questo caso puoi sempre provare ad usare lo strumento analyzer di 
SQLite
   per avere ulteriori lumi. lo trovi qua: 
http://www.sqlite.org/download.html

ciao Sandro

-- 
Il messaggio e' stato analizzato alla ricerca di virus o
contenuti pericolosi da MailScanner, ed e'
risultato non infetto.



Maggiori informazioni sulla lista Gfoss