Ripara un database SQLite danneggiato — senza caricarlo

«Database disk image is malformed» non significa quasi mai che i tuoi dati siano persi. Significa che una pagina o un puntatore si è rotto e SQLite rifiuta l'intero file. Il recupero analizza le pagine e ricostruisce un database pulito a partire da ciò che è sopravvissuto.

Il tuo database non lascia mai il tuo dispositivo — il recupero avviene nel browser. 0 byte caricati.

Your data is the big block — usually intact. What breaks is the small index. Repair rebuilds it.

Drop a file here or browseTap to choose a file

ZIP · Office · PDF · video · JPG · PNG · RAR/7z · SQLite — repaired right here in your browser. Nothing is uploaded

0 bytes uploadedFree: 3 repairs/day — up to 500 MB video, 100 MB docs & archives, 50 MB photos. Free download. Single repair €5.90. No account required.

Il database non si apre? Recuperalo adesso

  1. Trascina il file .db / .sqlite
  2. Il recupero avviene in locale
  3. Scarica un database nuovo e apribile

Per recuperare un database SQLite malformato non si «ripara» il file rotto sul posto — si legge tutto ciò che è ancora decodificabile e lo si scrive in un database completamente nuovo, esattamente come funziona il comando .recover di SQLite. Tutto questo avviene proprio qui, nel tuo browser: trascina il file qui sopra, la diagnosi mostra cosa è danneggiato e il motore di recupero ricostruisce lo schema e reinserisce ogni riga che riesce a leggere. Non si installa nulla e il database non viene mai caricato.

Gli errori che questo copre

Error: database disk image is malformed (11)

Il classico SQLITE_CORRUPT. Qualcosa nella struttura a pagine del file è incoerente — una pagina B-tree danneggiata, un puntatore di cella errato, un conteggio di pagine che non concorda con la dimensione del file. Il motore si ferma al primo problema che incontra, ma le pagine che non ha mai raggiunto di solito sono integre, e una scansione grezza può estrarne le righe direttamente.

file is not a database

SQLite lo dice quando il numero magico di 16 byte dell'intestazione («SQLite format 3\0») è errato. Due cause molto diverse: i byte dell'intestazione sono stati danneggiati (le pagine che stanno dietro sono spesso intatte e recuperabili), oppure il file è davvero qualcos'altro — o un database cifrato (SQLCipher/SEE), che si legge come rumore ad alta entropia e non può essere recuperato senza la chiave. La diagnosi distingue i due casi.

database or disk is full / malformed database schema

Sintomi derivati dallo stesso danno alle pagine sottostante. Se riaprire il file produce lo stesso errore, le soluzioni sul posto si sono esaurite e una ricostruzione a partire dalle pagine sopravvissute è il passo successivo.

Come si rompe un file SQLite: pagine e puntatori

Un database SQLite è un array piatto di pagine di dimensione fissa (di solito 4 KB ciascuna). La pagina 1 contiene l'intestazione e lo schema; ogni tabella e ogni indice è unB-tree le cui pagine interne puntano verso il basso alle pagine foglia che contengono le tue righe vere e proprie. Il software legge l'intestazione, trova lo schema e poi segue quei puntatori fino ai dati.

I puntatori sono il punto debole. Basta una singola scrittura interrotta, un settore difettoso, una sincronizzazione fermatasi a metà o un bit invertito in una pagina interna e la catena di puntatori si spezza — SQLite si imbatte in un'incoerenza e dichiara malformata l'intera immagine, anche se le tue righe sono ancora lì, intatte, nelle loro pagine foglia. È la stessa storia dell'indice mancante di un video o della directory centrale rotta di uno ZIP: si è rotta la mappa, non i dati.

Ecco perché il recupero funziona: le pagine foglia contengono record autodescrittivi, quindi il motore può percorrere il file pagina per pagina, decodificare le righe che trova e ricostruire i B-tree da zero attorno ad esse. Le righe che i puntatori non riescono a raggiungere vengono individuate con una scansione grezza; le righe che non corrispondono a nessuna tabella conosciuta finiscono in una tabellalost_and_found invece di essere buttate via.

Se hai un file -wal, aggiungilo

I database in modalità WAL preparano le modifiche recenti in un file gemello <nome>-wal finché non vengono consolidate nel database principale. Dopo un crash, i tuoi dati confermati più recenti possono trovarsi solo lì. Trascina prima il .db principale, poi aggiungi il file -wal nell'apposito spazio per i file ausiliari: i suoi frame confermati vengono sovrapposti prima della scansione, così il database recuperato riflette l'ultima transazione confermata anziché l'ultimo checkpoint. È opzionale — il recupero funziona benissimo anche solo con il file principale — ma se hai il file ausiliario, spesso è lì che si trovano le righe più recenti.

Perché il «niente caricamenti» conta per i database

Pensa a cosa contiene davvero un database: account utente, messaggi, cronologia delle posizioni, l'intero stato di un'applicazione. È l'ultimo file che vorresti veder finire sul server di qualcun altro «solo per ripararlo». Gli strumenti di recupero basati sul caricamento lo copiano dalla tua macchina e lo elaborano su un'infrastruttura che non puoi ispezionare. Il recupero nel browser elimina del tutto quel passaggio — il file viene letto dal tuo disco, ricostruito nella tua scheda, e non esiste alcuna copia da nessun'altra parte. Per il lavoro forense (DFIR) sulle prove, questo mantiene intatta anche la catena di custodia: il reperto non lascia mai la postazione di lavoro. Puoi verificarlo nella scheda Rete mentre il recupero è in corso.

