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