web-dev-qa-db-fra.com

Comment puis-je corriger l'erreur SQL Server 8928?

J'ai reçu le message d'erreur suivant dans une application exécutée contre l'une de mes bases de données:

SQL Server detected a logical consistency-based I/O error: incorrect checksum 
(expected: 0xfdff74c9; actual: 0xfdff74cb). It occurred during a read of page (1:69965) in 
database ID 5 at offset 0x0000002229a000 in file 'e:\SQL Server\MSSQL.1\MSSQL
\[DB_Name].mdf'. Additional messages in the SQL Server error log or system event log may 
provide more detail. 
    This is a severe error condition that threatens database integrity and must be 
corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This 
error can be caused by many factors; for more information, see SQL Server Books Online.

Cela sonnait mal alors j'ai couru ce qui suit:

DBCC CHECKDB ([DB_Name]) WITH NO_INFOMSGS, ALL_ERRORMSGS

Et reçu le rapport suivant:

Msg 8928, Level 16, State 1, Line 1
Object ID 1326627769, index ID 1, partition ID 72057594048872448, alloc unit ID 
    72057594055557120 (type LOB data): Page (1:69965) could not be processed. See other 
    errors for details.
Msg 8939, Level 16, State 98, Line 1
Table error: Object ID 1326627769, index ID 1, partition ID 72057594048872448, alloc 
    unit ID 72057594055557120 (type LOB data), page (1:69965). Test (IS_OFF (BUF_IOERR, 
    pBUF->bstat)) failed. Values are 12716041 and -4.
Msg 8965, Level 16, State 1, Line 1
Table error: Object ID 1326627769, index ID 1, partition ID 72057594048872448, alloc 
    unit ID 72057594055557120 (type LOB data). The off-row data node at page (1:69965), 
    slot 0, text ID 89622642688 is referenced by page (1:69968), slot 1, but was not 
    seen in the scan.
Msg 8929, Level 16, State 1, Line 1
Object ID 1326627769, index ID 1, partition ID 72057594048872448, alloc unit ID 
    72057594055622656 (type In-row data): Errors found in off-row data with ID 
    89622642688 owned by data record identified by RID = (1:77754:1)
CHECKDB found 0 allocation errors and 4 consistency errors in table '[Table_Name]' 
    (object ID 1326627769).
CHECKDB found 0 allocation errors and 4 consistency errors in database '[DB_Name]'.
repair_allow_data_loss is the minimum repair level for the errors found by DBCC CHECKDB 
    ([DB_Name]).

J'ai parcouru à travers mes anciennes images et cela semble que l'erreur existait depuis un certain temps. Je n'ai pas d'image propre. Je ne suis pas une grande partie d'un DBA, donc je ne connais pas la meilleure façon de procéder; Je ne comprends même pas comment les messages d'erreur peuvent me signaler à la corruption des données.

Quelqu'un peut-il me dire ce que ces messages indiquent et comment procéder?

2
Enrique

MSG 8928, niveau 16, état 1, ligne 1 ID d'objet 1326627769, Index ID 1, ID de partition 72057594048872448, ALLOC ID de l'unité 72057594055557120 (Données LOB): Page (1: 69965)

La colonne de la base de données SQL Server est une corruption de la colonne de la base de données SQL Server est LOB et peut avoir du type de données VRCHAR. Index ID 1 indiqué problème avec Index en cluster, vous devez donc supposer que la réparation des options de réploitation minimales permet de supprimer des données pour récupérer la base de données. L'index de chute et de recréement ne sera pas aidée.Veuillez ne gérez pas la réparation d'abord . Avez-vous la dernière sauvegarde valide de la base de données SQL Server? Meilleure solution possible ici est de restaurer à partir de la sauvegarde valide.

Quelle est la taille de votre base de données. Veuillez exécuter Restaurer Verifyonly Avant de restaurer la sauvegarde pour vérifier que la sauvegarde que vous restaurez est cohérente. Bien que la restauration ne garantira que cette sauvegarde est complète et valide dans tous les formats.

Veuillez lire SQL Server Errorlog et Windows Event Viewer pour découvrir la raison pour laquelle la corruption s'est produite, puis prenez des mesures pour le réparer.

si vous n'avez pas de sauvegarde valide, vous pouvez aussi bien essayer de réparer la base de données en utilisant la commande ci-dessous.

ALTER DATABASE DB_NAME SET SINGLE_USER; 
GO 
DBCC CHECKDB (N'DB_NAME', REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS, NO_INFOMSGS;
GO 
2
Shanky