Il existe deux options différentes dans SQL Server moderne pour la vérification de page; étant Détection de page déchirée et somme de contrôle . Aucun n'est bien sûr également une option.
Je crois que Checksum a été introduit dans SQL Server 2005 et que la mise à niveau ou la restauration d'une base de données d'une version antérieure conserverait sa méthode de vérification de page précédente. c'est-à-dire qu'il n'y avait pas de mise à niveau implicite.
Le problème est que nous avons une base de données de production qui est entrée en production à l'aide de SQL Server 2000 et qui a depuis migré vers un serveur SQL Server 2008 R2. La vérification de page est définie sur Aucun lorsque je m'attendais à ce qu'elle soit Détection de page déchirée . En remontant ce laps de temps, nous semblons penser que la base de données a été initialement développée dans SQL Server 7.0, puis migrée vers SQL Server 2000, ce qui peut expliquer le résultat observé.
Je me demandais quand Torn Page Detection and Checksum est devenu une fonctionnalité de SQL Server et comment ils se sont comportés lors de la migration ou de la mise à niveau vers des versions plus récentes.
Edit: Résumant certaines des réponses:
Il y a un peu de distinction sur certaines des dates auxquelles la détection des pages déchirées est entrée dans SQL Server.
Lien 1: http://support.microsoft.com/kb/230785
Lien 2: http://technet.microsoft.com/en-us/library/aa337525(v=sql.90).aspx
Le premier lien indique SQL 7.0 et le second SQL2000. J'ai tendance à faire confiance à la suggestion SQL7.0 et à ce que le lien deux soit confus car il est désactivé par défaut dans SQL7.0 et activé par défaut dans SQL2000.
la source
Réponses:
Dans SQL Server 2000, si vous souhaitez identifier les pages corrompues, l'option de base de données TORN_PAGE_DETECTION doit être définie sur TRUE.
Mais dans SQL 2005 et plus, un nouveau paramètre PAGE_VERIFY a remplacé l'ancien TORN_PAGE_DETECTION qui permet de choisir entre deux types différents de vérification de page: TORN_PAGE_DETECTION et CHECKSUM.
Maintenant, la question est de savoir laquelle définir - TORN_PAGE_DETECTION ou CHECKSUM?
TORN_PAGE_DETECTION - écrit un bit pour chaque 512 octets dans une page vous permettant de détecter quand une page n'a pas été correctement écrite sur le disque. Le problème est qu'il ne vous dira pas si les données stockées dans ces 512 octets sont réellement correctes ou non, car deux octets peuvent avoir été écrits de manière incorrecte.
CHECKSUM - calcule une somme de contrôle de la page à la fois quand une page est écrite et quand une page est lue, en supposant qu'elle a une somme de contrôle.
Référence: somme de contrôle dans SQL2005
Pour répondre spécifiquement à vos questions:
Oui, CHECKSUM a été introduit dans SQL Server 2005 et est la valeur par défaut . Lorsque vous effectuez une mise à niveau de 2000 à 2005, vous devez modifier explicitement l'option de base de données Page Verify pour utiliser CHECKSUM.
Si vous restaurez la base de données déjà créée sur SQL 2005 sur un autre serveur exécutant SQL 2005, vous n'avez pas besoin de la définir. Il persistera jusqu'à ce que vous ayez défini l'option Vérifier la page.
De: http://support.microsoft.com/kb/230785
Ainsi, TORN_PAGE_DETECTION existe depuis SQL Server 7.0. Même alors, le défaut était qu'il n'était pas activé (même lien) .
Par conséquent, si la base de données avait été développée contre une instance 7.0 et avait été mise à niveau par la suite, elle aurait mis à niveau l'option avec l'option VERIFIER PAGE NONE (comme @ThomasStringer l'a noté dans sa réponse).
Edit: 24/09/2013 Pour améliorer la réponse:
En me référant à mes notes internes SQL Server de SQLSkills, j'ai trouvé qu'en utilisant un vidage de page, vous pouvez vérifier si la détection des bits déchirés - TORN_PAGE_DETECTION ou CHECKSUM était activée ou non:
m_tornBits : cela contient la somme de contrôle de page ou les bits qui ont été déplacés par les bits de protection de page déchirée - selon la forme de protection de page activée pour la base de données.
Remarque : Je n'ai aucune ancienne version de serveur SQL en cours d'exécution. Ci-dessous est confirmé à partir du serveur SQL 2000 et supérieur . Si vous avez un 7.0 ou 6.5 qui tourne, vous pouvez également le confirmer :-)
la source
Jetez un oeil à la référence de BOL :
Cela signifie qu'avant SQL Server 2005, l'option pour
TORN_PAGE_DETECTION
existait, mais pasCHECKSUM
.Et pour répondre à votre deuxième point:
Oui c'est correct. Vous devez définir explicitement la base de données pour utiliser la
CHECKSUM
méthode de vérification des pages.la source
Il y en a trois, comme vous l'avez indiqué: TORN_PAGE_DETECTION, CHECKSUM et NONE.
Comme cité dans cet article MSDN intitulé «Gestion des tampons»: la détection des pages déchirées a été introduite dans SQL Server 2000. La somme de contrôle a été introduite dans SQL Server 2005.
Un résumé des autres éléments notés dans cet article est que le mécanisme de vérification de page est spécifié au moment de la création de la base de données. Cela dépend donc de qui et comment ils ont créé la base de données quant à ce qu'elle est définie, pourrait également être contrôlé par le modèle de base de données configuré. Il est également intéressant de noter que si vous modifiez le paramètre, il ne prend pas effet sur toute la base de données, uniquement lorsque la page est écrite à la prochaine. De même, selon Paul Randal, cela n'est fait que lorsque la page est lue en mémoire, modifiée, puis réécrite sur le disque; cette information est ici .
Toute personne disposant d'autorisations sur l'instance de base de données peut modifier cette valeur. Il aurait pu persister à travers les mises à niveau comme indiqué sur MSDN ici :
Il aurait également pu être modifié ultérieurement, car quelqu'un a mal compris la configuration et a tiré dans le noir pour tenter de résoudre un problème.
SQL Server 2000 comme indiqué ci-dessus.
Le paramètre précédent est conservé lors de la mise à niveau, comme indiqué ci-dessus.
Maintenant, je voudrais souligner le fait que d'autres liens fournis par des gens indiquent que SQL Server 7.0 est disponible lorsque la détection des pages déchirées était disponible. Ce qui, comme indiqué dans ces articles, est vrai, mais il est prouvé à plusieurs reprises que la documentation Microsoft ne doit pas être considérée comme une vérité en toutes circonstances. Il y en a beaucoup où ils se trompent. Cela dit, comment pouvez-vous déterminer quelle réponse est acceptable? Nous avons tous fourni la documentation de Microsoft pour appuyer notre réponse.
Notez également que la détection des pages déchirées figure sur la liste d'amortissement à partir de SQL Server 2012, alors quelle est la préoccupation avec la façon dont elle a été définie sur vos bases de données pour commencer. Si je l'ai vu réglé sur autre chose que CHECKSUM, je le change immédiatement et je passe à une autre tâche plus importante. Je ne m'inquiète pas de la façon dont une mauvaise configuration a été mise en place, il est plus important de la corriger et de s'assurer ensuite que ceux qui ont les autorisations pour la modifier sont informés de la raison pour laquelle cet élément de configuration ne doit pas être changé en autre chose. Juste mon 0,02 $
la source
Comme l'ont dit @Thomas Stringer et @Kin, il a été introduit dans SQL Server 2005 et je pense qu'il fonctionne dans toutes les éditions de SQL Server. Pour TempDB, bien que CHECKSUM ait été introduit dans SQL Server 2008
http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/03/23/checksum-and-tempdb.aspx
la source