Che cos'è il formato di file LDF?
Un file .ldf è un Transaction Log File creato da Microsoft SQL Server per registrare ogni modifica apportata a un database prima che tali modifiche vengano scritte su disco. Implementa una strategia di logging «write-ahead»: SQL Server scrive prima un record di log, quindi applica la modifica corrispondente alle pagine di dati.
Ogni .ldf funge da compagno associato a un file di dati primario .mdf. Senza un file di log integro, il database non può essere avviato; l'eliminazione o la perdita di un .ldf al di fuori delle procedure controllate può rendere un database irrecuperabile.
Internamente, il log è diviso in Virtual Log Files (VLF) - segmenti fissi che SQL Server alloca e riutilizza in modo circolare. Ogni record di log porta un Log Sequence Number (LSN) univoco, un valore di 10 byte che codifica il numero del file, l'offset del blocco e lo slot all'interno di un blocco di log da 512 byte. La catena LSN è ciò che il motore segue durante il ripristino post-crash per rifare le transazioni confermate e annullare quelle incomplete.
Il formato .ldf supporta diverse funzionalità critiche di SQL Server:
- Ripristino post-crash - riesecuzione o rollback delle transazioni in corso dopo uno spegnimento imprevisto
- Ripristino a un punto nel tempo - utilizzato insieme a un backup completo .bak e ai backup del log .trn sotto il modello di recupero FULL
- Replicazione e Change Data Capture (CDC) - lettura delle modifiche confermate direttamente dal log
Il formato è binario proprietario senza «magic bytes» documentati pubblicamente e non può essere aperto manualmente. Strumenti di terze parti come ApexSQL Log o Redgate SQL Log possono decodificare i record di log per scopi di auditing o forensi. A partire da SQL Server 2017, i file .ldf sono supportati in modo identico su Linux e nei container Docker insieme ai file di dati secondari .ndf.
Sicurezza e incolumità
RISCHIO: MEDIUMIl file è un dato, non un eseguibile, quindi non comporta rischi diretti di malware. Il vero pericolo è operativo: l'eliminazione o lo scollegamento di un .ldf da un database attivo o in stato «suspect» può causare la perdita di dati o rendere il database irrecuperabile, e la creazione di un database senza il suo log (o con un log ricostruito) perde le transazioni in corso. Non modificare mai manualmente un .ldf. Se il log è enorme, riducilo nel modo supportato (backup del log, quindi DBCC SHRINKFILE) invece di eliminarlo. I log crittografati con TDE richiedono il certificato/chiavi del database per il ripristino.
Dettagli del formato
in sintesiProgrammi che aprono file LDF
Dettagli tecnici
specifiche approfondite| Codifica | Binario, little-endian |
| Struttura del contenitore | Sequenza di Virtual Log Files (VLF); SQL Server alloca e riutilizza i VLF in uno schema circolare man mano che lo spazio del log viene liberato |
| Unità record di log | Record di log a lunghezza variabile impacchettati in blocchi di log da 512 byte |
| Identificatore record | Log Sequence Number (LSN) - un valore di 10 byte che codifica il numero del file di log, l'offset del blocco nel file e il numero dello slot nel blocco |
| Riutilizzo circolare | Lo spazio del log viene recuperato e riutilizzato una volta che la parte attiva non è più necessaria - dopo un checkpoint nel modello SIMPLE o un backup del log nel modello FULL |
| Supporto modelli di recupero | Il comportamento varia in base al modello di recupero di SQL Server: SIMPLE (tronca automaticamente al checkpoint), BULK-LOGGED (logging minimo per operazioni massive), FULL (il log cresce fino a quando non viene eseguito un backup del log) |
| File di dati associato | Sempre accoppiato con almeno un file di dati primario `.mdf`; i file di dati aggiuntivi utilizzano l'estensione `.ndf` |
| Dimensione massima file | Fino a 2 TB per file di log su Windows NTFS/ReFS; un singolo database può avere più file `.ldf`, ciascuno soggetto a questo limite |
| Crittografia | Non crittografato per impostazione predefinita; crittografato automaticamente quando la Transparent Data Encryption (TDE) è abilitata sul database |
| Compressione | Il file `.ldf` stesso è memorizzato non compresso; i backup del log scritti in file `.trn` o `.bak` possono utilizzare la compressione backup di SQL Server |
| Checksum / integrità | Rilevamento torn-page opzionale e checksum di pagina configurabili a livello di database; il motore convalida la catena LSN a ogni ripristino |
| Auto-crescita | SQL Server espande automaticamente il file `.ldf` quando si riempie; l'incremento di crescita è configurabile in MB fissi o in percentuale; un'eccessiva auto-crescita in piccoli incrementi causa la frammentazione dei VLF e un ripristino più lento |
| Vincolo versione interna | Il formato è legato alla versione del motore SQL Server e al livello di compatibilità del database; SQL Server 2022, ad esempio, utilizza la versione interna del database 904 |
| Supporto piattaforma OS | Windows (tutte le versioni moderne di SQL Server); Linux e container Docker (SQL Server 2017 e versioni successive tramite SQL Server on Linux) |
| Tipo MIME | application/octet-stream (nessun tipo MIME dedicato registrato per questo formato) |
| Accesso diretto | Non destinato all'apertura o al parsing diretto; accessibile tramite il collegamento al motore SQL Server, i comandi RESTORE DATABASE o lettori di log di terze parti come ApexSQL Log o Redgate SQL Log |
| Rilasciato | Microsoft SQL Server (log architecture present since the Sybase-derived 4.x/6.x era, 1990s) |
| Ultima versione | Format tied to the database compatibility/engine version (e.g. SQL Server 2022, internal db version 904) |
| Specifica | learn.microsoft.com |
Conversioni LDF
Domande e risposte della community
chiesto dagli utentiAncora nessuna domanda - sii il primo a chiedere informazioni sui file LDF.