02-SQLServer数据库页校验(IO校验)的几种方式

一、总结

1、SQLServer数据库的页校验(IO校验)方式有三种:CHECKSUM(默认)、TORN_PAGE_DETECTION、NONE。

2、SQLServer数据库的页校验机制对数据文件(mdf)和日志文件(ldf)都生效。

3、数据库查看方式

4、三种校验方式的原理和区别

CHECKSUM(默认):

  在向磁盘中写入页面时,对整个页面做checksum,也就是计算整个页面的校验和值,返回值是int类型,并将该值保存在页眉中。在读取页面时重新计算校验和值与页眉中保存的值进行比较,如果2个值不匹配,将同时在SQLServer错误日志和windows事件日志中报告错误消息824(校验和失败,即存在I/O问题)。

 TORN_PAGE_DETECTION:

  在向磁盘中写入页面时,将每个512字节扇区的特定2位模式保存在页头中,也就是页头中的残缺位。当从磁盘中读取页面时,页头中存储的残缺位与实际扇区信息进行比较,如果值不匹配,表明只有页面的一部分写入磁盘。这时SQLServer错误日志和Windows事件日志也会报错误消息824(这种叫页撕裂错误)。

NONE:

  该种模式下,数据页写入不会生成CHECKSUM或TORN_PAGE_DETECTION值。在读取过程中,即便页面中保存有这2个值,SQLServer也不会校验。

5、SQLServer将对因校验和值、页撕裂或其他IO错误而失败的任何读取都重试四次。如果其中的一次重试成功,则会向错误日志写入一条消息,读取的命令继续执行;如果重试失败,则读取的命令失败,错误日志里写入824错误消息。

6、TORN_PAGE_DETECTION使用的资源少,保护级别低,CHECKSUM使用的资源多,但是提供更多的保护。

7、设置数据库的页校验模式时,无需使数据库脱机、锁定数据库或阻止其他方式访问数据库,即可修改PAGE_VERIFY的值。

8、修改页校验的脚本

(1).设置页校验(IO校验)为CHECKSUM
alter database payment set page_verify checksum

(2).设置页校验(IO校验)为TORN_PAGE_DETECTION
alter database payment set page_verify torn_page_detection

(3).设置页校验(IO校验)为NONE
alter database payment set page_verify none

原文地址:https://www.cnblogs.com/jialanyu/p/12987511.html