Bonjour,
J'ai deux serveurs SQL Server Express.
J'utilise un script qui effectue un backup FULL de toutes les bases de DB1 toutes les 24 heures, et les restaure dans la foulée sur DB2.
Un autre script tourne toutes les 5 minutes et backup tous les journaux de DB1 et les restaure dans la foulée sur DB2.
Du log shipment à la main quoi.
Mon script pense bien à faire un sp_delete_backup_history après chaque backup sur DB1, mais à aucun moment j'ai pensé à en faire un sur DB2 après la restauration.
Arrive donc ce qui devait arriver : depuis un certain temps (vu que c'est super bien monitoré) MSDB est plein 10 Go.
Et vu que c'est ultra bien géré au niveau de l'infra, le serveur est hébergé sur un NAS et non un SAN… Pour des raisons de performances, le NAS est configuré pour indiquer que les écritures sont terminées dès qu'il reçoit l'ordre de les faire… et on a eu évidement des erreurs disque.
Bref : plusieurs tables de MSDB sont corrompues.
Lorsque je lance un DBCC CHECKDB (msdb, REPAIR_ALLOW_DATA_LOSS); (ce qui n'est pas terrible en soit) j'obtiens une erreur sur un dbo.SORT qui n'a plus de place.
J'ai tenté de vider un peu de données à main dans l'historique des restauration (environ 25 millions de lignes) mais visiblement la place ainsi libérée n'est pas réutilisable en l'état, l'erreur persiste.
Avant de déziguer complètement DB2 et le réinstaller, avez-vous une idée pour réparer MSDB ?
Quelles données importantes y sont stockées à part l'historique des backups ? Puis-je écraser la base existante (corrompue) par un backup de celle de DB1 ? J'ai pas l'impression de pouvoir car simplement supprimer une base, je n'y arrive plus dans l'état actuel...
Partager