Abbiamo un database molto grande (~ 6 TB), il cui file di registro delle transazioni è stato eliminato (mentre SQL Server è stato chiuso. Abbiamo provato:
- Staccare e ricollegare il database; e
- Annullamento della cancellazione del file di registro delle transazioni
... ma nulla ha funzionato finora.
Attualmente stiamo eseguendo:
ALTER DATABASE <dbname> REBUILD
LOG ON (NAME=<dbname>,FILENAME='<logfilepath>')
... ma date le dimensioni del database, questo richiederà probabilmente alcuni giorni per essere completato.
Domande
C'è una differenza tra il comando sopra e quello seguente?
DBCC CHECKDB ('<dbname>', REPAIR_ALLOW_DATA_LOSS)
Dovremmo
REPAIR_ALLOW_DATA_LOSS
invece eseguire ?
Vale la pena notare che i dati sono derivati da altre fonti in modo che il database possa essere ricostruito, tuttavia sospettiamo che sarà molto più veloce riparare il database che reinserire nuovamente tutti i dati.
Aggiornare
Per coloro che mantengono il punteggio: il ALTER DATABASE/REBUILD LOG
comando è stato completato dopo circa 36 ore e riportato:
Avviso: il registro per il database 'dbname' è stato ricostruito. La coerenza transazionale è andata persa. La catena RESTORE è stata interrotta e il server non ha più contesto sui file di registro precedenti, quindi sarà necessario sapere quali fossero.
È necessario eseguire DBCC CHECKDB per convalidare la coerenza fisica. Il database è stato messo in modalità solo dbo. Quando si è pronti per rendere il database disponibile per l'uso, sarà necessario ripristinare le opzioni del database ed eliminare eventuali file di registro aggiuntivi.
Abbiamo quindi eseguito un DBCC CHECKDB
(impiegato circa 13 ore) che ha avuto successo. Diciamo solo che tutti abbiamo imparato l'importanza dei backup del database (e garantendo ai project manager l'accesso al server ...).