{"id":3860,"date":"2014-08-04T08:12:00","date_gmt":"2014-08-04T06:12:00","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/"},"modified":"2014-08-04T08:12:00","modified_gmt":"2014-08-04T06:12:00","slug":"when-dbcc-checkdb-doesnt-detect-corruption","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/","title":{"rendered":"SQL Server: DBCC CHECKDB does not detect corruption"},"content":{"rendered":"<p>During my audits at customer places, it still happens very often to find SQL Server databases with page verification option configured to &#8220;none&#8221;. I always alert my customers on this configuration point because it can have an impact on the overall integrity of their databases. One of my customer told me that the integrity task of its maintenance will detect the corruption anyway and alert him by email &#8211; but is it really the case?<\/p>\n<p>Of course, my response to the customer is that it depends of the corruption type and that a dbcc checkdb is not an absolute guarantee in this case. I like to show this example to my customers to convince them to change the page verify option to another thing than &#8220;none&#8221;.<\/p>\n<p>Let me show this to you:<\/p>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">use<span style=\"font-size: 9.5pt;font-family: Consolas\"> [master]<span style=\"color: gray\">;<\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">go<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: green\">&#8212; create corrupt db<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">if<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: fuchsia\">DB_ID<span style=\"color: gray\">(<span style=\"color: red\">&#8216;corrupt&#8217;<span style=\"color: gray\">) <span style=\"color: gray\">is <span style=\"color: gray\">not <span style=\"color: gray\">null<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: blue\">drop <span style=\"color: blue\">database corrupt<span style=\"color: gray\">;<\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">create<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: blue\">database corrupt<span style=\"color: gray\">;<\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">go<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: green\">&#8212; force page verify option to none<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">alter<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: blue\">database corrupt <span style=\"color: blue\">set <span style=\"color: blue\">page_verify <span style=\"color: blue\">none<span style=\"color: gray\">;<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">go<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">use<span style=\"font-size: 9.5pt;font-family: Consolas\"> corrupt<span style=\"color: gray\">;<\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">go<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: green\">&#8212; create two tables t1 and t2<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">create<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: blue\">table dbo<span style=\"color: gray\">.t1<span style=\"color: gray\">( id <span style=\"color: blue\">int <span style=\"color: blue\">identity <span style=\"color: blue\">primary <span style=\"color: blue\">key<span style=\"color: gray\">, col1 <span style=\"color: blue\">varchar<span style=\"color: gray\">(50<span style=\"color: gray\">));<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">create<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: blue\">table dbo<span style=\"color: gray\">.t2<span style=\"color: gray\">( id <span style=\"color: blue\">int <span style=\"color: blue\">identity <span style=\"color: blue\">primary <span style=\"color: blue\">key<span style=\"color: gray\">, col1 <span style=\"color: blue\">int<span style=\"color: gray\">, col2 <span style=\"color: blue\">int<span style=\"color: gray\">, col3 <span style=\"color: blue\">varchar<span style=\"color: gray\">(50<span style=\"color: gray\">));<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: green\">&#8212; insert some sample data<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">declare<span style=\"font-size: 9.5pt;font-family: Consolas\"> @random <span style=\"color: blue\">int<span style=\"color: gray\">;<\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">declare<span style=\"font-size: 9.5pt;font-family: Consolas\"> @i <span style=\"color: blue\">int <span style=\"color: gray\">= 1<span style=\"color: gray\">;<\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">while<span style=\"font-size: 9.5pt;font-family: Consolas\"> @i <\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">begin<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: blue\">set @random <span style=\"color: gray\">= 10000<span style=\"color: gray\">\/<span style=\"color: gray\">(<span style=\"color: fuchsia\">rand<span style=\"color: gray\">()* 1000<span style=\"color: gray\">);<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: blue\">if @random <span style=\"color: gray\">&gt; 50 <span style=\"color: blue\">set @random <span style=\"color: gray\">= 50<span style=\"color: gray\">;<\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">insert<span style=\"font-size: 9.5pt;font-family: Consolas\"> t1<span style=\"color: gray\">(col1<span style=\"color: gray\">) <span style=\"color: blue\">values <span style=\"color: gray\">(<span style=\"color: fuchsia\">REPLICATE<span style=\"color: gray\">(<span style=\"color: red\">&#8216;t&#8217;<span style=\"color: gray\">, 50<span style=\"color: gray\">));<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: blue\">insert t2<span style=\"color: gray\">(col1<span style=\"color: gray\">, col2<span style=\"color: gray\">, col3<span style=\"color: gray\">) <span style=\"color: blue\">values <span style=\"color: gray\">(@i<span style=\"color: gray\">, @i <span style=\"color: gray\">+ 1<span style=\"color: gray\">, <span style=\"color: fuchsia\">REPLICATE<span style=\"color: gray\">(<span style=\"color: red\">&#8216;t&#8217;<span style=\"color: gray\">, @random<span style=\"color: gray\">));<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">set<span style=\"font-size: 9.5pt;font-family: Consolas\"> @i <span style=\"color: gray\">= @i <span style=\"color: gray\">+ 1<span style=\"color: gray\">;<\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">end<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: green\">&#8212; add a foreign key on column id to table t2 that references the table t1 on column id <\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">alter<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: blue\">table dbo<span style=\"color: gray\">.t2<\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">add<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: blue\">constraint FK_t2_id <span style=\"color: blue\">foreign <span style=\"color: blue\">key <span style=\"color: gray\">(id<span style=\"color: gray\">) <span style=\"color: blue\">references dbo<span style=\"color: gray\">.t1<span style=\"color: gray\">(id<span style=\"color: gray\">);<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">go<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: green\">&#8212; create a nonclustered covered index on table t1<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">create<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: blue\">nonclustered <span style=\"color: blue\">index idx_t2_col1<\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">on<span style=\"font-size: 9.5pt;font-family: Consolas\"> dbo<span style=\"color: gray\">.t2<span style=\"color: gray\">( col1<span style=\"color: gray\">, col2<span style=\"color: gray\">) <span style=\"color: blue\">include <span style=\"color: gray\">( col3 <span style=\"color: gray\">);<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">go<\/span><\/div>\n<p>At this point we have two tables named t1 and t2. Table t2 has a foreign key constraint on the id column that references the table t1 on the column with the same name.<\/p>\n<p>Now let\u2019s corrupt a data page in the clustered index on the table t1. First, we will find the first data page in the clustered index of the table t1:<\/p>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: green\">&#8212; get the first data page on the t1 table clustered index<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">dbcc<span style=\"font-size: 9.5pt;font-family: Consolas\"> ind<span style=\"color: gray\">(<span style=\"color: red\">&#8216;corrupt&#8217;<span style=\"color: gray\">, <span style=\"color: red\">&#8216;dbo.t1&#8217;<span style=\"color: gray\">, 1<span style=\"color: gray\">);<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">go<\/span><\/div>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_14_-_dbcc_checkb_corrupt_-_1.jpg\" alt=\"blog_14_-_dbcc_checkb_corrupt_-_1\" width=\"581\" height=\"144\" \/><\/p>\n<p>Then we will find the first row. The first row is stored in slot 0 which is located at offset 0x060.<\/p>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: green\">&#8212; Display dump page id = 15<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">dbcc<span style=\"font-size: 9.5pt;font-family: Consolas\"> traceon<span style=\"color: gray\">(3604<span style=\"color: gray\">);<\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">go<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">dbcc<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: blue\">page <span style=\"color: gray\">(<span style=\"color: red\">&#8216;corrupt&#8217;<span style=\"color: gray\">, 1<span style=\"color: gray\">, 15<span style=\"color: gray\">, 3<span style=\"color: gray\">);<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">go<\/span><\/div>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_14_-_dbcc_checkb_corrupt_-_2.jpg\" alt=\"blog_14_-_dbcc_checkb_corrupt_-_2\" width=\"567\" height=\"243\" \/><\/p>\n<p>Now it\u2019s time to corrupt the id column (id = 1) located to the offset 0x4 in the row. That means we have to place to the offset 0x60 + 0x4 to corrupt this column.<\/p>\n<p>We will use the DBCC WRITEPAGE undocumented command to corrupt our page (again, a big thanks to Paul Randal for showing us how to use this command for testing purposes).<\/p>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: green\">&#8212; corrupt the concerned page<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">alter<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: blue\">database corrupt <span style=\"color: blue\">set <span style=\"color: blue\">single_user<span style=\"color: gray\">;<\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">go<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">dbcc<span style=\"font-size: 9.5pt;font-family: Consolas\"> writepage<span style=\"color: gray\">(<span style=\"color: red\">&#8216;corrupt&#8217;<span style=\"color: gray\">, 1<span style=\"color: gray\">, 15<span style=\"color: gray\">, 100<span style=\"color: gray\">, 1<span style=\"color: gray\">, 0x00<span style=\"color: gray\">, 1<span style=\"color: gray\">)<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">alter<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: blue\">database corrupt <span style=\"color: blue\">set <span style=\"color: blue\">multi_user<span style=\"color: gray\">;<\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">go<\/span><\/div>\n<p>&nbsp;<\/p>\n<p>Now if we take a look at the page id=15, we notice that the id column value is now changed from 1 to 0.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_14_-_dbcc_checkb_corrupt_-_3.jpg\" alt=\"blog_14_-_dbcc_checkb_corrupt_-_3\" width=\"574\" height=\"237\" \/><\/p>\n<p>Ok, let\u2019s run a DBCC CHECKDB command:<\/p>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: green\">&#8212; perform an integrity check with dbcc checkdb<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">dbcc<span style=\"font-size: 9.5pt;font-family: Consolas\"> checkdb<span style=\"color: gray\">(<span style=\"color: red\">&#8216;corrupt&#8217;<span style=\"color: gray\">) <span style=\"color: blue\">with <span style=\"color: blue\">no_infomsgs<span style=\"color: gray\">, <span style=\"color: blue\">all_errormsgs<span style=\"color: gray\">;<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">go<\/span><\/div>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_14_-_dbcc_checkb_corrupt_-_4.jpg\" alt=\"blog_14_-_dbcc_checkb_corrupt_-_4\" width=\"274\" height=\"53\" \/><\/p>\n<p>As you can see, the dbcc checkdb command does not detect any corruption! Now, let\u2019s run the following statements:<\/p>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: green\">&#8212; first query<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">select<span style=\"font-size: 9.5pt;font-family: Consolas\"> t2<span style=\"color: gray\">.col2<span style=\"color: gray\">, t2<span style=\"color: gray\">.col3<\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">from<span style=\"font-size: 9.5pt;font-family: Consolas\"> dbo<span style=\"color: gray\">.t2<\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: gray\">join dbo<span style=\"color: gray\">.t1<\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">on<span style=\"font-size: 9.5pt;font-family: Consolas\"> t1<span style=\"color: gray\">.id <span style=\"color: gray\">= t2<span style=\"color: gray\">.id<\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">where<span style=\"font-size: 9.5pt;font-family: Consolas\"> t2<span style=\"color: gray\">.col1 <span style=\"color: gray\">= 1<\/span><\/span><\/span><\/span><\/div>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_14_-_dbcc_checkb_corrupt_-_5.jpg\" alt=\"blog_14_-_dbcc_checkb_corrupt_-_5\" width=\"146\" height=\"53\" \/><\/p>\n<p>Do you notice that reading the corrupted page does not trigger an error in this case?<\/p>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: green\">&#8212; second query<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">select<span style=\"font-size: 9.5pt;font-family: Consolas\"> t2<span style=\"color: gray\">.col2<span style=\"color: gray\">, t2<span style=\"color: gray\">.col3, t1.col1<\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">from<span style=\"font-size: 9.5pt;font-family: Consolas\"> dbo<span style=\"color: gray\">.t2<\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: gray\">join dbo<span style=\"color: gray\">.t1<\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">on<span style=\"font-size: 9.5pt;font-family: Consolas\"> t1<span style=\"color: gray\">.id <span style=\"color: gray\">= t2<span style=\"color: gray\">.id<\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">where<span style=\"font-size: 9.5pt;font-family: Consolas\"> t2<span style=\"color: gray\">.col1 <span style=\"color: gray\">= 1<\/span><\/span><\/span><\/span><\/div>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_14_-_dbcc_checkb_corrupt_-_6.jpg\" alt=\"blog_14_-_dbcc_checkb_corrupt_-_6\" width=\"143\" height=\"27\" \/><\/p>\n<p>As you can notice, adding the t1.col1 column to the query will give it a different result between the both queries. Strange behavior isn\u2019t it? In fact, the two queries above don\u2019t use the same execution plan as the following below:<\/p>\n<p><strong>Query 1:<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_14_-_dbcc_checkb_corrupt_-_7.jpg\" alt=\"blog_14_-_dbcc_checkb_corrupt_-_7\" width=\"288\" height=\"87\" \/><\/p>\n<p><strong>Query 2:<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_14_-_dbcc_checkb_corrupt_-_8.jpg\" alt=\"blog_14_-_dbcc_checkb_corrupt_-_8\" width=\"498\" height=\"180\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>In the query 1, due to the foreign key constraint, the query execution engine doesn\u2019t need to join t2 to t1 to retrieve data because we need only data already covered by the idx_t2_col1 index on table t2. However the story is not the same with the query 2. Indeed, we want to retrieve an additional value provided by the col1 column from the table t1. In this case SQL Server has to join t1 and t2 because the covered index idx_t2_col1 cannot provide all the data we need. But remember we had corrupt the id column of the primary key of the table t1 by changing the value from 1 to 0. This is why the query 2 doesn\u2019t display any results.<\/p>\n<p>The main question here is: why dbcc checkdb doesn\u2019t detect the corruption? Well, in this case corruption has occurring directly on the data value and dbcc checkdb doesn\u2019t have a verification mechanism to detect a corruption issue. Having a checksum value stored in the page would help dbcc checkdb operation in this case because it could compare a computed checksum while reading the page with the stored checksum stored on it.<\/p>\n<p>Below the output provided by dbcc checkdb command if checksum page verify option was enabled for the database \u2026<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_14_-_dbcc_checkb_corrupt_-_9.jpg\" alt=\"blog_14_-_dbcc_checkb_corrupt_-_9\" width=\"630\" height=\"33\" \/><\/p>\n<p>\u2026 or when we ran the query used earlier:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_14_-_dbcc_checkb_corrupt_-_10.jpg\" alt=\"blog_14_-_dbcc_checkb_corrupt_-_10\" width=\"790\" height=\"89\" \/><\/p>\n<h3>My conclusion:<\/h3>\n<p>Do not hesitate to change your page verify option value when it is configured to &#8220;none&#8221;.<\/p>\n<p><span style=\"float: none;background-color: #ffffff;color: #333333;cursor: text;font-family: Georgia,'Times New Roman','Bitstream Charter',Times,serif;font-size: 16px;font-style: normal;font-variant: normal;font-weight: 400;letter-spacing: normal;text-align: left;text-decoration: none;text-indent: 0px;text-transform: none\">By David Barbarin<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>During my audits at customer places, it still happens very often to find SQL Server databases with page verification option configured to &#8220;none&#8221;. I always alert my customers on this configuration point because it can have an impact on the overall integrity of their databases. One of my customer told me that the integrity task [&hellip;]<\/p>\n","protected":false},"author":26,"featured_media":3861,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[198],"tags":[51,265,54,52,434],"type_dbi":[],"class_list":["post-3860","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-database-management","tag-sql-server","tag-sql-server-2008","tag-sql-server-2012","tag-sql-server-2014","tag-sql-server-audit"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>SQL Server: DBCC CHECKDB does not detect corruption - dbi Blog<\/title>\n<meta name=\"description\" content=\"During my audits at customer places, it still happens very often to find SQL Server databases with page verification option configured to &quot;none&quot;. I always alert my customers on this configuration point because it could have an impact to the overall integrity of their databases.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL Server: DBCC CHECKDB does not detect corruption\" \/>\n<meta property=\"og:description\" content=\"During my audits at customer places, it still happens very often to find SQL Server databases with page verification option configured to &quot;none&quot;. I always alert my customers on this configuration point because it could have an impact to the overall integrity of their databases.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2014-08-04T06:12:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_14_-_dbcc_checkb_corrupt_-_1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"702\" \/>\n\t<meta property=\"og:image:height\" content=\"174\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Microsoft Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Microsoft Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/\"},\"author\":{\"name\":\"Microsoft Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\"},\"headline\":\"SQL Server: DBCC CHECKDB does not detect corruption\",\"datePublished\":\"2014-08-04T06:12:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/\"},\"wordCount\":941,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_14_-_dbcc_checkb_corrupt_-_1.jpg\",\"keywords\":[\"SQL Server\",\"SQL Server 2008\",\"SQL Server 2012\",\"SQL Server 2014\",\"SQL Server Audit\"],\"articleSection\":[\"Database management\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/\",\"name\":\"SQL Server: DBCC CHECKDB does not detect corruption - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_14_-_dbcc_checkb_corrupt_-_1.jpg\",\"datePublished\":\"2014-08-04T06:12:00+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\"},\"description\":\"During my audits at customer places, it still happens very often to find SQL Server databases with page verification option configured to \\\"none\\\". I always alert my customers on this configuration point because it could have an impact to the overall integrity of their databases.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_14_-_dbcc_checkb_corrupt_-_1.jpg\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_14_-_dbcc_checkb_corrupt_-_1.jpg\",\"width\":702,\"height\":174},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SQL Server: DBCC CHECKDB does not detect corruption\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\",\"name\":\"Microsoft Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"caption\":\"Microsoft Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/microsoft-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"SQL Server: DBCC CHECKDB does not detect corruption - dbi Blog","description":"During my audits at customer places, it still happens very often to find SQL Server databases with page verification option configured to \"none\". I always alert my customers on this configuration point because it could have an impact to the overall integrity of their databases.","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:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/","og_locale":"en_US","og_type":"article","og_title":"SQL Server: DBCC CHECKDB does not detect corruption","og_description":"During my audits at customer places, it still happens very often to find SQL Server databases with page verification option configured to \"none\". I always alert my customers on this configuration point because it could have an impact to the overall integrity of their databases.","og_url":"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/","og_site_name":"dbi Blog","article_published_time":"2014-08-04T06:12:00+00:00","og_image":[{"width":702,"height":174,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_14_-_dbcc_checkb_corrupt_-_1.jpg","type":"image\/jpeg"}],"author":"Microsoft Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Microsoft Team","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/"},"author":{"name":"Microsoft Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4"},"headline":"SQL Server: DBCC CHECKDB does not detect corruption","datePublished":"2014-08-04T06:12:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/"},"wordCount":941,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_14_-_dbcc_checkb_corrupt_-_1.jpg","keywords":["SQL Server","SQL Server 2008","SQL Server 2012","SQL Server 2014","SQL Server Audit"],"articleSection":["Database management"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/","url":"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/","name":"SQL Server: DBCC CHECKDB does not detect corruption - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_14_-_dbcc_checkb_corrupt_-_1.jpg","datePublished":"2014-08-04T06:12:00+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4"},"description":"During my audits at customer places, it still happens very often to find SQL Server databases with page verification option configured to \"none\". I always alert my customers on this configuration point because it could have an impact to the overall integrity of their databases.","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_14_-_dbcc_checkb_corrupt_-_1.jpg","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_14_-_dbcc_checkb_corrupt_-_1.jpg","width":702,"height":174},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/when-dbcc-checkdb-doesnt-detect-corruption\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"SQL Server: DBCC CHECKDB does not detect corruption"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4","name":"Microsoft Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","caption":"Microsoft Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/microsoft-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/3860","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/26"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=3860"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/3860\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/3861"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=3860"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=3860"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=3860"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=3860"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}