编者注:Robert L Davis是微软的高级数据库管理员和专家,同时是《SQL Server》杂志的撰稿人,并合著《Pro SQL Server 2008 Mirroring》一书。
SQL Server提供了一项用来检测数据损坏、非常关键的内置功能,叫做“页校验”(page verification)。当你运行查询语句,出现烦人的损坏警报时,正是页校验检测到了损坏。最重要的是,***把页校验选项设置为新数据库的默认选项。你不需要做任何事情就可以用这个选项保护数据库。
页校验和也就是我之前提到过的在备份和恢复中使用CHECKSUM进行的额外检测(具体阅读《DBA 五大致命失误:你的备份可靠吗?》)。启用该选项,SQL Server会计算整个页面的校验和,把这个值存于页头。当页被读取到内存时,SQL Server会再次计算校验和,和页头存储的校验和进行比较。如果两个校验和不一致,SQL Server就会认为该页被损坏,出现错误824的警报。如果校验和存储在页头,用CHECKSUM选项检测任何被校验和保护的的数据页是否存在损坏,SQL Server会在备份和恢复期间进行计算。
在SQL Server的数据库级别,可以设置页保护类型,页校验一共有三个选项:CheckSum,Torn Page Detection和None。使用这些选项所花费的功夫可能看似微不足道,但如果不使用这些选项可能会对数据库造成灾难性的影响。只有从SQL Server 2000或更早版本进行升级时,你才需要查看一下选项设置,以确保启用了页验证来保护数据库。***是选择CHECKSUM作为页校验选项,这也是SQL Server 2005及以后版本的默认选项。SQL Server 2000的默认选项Torn Page Detection;在此之前,你无法配置页校验。换而言之,NONE从来都不是页校验的默认选项。如果你的数据库禁用页校验,那一定是有人更改了设置。
我认为,如果DBA把页校验选项选择为NONE,这要不就是故意破坏,要不就是水平太低。无论是何种情况,这名DBA都不应允许管理SQL Server。这个错误能够并且应该让你被炒鱿鱼,因为这是故意的行为。