从旧的实例升级上来的数据库不会自动开启页校验和,除非你显式使用ALTER DATABASE databasename SET PAGE_VERIFY CHECKSUM进行开启。而在SQL Server 2005或2008新建的数据库页校验和是默认开启的
在SQL Server中,页校验和是一个非常重要的功能,它涉及到数据完整性和存储系统的健康状况。页校验和主要用于检测数据库页在传输、存储或读取过程中可能发生的错误,但并不能纠正这些错误。以下是关于页校验和的一些关键知识点:
1. **页校验和的启用**:
- 对于从SQL Server 2000或更早版本升级的数据库,页校验和不会自动开启。必须使用`ALTER DATABASE`命令,指定`PAGE_VERIFY CHECKSUM`选项,才能启用这一功能。
- 相反,在SQL Server 2005及以后的版本中,创建新的数据库时,默认情况下页校验和是开启的。
2. **页校验和的作用**:
- 页校验和用于检测数据页是否在磁盘上出现损坏。它并不具备纠错能力,也就是说,如果检测到不一致,系统会报告错误,但无法自动修复问题。
- 当数据库页被修改(如重建索引或直接更新数据)时,系统会计算新的校验和,并将其存储在页头中。
3. **页校验和的添加**:
- 开启页校验和后,并不会立即对所有数据库页进行校验和计算。校验和只会在页被修改时添加或更新,不是在读取页时完成的。
- 只有在页被加载到缓冲池(Buffer Pool)并在那里进行修改后,新的校验和才会被写回磁盘。
4. **页验证模式转换**:
- 如果将数据库的页验证模式从撕页检测(Torn-Page Detection)切换到页校验和,现有页的验证模式并不会自动改变。只有在页被修改后,新的验证模式才会生效。这意味着数据库的不同部分可能存在不同的页验证模式。
- 在转换过程中,撕页检测的保护信息不会丢失,除非页被修改。
5. **错误检测的时机**:
- 页校验和的检查通常在页被读入内存的缓冲池后进行。这意味着在读取过程中发生的错误可能不会立即被发现,直到页被验证时才暴露出来。
6. **Gail Shaw的观点**:
- SQL Server MVP Gail Shaw指出,页校验和的检查并非实时进行,受损的页在进入缓冲池并进行有效性验证前不会被检测到。
了解这些关于页校验和的误区和事实,对于SQL Server的管理员来说至关重要,因为它们可以帮助防止和诊断由于硬件故障、软件错误或其他原因导致的数据损坏问题。及时开启和理解页校验和功能,能够提高数据安全性,减少潜在的灾难性数据丢失风险。