On Wed, 27 Mar 2013 19:44:12 +0100, Luca Mandolesi wrote:
Il database è usato da un solo utente e il problema si è presentato
dopo aver provato ad aggiungere una tabella col plugin Qspatialite;
pochi secondi prima ne avevamo aggiunte altre senza problemi.
se e' veramente come dici, allora sembrerebbe un problema tutto
interno al connector Python (pysqlite, oppure pyspatialite).
torna abbastanza bene; infatti io che non uso mai Python ma uso
direttamente le API C/C++ non ho mai visto nulla di simile.
nota bene: se usi pyspatialite erano gia' state sollevati numerosi
dubbi sulla sua effettiva stabilita', visto che pare che in molti casi
venga distribuita una versione che incorpora una "copia interna" di
libsqlite (possibilmente diversa dalla libsqlite di sistema).
non so darti ulteriori dettagli (pyspatialite, a dispetto del nome,
si basa su spatialite ma non e' "roba mia").
Ecluderei che questo possa accadere su Debian, visto che ha due packagers
"belli tosti" come Frankie e Dapal, che sono due vecchie rocce ![:slight_smile: :slight_smile:](/images/emoji/twitter/slight_smile.png?v=12)
Ho provato a seguire i comandi di recover usati nel link
soprastante... e il database torna a funzionare con un nuovo nome tipo
recovered.db.
Ora non ho modo di verificare il problema del log, domani verifico.
Cmq pare che tutto sia strettamente legato al nome del file, dato che
modificandolo torna a funzionare.
pare decisamente la conferma di un problema legato al logfile.
l'associazione tra db-file e log-file ovviamente avviene perche' hanno
nomi direttamente correlati.
se tu rinomini il db-file ottieni sostanzialmente lo stesso risultato come
se tu cancellassi il log-file; in ogni caso spezzi il legame tra i due,
perche' ovviamente verrà creato un ulteriore log-file "vergine" corrispondente
al nuovo nome, mentre l'altro verra' del tutto ignorato.
Nonappena riuso il vecchio nome l'errore riappare.
direi che questo ci toglie anche gli ultimi dubbi residui, no ?
qualcosa di malefico e' sicuramente accaduto a quel disgraziato log-file ![:slight_smile: :slight_smile:](/images/emoji/twitter/slight_smile.png?v=12)
giusto per completezza: non appena SQLite tenta di modificare il DB (INSERT,
UPDATE, DELETE, CREATE etc) col cavolo che va a scrivere direttamente nel
DB-file. non puo' farlo, perche' e' ACID e transazionale.
quindi tutte le modifiche vengono temporaneamente scritte nel log-file;
solo quando ti decidi ad eseguire una COMMIT, finalmente le modifiche vengono
consolidate definitivamente nel DB-file, ed il log-file verra' cancellato dato
che non serve piu' a nulla.
cosa succede se per qualche motivo il sistema si blocca all'improvviso mentre
hai una qualche transazione sospesa ?
(abort secco, p.es. caduta di alimentazione elettrica).
e' abbastanza ovvio: quando andrai a riaprire una nuva connessione, per prima
cosa SQLite andra' a verificare se esiste un log-file corrispondente.
e cerchera' di utilizzarlo per riportare comunque il db-file in uno stato
pienamente consistente.
se per qualsiasi motivo (come sta accadendo a te) SQLite non riesce a leggere
correttamente il log-file sei in stallo matto; la connessione non potra' mai
andare a buon fine, ed il problema diventera' perfettamente ciclico.
ciao Sandro
--
Il messaggio e' stato analizzato alla ricerca di virus o
contenuti pericolosi da MailScanner, ed e'
risultato non infetto.