文件修复

如何计划腐败检查SQL Server数据库?

简介:这个详细的指南涵盖了你需要知道的一切关于计划检查所有SQL Server数据库的损坏。本文讨论了执行数据库一致性检查的一些有效解决方案。该指南还建议如果SQL数据库损坏并且无法访问,您可以做些什么。

目录
SQL Server数据库的损坏检查计划
  • 为数据库页启用CHECKSUM
  • 带校验和执行备份命令
  • 使用TABLOCK提示运行DBCC CHECKDB无错误
  • 运行脚本检查SQL数据库的致命损坏
  • 如果SQL Server发现腐败怎么办
  • 如何修复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软件可以帮助您将数据库恢复到原始状态,所有数据都完好无损。

    进步
    76% 的人认为这篇文章有帮助