Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
校验和用于确定数据库页是否已在磁盘上进行了修改。SQL Anywhere 支持两种类型的校验和:全局校验和与写入校验和。
全局校验和在数据库创建时启用。在您创建启用全局校验和的数据库时,在将每一页写入磁盘前为其计算校验和。下次从磁盘中读取该页时,就会重新计算该页的校验和,并将其与该页上存储的校验和进行比较。如果校验和不同,说明页面在磁盘中已被修改,并发生错误。
可通过执行以下语句来检查创建数据库时是否启用了全局校验和:
SELECT DB_PROPERTY ( 'Checksum' );
如果开启了全局校验和,则此查询将返回 ON,否则将返回 OFF。
ALTER DATABASE 语句的 CHECKSUM 子句可让您禁用现有数据库的全局校验和。不建议禁用校验和。禁用全局校验和之后,就无法再启用它们。可以使用 -wc+ 选项来启用数据库的写入校验和,或重建启用了校验和的数据库。
缺省情况下,使用 SQL Anywhere 版本 10 和版本 11 创建的数据库未启用全局校验和。如果在 SQL Anywhere 版本 12 或更高版本的数据库服务器上启动由版本 11 创建的数据库,则在缺省情况下,该数据库服务器会创建写入校验和,即仅当写入磁盘时才添加到页面的校验和。
缺省情况下,版本 12 和更高版本的数据库会启用全局校验和。如果创建了新数据库并禁用该数据库的全局校验和,可通过使用 -wc+ 选项或 START DATABASE 语句启用写入校验和。
可通过执行以下语句来检查数据库是否使用写入校验和启动:
SELECT DB_PROPERTY ( 'WriteChecksum' );
如果校验和仅当页面写入磁盘时启用,此查询将返回 ON(这是因为启用了全局校验和或写入校验和);否则将返回 OFF。
请参见:
在以下情况中,将为数据库启用写入校验和,而无论在创建数据库时是否指定全局校验和设置:
重要页 无论是否启用全局校验和,数据库服务器都会计算所有数据库中重要数据库页面的写入校验和。这些校验和用于检测脱机损坏情况,这有助于减少由于重要页面发生错误而损坏其它数据的可能。因为数据库服务器会计算这些校验和,因此,如果没有启用校验和的数据库损坏,则数据库服务器会因出现致命错误而关闭。
同样,如果您校验到数据库没有启用全局校验和,但有一个错误的重要页面,则 dbvalid 仍可以返回有关校验和违规的警告。
Windows Mobile 数据库 数据库服务器自动为在 Windows Mobile 上运行的数据库启用写入校验和,以帮助尽早地检测到数据库文件是否损坏。
在某些存储介质上运行的数据库 当数据库在可能不太安全的存储介质(例如网络或可移除驱动器)上运行时,数据库服务器会自动为数据库启用写入校验和。只要数据库保存在这样一台设备上写入校验和就保持启用状态,并在页面写入时对其进行校验和检查。如果数据库移动到更可靠的存储设备上,则当已校验和的页进入数据库服务器高速缓存时数据库服务器会校验这些页的校验和。
您可以校验使用全局或写入校验和的数据库的磁盘页。如果数据库启用了全局校验和,则所有数据库页都要进行校验。如果数据库只使用写入校验和,则只校验带有校验和的页面。校验和校验需要 DBA 或 VALIDATE 权限。
对于启用了校验和的数据库,会为每个数据库页计算校验和,并在该页写入磁盘时存储该值。可以使用校验实用程序 (dbvalid)、VALIDATE 语句、sa_validate 系统过程或 Sybase Central 中的 [校验数据库向导] 执行校验和校验,这包括从磁盘读取数据库页并计算页面的校验和。如果计算出的校验和与页面的存储校验和不匹配,则说明该页面在磁盘上时或写入页面时可能已被修改或者已损坏。如果有一个或多个页面已损坏,则会返回错误,并在数据库服务器消息窗口中显示有关该无效页的信息。
校验表