Cosa può e cosa non può recuperare

Può recuperare

  • «Database disk image is malformed» a causa di una pagina danneggiata o di un puntatore B-tree
  • Campi dell'intestazione danneggiati (dimensione o conteggio di pagine errati) con pagine intatte dietro
  • File troncati: viene estratta ogni riga presente in una pagina sopravvissuta
  • Righe su pagine che la catena di puntatori non riesce più a raggiungere, tramite una scansione grezza delle pagine
  • Modifiche non consolidate da un file ausiliario -wal fornito

Non può recuperare

  • Righe sovrascritte fisicamente o tagliate via dalla fine — quei dati non esistono più
  • Database cifrati (SQLCipher/SEE) senza la chiave — le pagine sono testo cifrato
  • Le affinità esatte delle colonne: i valori tornano secondo la loro classe di archiviazione su disco
  • Una garanzia di correttezza — i dati recuperati sono sempre sospetti; verificali
  • File da 0 byte: quello è prima di tutto un problema di recupero dati del dispositivo di archiviazione

Il report di recupero elenca ciò che è uscito da ogni tabella, segnala le righe estratte dalla scansione grezza o scartate perché non decodificabili, e un recupero fallito non viene mai addebitato.

Domande frequenti

Cosa significa «database disk image is malformed»?

È l'errore SQLITE_CORRUPT di SQLite (codice di risultato 11): il motore ha seguito un puntatore all'interno del file e ha trovato qualcosa che non è una pagina B-tree valida — una pagina azzerata, un offset di cella errato, una pagina che punta oltre la fine del file. Non significa che tutte le righe siano perse. In pratica una singola pagina danneggiata o un campo dell'intestazione errato manda giù l'intero file, mentre il resto delle tue tabelle resta lì intatto. Il recupero percorre le pagine direttamente, ricostruisce lo schema e reinserisce ogni riga che riesce ancora a decodificare in un database completamente nuovo — la stessa strategia del comando .recover di SQLite.

Si può davvero recuperare un database SQLite danneggiato nel browser?

Sì. Trascina il file .db (o .sqlite/.sqlite3) qui sopra. Lo scanner delle pagine è TypeScript puro e viene eseguito interamente nella tua scheda: legge ogni pagina in locale, ricostruisce lo schema, percorre il B-tree di ogni tabella e ricorre a una scansione grezza delle pagine, senza puntatori, per tutto ciò che il B-tree non riesce a raggiungere. Le righe che non si possono attribuire a una tabella conosciuta vengono collocate in una tabella lost_and_found invece di essere scartate. Il risultato è un file di database nuovo e apribile che scarichi. Nessun concorrente offre il recupero di SQLite lato browser — la maggior parte ti obbliga a caricare il file su un server.

Cos'è il file -wal e mi serve?

SQLite in modalità WAL (write-ahead logging) mantiene le modifiche recenti in un file gemello chiamato -wal finché non vengono consolidate (checkpoint) nel .db principale. Se la tua applicazione è andata in crash, i dati più recenti potrebbero trovarsi solo in quel file -wal. Se ce l'hai, aggiungilo nell'apposito spazio per i file ausiliari dopo aver trascinato il database: i suoi frame confermati vengono sovrapposti prima della scansione, così il recupero riflette l'ultima transazione confermata. Nessun -wal? Il recupero viene comunque eseguito sul file principale — semplicemente non vedrai le modifiche che non sono mai state consolidate.

È sicuro passare il mio database attraverso uno strumento di riparazione online?

Un database è spesso la cosa peggiore da consegnare a un server che non controlli: può contenere ogni record utente, messaggio o credenziale che la tua applicazione abbia mai memorizzato. Gli strumenti basati sul caricamento copiano quel file sulla loro infrastruttura, secondo termini di conservazione che non hai scritto tu. Qui non viene caricato nulla — il file viene letto dal tuo disco e ricostruito nel tuo browser, e puoi controllare la scheda Rete per confermare che vengono trasmessi 0 byte.

Quali app salvano i dati in SQLite, così so se mi riguarda?

Quasi tutto. Le app iOS e Android, i browser (cronologia, cookie, archiviazione delle estensioni), Signal e altri messenger, le app per le note, i client di posta, i cataloghi di Lightroom e innumerevoli strumenti desktop conservano tutti i loro dati in database SQLite — spesso con estensione .db, .sqlite, .sqlite3 o specifica dell'applicazione. Se uno strumento dice che il suo database è danneggiato, «malformed» o «not a database», questa pagina fa per te. Gli analisti DFIR si imbattono negli stessi file quando estraggono reperti da un'immagine di disco.

Perché non possono tornare tutte le righe?

Prima l'onestà: i dati recuperati da un database danneggiato sono sempre sospetti — lo dice la documentazione stessa di SQLite, e dovresti contrastarli con una fonte affidabile prima di fidartene. Tutto ciò che è stato fisicamente sovrascritto o tagliato via dalla fine del file è perso; nessuno strumento può inventarlo. I valori tornano secondo la loro classe di archiviazione su disco, quindi il tipo di una colonna può cambiare. E poiché la scansione legge le pagine della freelist e quelle non compattate, le righe eliminate in precedenza possono riaffiorare. Il report di recupero ti dice esattamente cosa è successo, tabella per tabella.

Correlati: il foglio di calcolo non si apre — ripara i file di Excel · il documento non si apre — ripara i file PDF · l'archivio non si estrae — ripara i file ZIP ·verifica la promessa dei zero caricamenti