Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
对当前数据库或当前数据库中的单个表、实例化视图或索引进行校验。
VALIDATE { CHECKSUM | DATABASE }
VALIDATE { TABLE [ owner.]table-name | MATERIALIZED VIEW [ owner.]materialized-view-name } [ WITH EXPRESS CHECK ]
VALIDATE { INDEX index-name | [ INDEX ] FOREIGN KEY role-name | [ INDEX ] PRIMARY KEY } ON [ owner.]object-name
object-name : table-name | materialized-view-name
VALIDATE TEXT INDEX index-name ON [ owner.]table-name
使用 VALIDATE CHECKSUM 语句对数据库每个页面上的校验和进行校验。VALIDATE CHECKSUM 语句可确保数据库页没有在磁盘上被修改。创建启用了校验和的数据库时,在将每一数据库页写入磁盘前会为其计算校验和。VALIDATE CHECKSUM 从磁盘直接读取每个数据库页面—不通过数据库服务器高速缓存—然后计算每个页面的校验和。如果为页面计算出的校验和与存储的该页面的校验和不匹配,就会发生错误,并在数据库服务器消息窗口中显示关于该无效页的信息。对于禁用了校验和的数据库,不建议使用 VALIDATE CHECKSUM 语句,因为它会从磁盘读取整个数据库。
使用 VALIDATE DATABASE 语句确保自由映射将页面正确标识为已分配或自由,并且未孤立任何 BLOB。VALIDATE DATABASE 同样执行校验和校验,并会验证是否每个数据库页面都属于正确的对象。例如,在表页面上,表 ID 必须标识一个有效的表,且此表的定义必须在其表页面的集合中包括当前页面。VALIDATE DATABASE 语句可将页面按顺序引入到数据库服务器的高速缓存中。这会导致其校验(作为数据库服务器)始终验证被引入到高速缓存中的页面内容和校验和。如果在数据库清理程序运行期间启动数据库校验,该校验需等待数据库清理程序结束运行后才能运行。
VALIDATE TABLE 语句通过检查数据库表中所有行集合和值是否与各个索引中包含的行集合和值匹配,来验证指定的表及其所有索引。VALIDATE TABLE 还会遍历所有表的 BLOB、验证 BLOB 分配映射并检测孤立的 BLOB。VALIDATE TABLE 语句将检查表索引页的物理结构,并验证索引散列值的顺序以及索引的唯一性要求(如果指定任何一项)。对于外键索引,除非指定了 WITH EXPRESS CHECK 子句,否则将在主键表中查找每个值,以验证参照完整性是否没有改变。由于 VALIDATE TABLE 语句(例如 VALIDATE DATABASE)使用数据库服务器的高速缓存,因此数据库服务器也会验证表及其索引使用的所有页面的校验和与基本有效性。
VALIDATE INDEX 语句执行与 VALIDATE TABLE 语句相同的操作,唯一的不同之处在于它仅验证指定的索引及其基础表;对其它索引将不会进行检查。对于外键索引,除非指定了 WITH EXPRESS CHECK 子句,否则将在主键表中查找每个值,以验证参照完整性是否没有改变。指定 WITH EXPRESS CHECK 子句将禁用参照完整性检查,从而显著提高性能。如果指定的索引不是外键索引,WITH EXPRESS CHECK 将不会起到任何效果。
使用 VALIDATE TEXT INDEX 语句验证索引中术语的位置信息未受影响。如果位置信息受到影响,将会产生错误,必须重建文本索引。无论文本索引是自动还是手动索引,都可以通过执行 REFRESH TEXT INDEX 语句来重建文本索引。
如果生成的错误涉及快速文本索引,则必须删除该快速索引然后再重建一个。
应在没有任何连接对数据库进行更改时对表或整个数据库进行校验;否则,可能会报告错误,指出某种形式的数据库损坏,而实际上并没有任何损坏。
必须具有 VALIDATE ANY OBJECT 系统特权。
无。
SQL/2008 服务商扩充。
以下示例校验 Products 表:
VALIDATE TABLE GROUPO.Products;