发现数据库损坏如何监控

2016-07-10 13:28:28 7578

在我们知道可能造成数据库的损坏原因之后,接下来我们来看SQL Server是如何监测数据库页损坏的。

SQL Server的数据库级别,可以设置页保护类型,一共有三个选项:NoneCheckSumTorn_Page_Detection,如图1所示:

blob.png

关于这三种选项,首先,请无视None,请不要在任何场景下选择该选项,该选项意味着SQL Server不对页进行保护。

其次是TORN_PAGE_DETECTION,在SQL Server中,数据的最小单位是页,每一页是8K,但是对应磁盘上往往是16512字节的扇区,如果一个页在写入持久化存储的过程中,

只写了一半的页,这就是所谓的TORN_PAGE_DETECTIONSQL Server通过每个扇区提512?节中前2位作为元数据,总共16个扇区324字节的元数据(页头中标识为:m_tornBits),

通过该元数据来检测是否存在部分写的TORN_PAGE,但该类型的页验证无法检测出页中的写入错误,因此在SQL Server 2005及以上版本,尽量选择CheckSum

SQL Server 2005及以上版本,引入了CheckSumCheckSum可以理解为校验和,当数据页被写入持久化存储时,会根据页的值计算出一个4字节的CheckSum存于页头(页头中标识同为:m_tornBits),

和数据在同一页中一起保存在数据库中。当数据从IO子系统被读取到内存中时,SQL Server会根据页内的值再次计算CheckSum,用该重新计算的


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: