web-dev-qa-db-fra.com

Comment réparer les erreurs rapportées par DBCC Checkdb

Je reçois beaucoup d'erreurs de DBCC CHECKDB, comprenant:

Msg 8939, niveau 16, état 98, ligne 1
Tableau erreur: ID de l'objet 0, index ID-1, ID de partition 0, l'unité alloc ID 3667181342891245568 (type inconnu), p (7791: -1694668604). Test (IS_OFF (BUF_IOERR, pBUF-> BSTAT)) a échoué. Les valeurs sont 133129 et -12.

Msg 8928, niveau 16, état 1, ligne 1
ID d'objet 405576483, ID d'index 73, l'ID de partition 72057594049200128 unité ID 72057594054246400 alloc (type de données dans la rangée): Page (1: 194.923) ne peut pas être traitée. Voir d'autres erreurs pour les détails.

Msg 8976, niveau 16, état 1, ligne 1
Tableau erreur: ID d'objet 405576483, ID d'index 73, l'ID de partition 72057594049200128 unité ID 72057594054246400 alloc (type de données dans la ligne). Page (1: 194923) n'a pas été vu dans l'analyse, bien que son parent (1: 186194) et précédent (1: 194922) font référence. Vérifiez toutes les erreurs précédentes.

Msg 8980, niveau 16, état 1, ligne 1
Tableau erreur: ID d'objet 405576483, ID d'index 73, l'ID de partition 72057594049200128 unité ID 72057594054246400 alloc (type de données dans la ligne). Page noeud d'index (1: 186194), fente 103 se réfère à la page des enfants (1: 194924) et de l'enfant précédent (1: 194923), mais ils n'ont pas rencontré.

Msg 8978, niveau 16, état 1, ligne 1
Tableau erreur: ID d'objet 405576483, ID d'index 73, l'ID de partition 72057594049200128 unité ID 72057594054246400 alloc (type de données dans la ligne). Page (1: 194932) manque une référence de la page précédente (1: 194931). Problème possible de liaison de la chaîne.

Plus important encore, à la fin, ce qui suit est relayée:

CHECKDB a trouvé 0 erreurs d'allocation et 28 erreurs de cohérence dans " houseme " base de données.

Repair_allow_data_loss est le niveau de réparation minimum pour les erreurs trouvées par DBCC CHECKDB (houseme).

Que fais-je?

1
Zoinky

La sortie de DBCC CHECKDB vous a dit exactement quoi faire:

USE [master];
GO

ALTER DATABASE houseme SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DBCC CHECKDB(N'houseme', REPAIR_ALLOW_DATA_LOSS);
ALTER DATABASE houseme SET MULTI_USER;

Au cas où le nom de l'option n'est pas suffisamment évident, cela peut conduire à une perte de données - mais sans sauvegarde, vous n'avez pas vraiment d'autre choix.

Si cela ne fonctionne pas et que vous n'avez pas de sauvegarde, vous venez d'apprendre une leçon très coûteuse sur la raison pour laquelle vous devriez avoir des sauvegardes. Vous pouvez voir si Paul Randal a quelques autres idées , ou cette idée de Steve Stedman . Aucune garantie, bien sûr.

Si vous avez toujours des erreurs de cohérence après plusieurs essais, il serait peut-être temps de créer une nouvelle base de données, migrer autant cohérente que vous pouvez, et couper votre pertes.

7
Aaron Bertrand