Su una installazione SQL 2005, mi è capitato di aver esaurito lo spazio disco, a causa della crescita abnorme del file di log. Ogni tentativo di troncare il log è fallitto, così ho deciso di utilizzare un rimedio estremo: effettuare la detach del DB, poi cancellare il file di log e rimontare il solo file dati, facendo ricreare un nuovo file di log. Putroppo, per, all’atto del rimontaggio, SQL mi ha avvisato che c’erano problemi con il file dati e che era necessario individuare il file di log, purtroppo già cancellato e sovrascritto.
In SQL 2000 esiste il comando DBCC REBUILD_LOG(’MyDatabase’,'C:\MyDatabase.ldf’) che permette di ricreare un file di log nuovo per un dato DB, ma purtroppo in SQL 2005 tale comando è stato rimosso.
Dopo vari tentativi di recuperare il file (ovviamente senza passare attraverso una lunga restore del db dainastri di backup), l’unica procedura che ha funzionato è stata:
1. 1. creare un nuovo db con lo stesso nome del vecchio db;
2. 2. fermare il server SQL;
3. 3. sostituire il file dati (mdf) del db creato con il file mdf danneggiato;
4. 4. riavviare il server SQL;
5. 5. a questo punto il db risulta dannegiato, eseguire il comando DBCC checkdb con lo switch REPAIR_ALLOW_DATA_LOSS;
A questo punto il db ha ripreso a funzionare senza problemi