目录 SQL Server数据库的损坏检查计划 |
数据库损坏是每个SQL DBA都会想到的问题。虽然像损坏的数据页面、严重错误的查询失败等事件都是数据库损坏的证据,但它有时不会被注意到,除非数据库关闭并且不会重新启动。因此,计划SQL Server数据库损坏检查是很重要的。
SQL Server数据库的损坏检查计划
以下是计划在SQL Server数据库上运行一致性检查时可以使用的一些方法。
为数据库页启用CHECKSUM
将PAGE_VERIFY数据库选项设置为CHECKSUM有助于验证数据库页面的一致性。
启用CHECKSUM后,数据库页面被写入磁盘,SQL Server数据库引擎会计算整个页面的校验和,并将该值存储在页头中。
当从磁盘读取页时,校验和将与页标头中存储的校验和值进行比较。如果校验和不匹配,SQL Server报告如下错误,则认为数据库页面已损坏823、824或825。
在SQL Server Management Studio (SSMS)中启用VERIFY_PAGE数据库选项的步骤如下:
- 从对象资源管理器中,右键单击一个数据库,然后单击属性.
- 在“数据库属性”窗口中,单击选项在“选择页面”下。
- 接下来,导航到“恢复”部分,选择校验和页面验证下拉列表。
你也可以通过运行下面的TSQL代码将PAGE_VERIFY db选项更改为CHECKSUM:
修改数据库 设置page_verify的校验和为no_wait; |
使用CHECKSUM执行备份命令
在执行数据库备份过程时,执行带有CHECKSUM选项的备份命令。在整个备份上计算校验和。
您可以通过运行RESTORE或RESTORE VERIFY_ONLY轻松检测备份文件是否被修改或损坏。
带CHECKSUM选项的备份命令如下:
备份数据库 到磁盘= ' X: \ SQLServerBackups \ dbname.bak” 校验和; |
使用TABLOCK提示运行DBCC CHECKDB无错误
尝试从备份恢复SQL数据库2008时,可能会出现导致恢复过程失败的错误。在数据库上运行DBCC CHECKDB命令可能会进一步返回以下错误:
Msg 8967,级别16,状态216,服务器服务器名="",第2行
DBCC中发生内部错误,阻止了进一步处理。请联系客户支持。
DBCC结果为'数据库名称=""'。
Msg 8921,级别16,状态1,服务器服务器名="",行1
检查终止。在收集事实时发现了一个错误。可能是tempdb空间不足或系统表不一致。检查以前的错误。
如果CHECKDB命令不能在数据库上运行必要的一致性检查,就会出现这种问题。由于损坏的数据库快照或元数据不一致,检查可能失败。
您可以通过执行带有TABLOCK提示的DBCC CHECKDB命令来解决这个问题——这有助于命令成功运行而不会生成任何错误。看到这个微软指南查看TABLOCK提示的详细信息。
运行脚本检查SQL数据库的致命损坏
有时,数据库中的严重损坏可能会阻止DBCC运行。或者,如果DBCC CHECKDB命令完成了,这并不一定意味着该命令成功完成——如果检查输出的末尾,可能会发现错误,表明CHECKDB命令不能继续执行。例如,您可能会收到以下错误。
电话号码7995,16层,状态1号线
数据库'Database':系统目录中的一致性错误阻止进一步的DBCC checkdb处理。
Paul Randal提供了一个很好的脚本来检查阻止DBCC CHECKDB成功运行或执行的致命损坏。
使用主; 去 ——sys.syshobts的IAM链损坏 DBCC CHECKDB(已损坏的db1) no_infomsgs, all_errormsgs; 去 ——元数据层发现的损坏关于发动机 DBCC CHECKDB(损坏的db2) no_infomsgs, all_errormsgs; 去 |
如果DBCC CHECKDB无法通过SQL db中的致命损坏,则无法运行修复操作。唯一的方法是从备份中恢复,或者尝试从数据库文件中提取尽可能多的数据。
如果SQL Server发现腐败怎么办?
如果您遇到数据库损坏,在采取任何行动之前,请阅读此博客。当DBCC CHECKDB报告腐败时该怎么办布伦特·奥扎尔(Brent Ozar)。在博客中,Brent讨论了当腐败发生时你必须采取的行动清单。这些行动包括禁用backup-delete工作,查询“msdb.dbo。susect_pages表,通知所有涉众有关数据库损坏的信息,等等。
此外,他还谈到了采取一些积极的措施来防止数据库损坏。其中一些措施包括设置电子邮件警报以发现损坏背后的I/O问题,增加DBCC CHECKDB检查数据库的频率,使用CHECKSUM进行备份,了解您的RPO和RTO等等。
一旦您知道了在SQL数据库中遇到损坏时需要做的事情,下一步就是修复该数据库文件或从中提取数据。
如何修复SQL Server数据库损坏?
除了拥有频繁的、经过测试的备份(可以用来恢复最近的数据副本和重新构建损坏的页面),准备充分的dba还必须拥有正确的工具,可以在不修改原始数据的情况下修复每一个信息。恒星修复MS SQL是一个这样的工具,您可以依靠修复损坏的数据库文件(MDF)和检索所有数据。

的SQL修复工具使用并行处理技术保存多个表,以便同时进行更快的数据库恢复操作。
结论
损坏随时都可能发生,导致数据库不可访问,无法使用。但是您不应该等待SQL Server数据库崩溃。您可以计划使用本文中讨论的方法在数据库上运行一致性检查,包括使用CHECKSUM启用VERIFY_PAGE选项、使用CHECKSUM运行备份以及设置警报。如果您在SQL数据库中遇到损坏,使用Stellar Repair for MS SQL软件可以帮助您将数据库恢复到原始状态,所有数据都完好无损。