{"id":890,"date":"2010-04-06T14:35:11","date_gmt":"2010-04-06T13:35:11","guid":{"rendered":"http:\/\/blog.capdata.fr\/?p=890"},"modified":"2022-12-01T17:56:17","modified_gmt":"2022-12-01T16:56:17","slug":"modifier-page_verify-apres-une-migration-depuis-sql-2000","status":"publish","type":"post","link":"https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/","title":{"rendered":"Modifier PAGE_VERIFY apr\u00e8s une migration depuis SQL 2000"},"content":{"rendered":"<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F890&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F890&#038;title=Modifier%20PAGE_VERIFY%20apr%C3%A8s%20une%20migration%20depuis%20SQL%202000\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=Modifier%20PAGE_VERIFY%20apr%C3%A8s%20une%20migration%20depuis%20SQL%202000&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F890\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a><p>En regardant une <a title=\"Paul Randal TechEd 2008\" href=\"https:\/\/www.microsoft.com\/emea\/teched2008\/itpro\/tv\/default.aspx?vid=78\">session <\/a>de Paul Randal sur les corruptions \u00e0 la teched de Barcelone en 2008* , j&#8217;ai r\u00e9alis\u00e9 qu&#8217;il manquait une \u00e9tape dans notre listing de choses \u00e0 faire \u00e0 la suite d&#8217;une migration de 2000 vers 2005 ou 2008.<\/p>\n<p>Par d\u00e9faut en version 2000, PAGE_VERIFY n&#8217;a qu&#8217;une seule valeur possible pour v\u00e9rifier la consistance des pages sur disque, TORN_PAGE_DETECTION.\u00a0 TPD propose un m\u00e9canisme de v\u00e9rification lorsque l&#8217;\u00e9criture d&#8217;une page ne peut pas se faire en entier, en raison d&#8217;une coupure d&#8217;alimentation par exemple ou tout autre probl\u00e8me entre SQL Server et le disque. Mais le scope de d\u00e9tection \u00e9tait limit\u00e9 car seuls les 2 premiers bits de chacun des 16 secteurs de 512 octets d&#8217;une page \u00e9taient scrut\u00e9s pour calculer une s\u00e9quence de contr\u00f4le (<em>m_tornBits<\/em> dans un dbcc page). Un \u00e9crasement de bits au milieu d&#8217;un secteur ne pouvait donc pas \u00eatre d\u00e9tect\u00e9 de cette mani\u00e8re.<\/p>\n<p>A partir de la version 2005, une nouvelle valeur CHECKSUM est devenue option par d\u00e9faut. Elle va calculer une somme de contr\u00f4le de l&#8217;int\u00e9gralit\u00e9 de chaque page pour pouvoir d\u00e9tecter lorsque le contenu d&#8217;une page a \u00e9t\u00e9 modifi\u00e9 m\u00eame de mani\u00e8re infime. L&#8217;algorithme a \u00e9t\u00e9 revu et impl\u00e9ment\u00e9 de telle sorte qu&#8217;il n&#8217;impacte pas les performances (cf <a title=\"Linchea Shea's SQL Server Blog\" href=\"https:\/\/sqlblog.com\/blogs\/linchi_shea\/archive\/2007\/01\/16\/performance-impact-of-enabling-page-checksum-and-default-trace.aspx\">post<\/a> Linchi Shea). Il est \u00e9videmment recommand\u00e9 de laisser cette option PAGE_VERIFY sur CHECKSUM.<\/p>\n<p>Le probl\u00e8me, c&#8217;est que PAGE_VERIFY, tout comme le mode de compatibilit\u00e9 de la base, n&#8217;est pas modifi\u00e9 lorsque la base migre de 2000 vers 2005 ou 2008:<\/p>\n<pre><span style=\"color: #000080;\">restore database pagechecksumtest from disk='F:\\SQLDATA$SQL2000\\BACKUP\\pagechecksumtest.bak'\r\nwith move 'pagechecksumtest' to 'E:\\SQLDATA$SQL2005\\DATA\\pagechecksumtest.mdf',\r\nmove 'pagechecksumtest_log' to 'F:\\SQLDATA$SQL2005\\LOG\\pagechecksumtest_log.ldf',\r\nstats<\/span><\/pre>\n<pre><em>16 percent processed.\r\n24 percent processed.\r\n33 percent processed.\r\n41 percent processed.\r\n58 percent processed.\r\n66 percent processed.\r\n74 percent processed.\r\n83 percent processed.\r\n91 percent processed.\r\n100 percent processed.\r\nProcessed 96 pages for database 'pagechecksumtest', file 'pagechecksumtest' on file 1.\r\nProcessed 1 pages for database 'pagechecksumtest', file 'pagechecksumtest_log' on file 1.\r\nConverting database 'pagechecksumtest' from version 539 to the current version 611.\r\nDatabase 'pagechecksumtest' running the upgrade step from version 539 to version 551.\r\n(...)\r\nDatabase 'pagechecksumtest' running the upgrade step from version 610 to version 611.\r\nRESTORE DATABASE successfully processed 97 pages in 0.047 seconds (16.754 MB\/sec).<\/em><\/pre>\n<pre><span style=\"color: #000080;\">select name, page_verify_option_desc from sys.databases where name = 'pagechecksumtest'<\/span><\/pre>\n<pre><em>name\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 page_verify_option_desc\r\n------------------------- \u00a0 -----------------------------------\r\npagechecksumtest\u00a0\u00a0\u00a0\u00a0\u00a0       TORN_PAGE_DETECTION<\/em><\/pre>\n<p>Donc il faut bien penser \u00e0 l&#8217;activer \u00e0 la suite de la migration pour assurer un contr\u00f4le optimal:<\/p>\n<pre><span style=\"color: #000080;\">alter database pagechecksumtest set PAGE_VERIFY CHECKSUM<\/span><\/pre>\n<p>Attention, les pages ne sont pas prot\u00e9g\u00e9es pour autant imm\u00e9diatement apr\u00e8s: il faudra qu&#8217;elles suivent un cycle complet : qu&#8217;elles soient luent depuis le disque vers le buffer pool, <strong>modifi\u00e9es<\/strong>, puis r\u00e9\u00e9crites par le checkpoint pour embarquer la somme de contr\u00f4le dans l&#8217;ent\u00eate.<\/p>\n<p>Si on veut creuser un peu plus, on peut se demander si la page sera bien prot\u00e9g\u00e9e si elle se trouve dans un filegroup en readonly. En effet, la page ne pouvant pas \u00eatre modifi\u00e9e, le checkpoint ne pourra pas marquer le checksum dans son ent\u00eate (on peut le voir avec un dbcc page, en regardant la valeur de <em>m_flagBits<\/em> qui normalement doit embarquer 0x200 dans son bitmap pour montrer que le checksum a \u00e9t\u00e9 calcul\u00e9).<\/p>\n<p><strong>Sc\u00e9nario: <\/strong>je pars sur une base fra\u00eechement migr\u00e9e, je choisis d&#8217;ajouter un filegroup\u00a0 et de cr\u00e9er des donn\u00e9es dedans, pour enfin le passer en read-only. Et ensuite, je me rends compte que PAGE_VERIFY est toujours sur TORN_PAGE_DETECTION, donc je le passe sur CHECKSUM. Est-ce que l&#8217;\u00e9crasement de donn\u00e9es par un filter driver ou tout autre logiciel tiers s&#8217;ex\u00e9cutant sous NTFS sera vue par SQL Server ?<\/p>\n<p>Voici la repro pour vous permettre de vous faire votre propre id\u00e9e:<\/p>\n<p>1) Sur une instance en SQL Server 2000, cr\u00e9er une base, une table et sauvegarder la base:<\/p>\n<pre><span style=\"color: #000080;\">create database tpdtest\r\nuse tpdtest\r\ncreate table T1(a numeric identity, b char(1))\r\ninsert into T1 values ('A')\r\nbackup database tpdtest to disk='F:\\SQLDATA$SQL2000\\BACKUP\\tpdtest.bak' with init, stats<\/span><\/pre>\n<p>2) Remonter la base sur une instance 2005 ou 2008, ajouter un filegroup, d\u00e9placer la table dans ce filegroup et le passer en READONLY:<\/p>\n<pre><span style=\"color: #000080;\">restore database tpdtest from disk='F:\\SQLDATA$SQL2000\\BACKUP\\tpdtest.bak'\r\nwith move 'tpdtest' to 'E:\\SQLDATA$SQL2005\\DATA\\tpdtest.mdf',\r\nmove 'tpdtest_log' to 'F:\\SQLDATA$SQL2005\\LOG\\tpdtest_log.ldf',\r\nstats, replace\r\n\r\n<\/span><span style=\"color: #000080;\">alter database tpdtest add filegroup RO_tpdtest\r\nalter database tpdtest add file(name='RO_tpdtest',\r\nfilename='E:\\SQLDATA$SQL2005\\DATA\\RO_tpdtest.ndf') to filegroup RO_tpdtest\r\nuse tpdtest\r\ncreate unique clustered index UCQ_T1_a on T1(a) on RO_tpdtest\r\nalter database tpdtest modify filegroup RO_tpdtest readonly<\/span><\/pre>\n<p>Oulala mais j&#8217;ai oubli\u00e9 de passer PAGE_VERIFY sur CHECKSUM, vite:<\/p>\n<pre><span style=\"color: #000080;\">alter database tpdtest set PAGE_VERIFY CHECKSUM<\/span><\/pre>\n<p>Et l\u00e0 je simule une corruption de donn\u00e9es avec un \u00e9diteur h\u00e9xa dans la page de donn\u00e9es. Un coup de dbcc ind pour identifier la page en question:<\/p>\n<pre><span style=\"color: #000080;\">dbcc ind('tpdtest','T1',1)<\/span><\/pre>\n<pre><em>PageFID    PagePID    IAMFID      IAMPID      ObjectID      PageType\r\n---------  ---------  ----------  ----------  ------------  -----------\r\n3\u00a0\u00a0 \u00a0      9\u00a0\u00a0 \u00a0      NULL\u00a0\u00a0 \u00a0    NULL\u00a0\u00a0 \u00a0    1977058079    10\r\n3\u00a0\u00a0 \u00a0      8\u00a0\u00a0 \u00a0      3\u00a0\u00a0 \u00a0       9\u00a0\u00a0 \u00a0       1977058079    1<\/em><\/pre>\n<p>La page en question est la page 8 dans le fichier\u00a0 3, donc en convertissant 8 en offset, on obtient (8*8192) = 0x10000.\u00a0 A partir de l\u00e0, je passe la base offline et avec un \u00e9diteur hexa de mon choix, je m&#8217;en vais \u00e9craser la valeur &#8216;A&#8217; avec une autre valeur, &#8216;C&#8217; par exemple:<\/p>\n<p><a href=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2010\/04\/corruption.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-916\" title=\"corruption\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2010\/04\/corruption.jpg\" alt=\"\" width=\"648\" height=\"144\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2010\/04\/corruption.jpg 648w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2010\/04\/corruption-300x66.jpg 300w\" sizes=\"auto, (max-width: 648px) 100vw, 648px\" \/><\/a><\/p>\n<p>A ce niveau-l\u00e0, il est important de ne pas toucher aux premiers octets de l&#8217;ent\u00eate, car dans ce cas le m\u00e9canisme de TPD jouerait son r\u00f4le et on verrait une erreur 824 pointer son nez. On veut vraiment simuler une corruption au beau milieu de la page. On remet la base en ligne et on va lire la valeur:<\/p>\n<pre><span style=\"color: #000080;\">alter database tpdtest set online\r\nuse tpdtest\r\nselect * from T1<\/span><\/pre>\n<pre><em>a\u00a0\u00a0 b\r\n--\u00a0 --\r\n1\u00a0\u00a0 \u00a0C<\/em><\/pre>\n<p>Oooops. ..<\/p>\n<p>A titre de comparaison, en cr\u00e9ant le m\u00eame cas dans un filegroup en read-write:<\/p>\n<pre><span style=\"color: #000080;\">use tpdtest\r\ncreate table T2(a numeric identity, b char(1))\r\ncreate unique clustered index UCQ_T2_a on T2(a)\r\ninsert into T2 values ('A')\r\ndbcc ind('tpdtest','T2',1)<\/span><\/pre>\n<pre><em>\u00a0<\/em><em>PageFID    PagePID    IAMFID      IAMPID      ObjectID      PageType\r\n---------  ---------  ----------  ----------  ------------  -----------\r\n1\u00a0\u00a0 \u00a0      25\u00a0\u00a0 \u00a0      NULL\u00a0\u00a0 \u00a0    NULL\u00a0\u00a0 \u00a0    <\/em>2089058478    <em>\u00a0<\/em><em>10\r\n1\u00a0\u00a0 \u00a0      15\u00a0\u00a0 \u00a0      1\u00a0\u00a0 \u00a0       25\u00a0 \u00a0       <\/em>2089058478    <em><\/em><em>1\r\n\r\n<\/em><\/pre>\n<p>La page est la 15, donc en ouvrant le fichier MDF, \u00e0 l&#8217;offset (15*8192) = 0x1E000, on refait la m\u00eame vilaine corruption au m\u00eame endroit:<\/p>\n<p><a href=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2010\/04\/corruption2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-939\" title=\"corruption2\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2010\/04\/corruption2.jpg\" alt=\"\" width=\"626\" height=\"82\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2010\/04\/corruption2.jpg 626w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2010\/04\/corruption2-300x39.jpg 300w\" sizes=\"auto, (max-width: 626px) 100vw, 626px\" \/><\/a><\/p>\n<p>Mais cette fois lorsque l&#8217;on veut relire la page:<\/p>\n<pre><span style=\"color: #000080;\">alter database tpdtest set online\r\nuse tpdtest\r\nselect * from T2<\/span><\/pre>\n<pre><span style=\"color: #ff6600;\"><em>Msg 824, Level 24, State 2, Line 1<\/em><\/span><\/pre>\n<p><span style=\"color: #ff6600;\"><em>SQL Server detected a logical consistency-based I\/O error: incorrect checksum (expected: 0xb3834c64; actual: 0xb2834c64). It occurred during a read of page (1:15) in database ID 21 at offset 0x0000000001e000 in file &#8216;E:\\SQLDATA$SQL2005\\DATA\\tpdtest.mdf&#8217;.<br \/>\nAdditional 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).<br \/>\nThis error can be caused by many factors; for more information, see SQL Server Books Online.<\/em><\/span><\/p>\n<p>Le CHECKSUM est un superset de TPD, donc \u00e7a marche.<\/p>\n<p><strong>Donc r\u00e9sum\u00e9: <\/strong><br \/>\n&#8211; Quand on migre, il faut penser aussi \u00e0 modifier PAGE_VERIFY et le passer sur CHECKSUM car ce n&#8217;est pas automatique.<br \/>\n&#8211; Le checksum en question ne sera impl\u00e9ment\u00e9 qu&#8217;une fois la page lue depuis le disque, modifi\u00e9e, puis r\u00e9\u00e9crite par le CHECKPOINT.<br \/>\n&#8211; Les donn\u00e9es dans les filegroups en read_only ne sont pas pour autant prot\u00e9g\u00e9s. Ils conservent le TPD comme seul mode de protection.<\/p>\n<p>A+ David B.<\/p>\n<p><script src=\"https:\/\/tcr.tynt.com\/javascripts\/Tracer.js?user=d4FlbGI04r35lZadbi-bpO\" type=\"text\/javascript\"><\/script><\/p>\n<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F890&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F890&#038;title=Modifier%20PAGE_VERIFY%20apr%C3%A8s%20une%20migration%20depuis%20SQL%202000\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=Modifier%20PAGE_VERIFY%20apr%C3%A8s%20une%20migration%20depuis%20SQL%202000&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F890\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a>","protected":false},"excerpt":{"rendered":"<p>En regardant une session de Paul Randal sur les corruptions \u00e0 la teched de Barcelone en 2008* , j&#8217;ai r\u00e9alis\u00e9 qu&#8217;il manquait une \u00e9tape dans notre listing de choses \u00e0 faire \u00e0 la suite d&#8217;une migration de 2000 vers 2005&hellip; <a href=\"https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/\" class=\"more-link\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":916,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[135,137,134,136],"class_list":["post-890","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sqlserver","tag-checksum","tag-migration","tag-page_verify","tag-torn-page-detection"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Modifier PAGE_VERIFY apr\u00e8s une migration depuis SQL 2000 - Capdata TECH BLOG<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Modifier PAGE_VERIFY apr\u00e8s une migration depuis SQL 2000 - Capdata TECH BLOG\" \/>\n<meta property=\"og:description\" content=\"En regardant une session de Paul Randal sur les corruptions \u00e0 la teched de Barcelone en 2008* , j&#8217;ai r\u00e9alis\u00e9 qu&#8217;il manquait une \u00e9tape dans notre listing de choses \u00e0 faire \u00e0 la suite d&#8217;une migration de 2000 vers 2005&hellip; Continuer la lecture &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/\" \/>\n<meta property=\"og:site_name\" content=\"Capdata TECH BLOG\" \/>\n<meta property=\"article:published_time\" content=\"2010-04-06T13:35:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-12-01T16:56:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2010\/04\/corruption.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"648\" \/>\n\t<meta property=\"og:image:height\" content=\"144\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"David Baffaleuf\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"David Baffaleuf\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/\"},\"author\":{\"name\":\"David Baffaleuf\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf\"},\"headline\":\"Modifier PAGE_VERIFY apr\u00e8s une migration depuis SQL 2000\",\"datePublished\":\"2010-04-06T13:35:11+00:00\",\"dateModified\":\"2022-12-01T16:56:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/\"},\"wordCount\":927,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"keywords\":[\"checksum\",\"migration\",\"page_verify\",\"torn page detection\"],\"articleSection\":[\"SQL Server\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/\",\"url\":\"https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/\",\"name\":\"Modifier PAGE_VERIFY apr\u00e8s une migration depuis SQL 2000 - Capdata TECH BLOG\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/#website\"},\"datePublished\":\"2010-04-06T13:35:11+00:00\",\"dateModified\":\"2022-12-01T16:56:17+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/blog.capdata.fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Modifier PAGE_VERIFY apr\u00e8s une migration depuis SQL 2000\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.capdata.fr\/#website\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"name\":\"Capdata TECH BLOG\",\"description\":\"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting\",\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.capdata.fr\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/blog.capdata.fr\/#organization\",\"name\":\"Capdata TECH BLOG\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"contentUrl\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"width\":800,\"height\":254,\"caption\":\"Capdata TECH BLOG\"},\"image\":{\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf\",\"name\":\"David Baffaleuf\",\"sameAs\":[\"http:\/\/www.capdata.fr\"],\"url\":\"https:\/\/blog.capdata.fr\/index.php\/author\/dbaffaleuf\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Modifier PAGE_VERIFY apr\u00e8s une migration depuis SQL 2000 - Capdata TECH BLOG","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/","og_locale":"fr_FR","og_type":"article","og_title":"Modifier PAGE_VERIFY apr\u00e8s une migration depuis SQL 2000 - Capdata TECH BLOG","og_description":"En regardant une session de Paul Randal sur les corruptions \u00e0 la teched de Barcelone en 2008* , j&#8217;ai r\u00e9alis\u00e9 qu&#8217;il manquait une \u00e9tape dans notre listing de choses \u00e0 faire \u00e0 la suite d&#8217;une migration de 2000 vers 2005&hellip; Continuer la lecture &rarr;","og_url":"https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/","og_site_name":"Capdata TECH BLOG","article_published_time":"2010-04-06T13:35:11+00:00","article_modified_time":"2022-12-01T16:56:17+00:00","og_image":[{"width":648,"height":144,"url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2010\/04\/corruption.jpg","type":"image\/jpeg"}],"author":"David Baffaleuf","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"David Baffaleuf","Dur\u00e9e de lecture estim\u00e9e":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/#article","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/"},"author":{"name":"David Baffaleuf","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf"},"headline":"Modifier PAGE_VERIFY apr\u00e8s une migration depuis SQL 2000","datePublished":"2010-04-06T13:35:11+00:00","dateModified":"2022-12-01T16:56:17+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/"},"wordCount":927,"commentCount":1,"publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"keywords":["checksum","migration","page_verify","torn page detection"],"articleSection":["SQL Server"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/","url":"https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/","name":"Modifier PAGE_VERIFY apr\u00e8s une migration depuis SQL 2000 - Capdata TECH BLOG","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/#website"},"datePublished":"2010-04-06T13:35:11+00:00","dateModified":"2022-12-01T16:56:17+00:00","breadcrumb":{"@id":"https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.capdata.fr\/index.php\/modifier-page_verify-apres-une-migration-depuis-sql-2000\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/blog.capdata.fr\/"},{"@type":"ListItem","position":2,"name":"Modifier PAGE_VERIFY apr\u00e8s une migration depuis SQL 2000"}]},{"@type":"WebSite","@id":"https:\/\/blog.capdata.fr\/#website","url":"https:\/\/blog.capdata.fr\/","name":"Capdata TECH BLOG","description":"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting","publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.capdata.fr\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/blog.capdata.fr\/#organization","name":"Capdata TECH BLOG","url":"https:\/\/blog.capdata.fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/","url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","contentUrl":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","width":800,"height":254,"caption":"Capdata TECH BLOG"},"image":{"@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/"]},{"@type":"Person","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf","name":"David Baffaleuf","sameAs":["http:\/\/www.capdata.fr"],"url":"https:\/\/blog.capdata.fr\/index.php\/author\/dbaffaleuf\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/890","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/comments?post=890"}],"version-history":[{"count":72,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/890\/revisions"}],"predecessor-version":[{"id":9545,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/890\/revisions\/9545"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media\/916"}],"wp:attachment":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media?parent=890"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/categories?post=890"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/tags?post=890"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}