web-dev-qa-db-fra.com

Quels types de corruption peut-il manquer DBCC CheckDB?

Cette question a été invitée par ceci Post antérieur et ma présentation d'une base de données déposée pour une enquête future restaurée suivante:

BACKUP 'BrokenDatabase' detected an error on page (1:123456) in file ’BrokenDatabase.mdf'.
Error: 3043, Severity: 16, State: 1.

Dans la question liée et la sauvegarde, je suis prêt pour les enquêtes de page DBCC, DBCC CheckDB a été adoptée sans erreur mais la corruption est évidemment présente.

Quels types de corruption peuvent survenir pour lesquels votre checkDB passera mais une sauvegarde avec la somme de contrôle échouera?

16
Mark Storey-Smith

Ce qui suit est une compilation de résultats que j'ai lisée sur. Vous trouverez énormément plus d'informations sur les blogs et les documents liés.

Tout d'abord, cela peut arriver que DBCC CHECKDB ne détectera pas les incohérences si vous désactivez la vérification de la somme de contrôle ou Torn_Page. une citation de Paul Randal dans ce post :

Vous avez raison - si Torn-Page ou CheckSum n'est pas activé, il n'y a rien qui puisse être détecté en ce qui concerne les options de protection de page. CheckDB peut toujours reprendre des corruptions qu'il trouve de faire toutes les vérifications de cohérence qu'elle le fait - mais elle ne verra pas les corruptions au milieu des valeurs de données, par exemple.

HA - C'est la bummer sur la mise en marche de la page - rien ne se passe jusqu'à ce qu'une page soit lue, modifiée et écrite. Le seul moyen de forcer les pages à obtenir des checksums est de les faire changer - par exemple. En reconstruisant tous vos index, WHCIH peut être désagréable - il n'y a pas d'outil "toucher" du tout.

La situation ci-dessus peut vous frapper si vous avez mis à niveau une base de données de SQL Server 2000 ou avant 2005 ou ultérieure. Vous devez ensuite activer manuellement les checksums de page avec Alter base de données pour les obtenir actif. Mais ensuite, le 2e paragraphe de la citation ci-dessus commence et pourrait vous déranger.

BACKUP WITH CHECKSUM détectera les incohérences de la somme de contrôle, mais uniquement si la page avait déjà une somme de contrôle écrite, lorsqu'elle est sauvegardée. Normalement DBCC CHECKDB détecte également ces erreurs, donc c'est pas une bonne idée d'utiliser la sauvegarde avec la checksum pour remplacer dBCC Checkdb .

Maintenant, il y a une deuxième possibilité pour DBCC CHECKDB ne pas montrer d'incohérences, même s'il y en a un. Pour cela, je ne fais que cibler Paul Randal dans idées fausses sur les corruptions: peut-ils disparaître? :

Alors qu'en est-il des corruptions disparaissantes? Cela conclut comment les contrôles de cohérence fonctionnent. Les chèques de cohérence ne fonctionnent que sur les pages de la base de données attribuée. Si une page n'est attribuée à rien, les 8192 octets n'ont pas de sens et ne peuvent pas être interprétés. Ne soyez pas confus entre réservé et alloué - j'explique que dans les premières idées fausses, publiez ici. Tant qu'une page est allouée, elle sera cochée par DBCC CheckDB, y compris le test de la somme de page, s'il existe. Une corruption peut sembler "disparaître" si une page corrompue est allouée à l'époque, un DBCC CheckDB est exécuté, mais est ensuite distribué au moment où le prochain DBCC CheckDB est exécuté. La première fois que cela sera signalé comme corrompu, mais la deuxième fois que cela n'est pas attribué, il n'est donc pas coché et ne sera pas signalé comme corrompu. La corruption semble être mystérieusement disparue. Mais cela n'a pas que la page corrompue n'est plus allouée. Rien de stopping SQL Server translocant une page corrompue - en fait, c'est ce que la plupart des réparations DBCC CheckDB DO - négocient ce qui est cassé et réparer tous les liens.

Je n'ai pas de réponse finale à votre question, mais comme DBCC CHECKDB Seulement vérifie les pages allouées Il ne montrera pas d'incohérences dans les pages de trafiquée. La seule situation que je puisse imaginer maintenant, c'est que la sauvegarde est également sauvegarde de ces pages de translocation montrant des erreurs de somme de contrôle potentielles ignorées par DBCC CHECKDB.

10
MicSim