Quando aggiungere un file di log è l’unica soluzione
Se nel vostro DB in SQL Server vi trovate di fronte all’errore “The following SQL error was unexpected: The transaction log for database ‘xyz’ is full due to ‘ACTIVE_TRANSACTION'” e nel log eventi di SQL server vi trovate di fronte a errori del tipo Error 9002, severity 17, state 4: The transaction log for database ‘xyz’ is full due to ‘ACTIVE_TRANSACTION’, è possibile che siate in un “cul de sac”.
Non potete fare il backup, non potete estendere il file (nel senso che non lo potete alterare) e siete già preoccupati per l’integrità.
Aggiungete un nuovo file di log, tanto poi lo potrete rimuovere, così risolvete il problema; questa è la parte semplice e immediata, ma se avete istanze replicate per il disaster recovery, il problema potrebbe essere più complicato.
Quando andrete a restorare il file di log delle transazioni, vi ritroverete di fronte a un errore del tipo: “non posso restorare il log perchè non trovo il file <nuovofilecheaveteaggiunto>“.
Per risolvere il problema dovete fare così:
- prima leggete l’elenco dei file presenti nel log delle transazioni:
RESTORE FILELISTONLY FROM DISK = N'<percorsodelfiledilog>'
; - dall’elenco dei file isentificate il nome logico del file che avete aggiunto nel DB di produzione e che manca nall’istanza replicata;
- eseguite il restore del log con l’opzione move:
RESTORE LOG <nomedatabase> FROM DISK = N'<percorsodelfiledilog>' WITH NORECOVERY, MOVE '<nomelogicodelnuovofile>' TO '<percorsofisicodelfiledacreare>
‘.
Questo risolve il problema!