Passa al contenuto

SQL Server: attach di un database senza il file di transaction log

Una miniguida a come ripristinare correttamente e in modo sicuro un database quando si è perso accidentalmente il transaction log.

Introduzione

In SQL Server, il file di transaction log è essenziale per mantenere il database affidabile e durevole. Tiene traccia di ogni modifica e transazione, il che è fondamentale per recuperare i dati se qualcosa va storto.


Sfortunatamente, ci si può trovare in casi nei quali il file di transaction log potrebbe scomparire a causa di un'eliminazione accidentale, un arresto improvviso o un crash del sistema.


L’articolo è una miniguida che illustra i passaggi per poter ripristinare il database quando ci si trova in uno scenario di questo tipo: affrontiamo il caso particolare in cui c’è la necessità di effettuare un restore di un database SQL Server (con modalità attach) avendo il file MDF, senza però essere in possesso del file di transaction log relativo al database e senza un file di backup del database. 


Andiamo quindi riepilogare i passaggi principali per l’esecuzione delle attività sia tramite interfaccia Management Studio sia tramite codice T-SQL. I passaggi illustrati sono validi per SQL Server 2005 e versioni successive. 


Utilizzare Management Studio: attach di un database senza file di transaction log 

1.Collegarsi all’istanza SQL Server tramite interfaccia Management Studio. 

2. Dall’Object Explorer fare click con il tasto destro sulla cartella “Databases” e selezionare “Attach...” come visibile nell’immagine sotto. 

 

3. Si aprirà la finestra “Attach Databases” come visibile nell’immagine sotto. 

 

4. Cliccare sul pulsante “Add...” come visualizzato sopra per aprire la finestra “Locate Database Files”. 

5. Nella finestra “Locate Database Files” cercare e localizzare il file MDF rilevante per il database per cui si vuole fare attach e poi cliccare su OK. Nell’esempio sotto il file è “Magazzino_Storico.mdf”. 

 

6. Nella finestra “Attach Databases” si potrà notare che il file di transaction log non è stato trovato, nell’esempio il file mancante è “Magazzino_Storico_Log.ldf”. Per fare attach del database senza il file di transaction log Magazzino_Storico_Log.ldf è necessario selezionare il file come visibile nell’immagine sotto e fare click sul pulsante “Remove”. È possibile che il file di registro non venga elencato con il messaggio "Not Found", quindi il passaggio di rimozione può essere ignorato. In fine fare clic su OK per allegare il database NomeDB senza il file di registro delle transazioni.  

 

7. L’operazione di attach è stata completata con successo senza file di transaction log. SQL Server creerà un nuovo file di registro delle transazioni nella stessa directory del file MDF. Questo nuovo file di transaction log in genere parte da una dimensione minima, spesso predefinita di 1 MB, e può crescere dinamicamente. 


Utilizzare T-SQL: attach di un database senza file di transaction log 

I DBA possono eseguire lo stesso tipo di operazione vista sopra anche tramite l’utilizzo dei comandi T-SQL

In questo primo script viene utilizzata l'opzione CREATE DATABASE con ATTACH e vengono specificati il nome ed il percorso dei file mdf di cui siamo in possesso per questo database.

USE [master]
GO

CREATE DATABASE [Magazzino_Storico] ON (FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\Magazzino_Storico.mdf')
FOR ATTACH
GO


Una volta eseguito correttamente il codice T-SQL riportato sopra, si riceverà un messaggio informativo il quale dice che SQL Server ha creato un nuovo file di transaction log per il database. Di seguito è riportato un esempio del messaggio risultante:

File activation failure. The physical file name "C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\Magazzino_Storico_log.ldf" may be incorrect. 
New log file 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\Magazzino_Storico_log.ldf' was created. 


I DBA possono controllare l'integrità logica e fisica di tutti gli oggetti nel database eseguendo il comando DBCC CHECKDB. Questo comando verifica che il database sia strutturalmente solido, verificando problemi come corruzione o incongruenze nei dati. L'esecuzione di DBCC CHECKDB è essenziale per mantenere l'integrità del database, poiché aiuta ad identificare e correggere potenziali problemi prima che portino a perdite di dati o guasti dell'applicazione. Nell’esempio il comando viene eseguito sul db “NomeDB”.

DBCC CHECKDB ('Magazzino_Storico')
GO


Alcune note aggiuntive:

  • Se il database è composto da più file di dati, questo metodo può essere utilizzato anche per generare un nuovo file di transaction log. 
  • Se viene perso uno dei file di dati per un database non è possibile utilizzare questo approccio. Questo ricostruirà solo un nuovo file di transaction log, non ricreerà i file di dati.
  • Verificare il parametro di Autogrowth del nuovo file di transaction log generato. Infatti, oltre al dimensionamento iniziale di 1 MB, questo parametro, di default, sarà impostato al 10%. Rivedere il parametro di Autogrowth in base alle best practice ed alle previsioni di crescita oltre che al tipo di backup per il file.
  • Prima di eseguire attach del file di dati, prestare attenzione al posizionamento dello stesso: è consigliato posizionare il file nel percorso standard dei database file onde evitare errori relativi alla mancanza di diritti di accesso dell’utenza di servizio SQL su percorsi alternativi.


Conclusione

Abbiamo visto come effettuare attach di un database anche senza essere in possesso del relativo file di transaction log.


Sebbene sia possibile ripristinare i dati con questo metodo è sempre fondamentale ricordare di effettuare correttamente l’impostazione sia dei backup che del monitoraggio regolare del sistema. In questo modo è possibile prevenire sia la perdita di dati che i problemi prima che si presentino.


di Datamaze, pubblicato il 19 marzo 2026


Vuoi rimanere sempre aggiornato sul mondo SQL Server?

Iscriviti alla nostra newsletter e ricevi aggiornamenti, news e approfondimenti sul mondo dei database. Direttamente dalla nostra scrivania, senza spam!

Iscrizione

10 funzioni utili da conoscere per aiutarsi a scrivere query in T-SQL
Come semplificare la scrittura delle query con SQL Server