Nous avons une très grande base de données (~ 6 To), dont le fichier journal des transactions a été supprimé (alors que SQL Server était fermé. Nous avons essayé:
- Détacher et rattacher la base de données; et
- Annulation de la suppression du fichier journal des transactions
... mais rien n'a fonctionné jusqu'à présent.
Nous gérons actuellement:
ALTER DATABASE <dbname> REBUILD
LOG ON (NAME=<dbname>,FILENAME='<logfilepath>')
... mais étant donné la taille de la base de données, cela prendra probablement quelques jours.
Des questions
Y a-t-il une différence entre la commande ci-dessus et la suivante?
DBCC CHECKDB ('<dbname>', REPAIR_ALLOW_DATA_LOSS)
Devrions-nous plutôt exécuter
REPAIR_ALLOW_DATA_LOSS
?
Il convient de noter que les données sont dérivées d'autres sources afin que la base de données puisse être reconstruite, mais nous pensons qu'il sera beaucoup plus rapide de réparer la base de données que de réinsérer toutes les données à nouveau.
Mise à jour
Pour ceux qui gardent le score: la ALTER DATABASE/REBUILD LOG
commande s'est terminée après environ 36 heures et a rapporté:
Avertissement: le journal de la base de données 'dbname' a été reconstruit. La cohérence transactionnelle a été perdue. La chaîne RESTORE a été rompue et le serveur n'a plus de contexte sur les fichiers journaux précédents, vous devrez donc savoir de quoi il s'agit.
Vous devez exécuter DBCC CHECKDB pour valider la cohérence physique. La base de données a été mise en mode dbo uniquement. Lorsque vous êtes prêt à rendre la base de données disponible pour utilisation, vous devrez réinitialiser les options de base de données et supprimer tous les fichiers journaux supplémentaires.
Nous avons ensuite exécuté un DBCC CHECKDB
(a pris environ 13 heures) qui a réussi. Disons simplement que nous avons tous appris l'importance des sauvegardes de bases de données (et de l'accès des chefs de projet au serveur ...).