Microsoft SQL Server数据库中的损坏并不常见,但是对于任何DBA来说,它绝对是最令人担忧的情况之一。 因此,您需要为这种情况做好准备。 如果确实发生损坏,则可以在以前进行的备份的帮助下还原数据库。

但是,如果您没有备份,情况可能会变得更糟。 这是一个高风险的问题,您需要确保您有丰富的经验来处理此类问题。 或者您的团队中有人处理过这种情况。

造成腐败的原因可能有多种,首先需要确定这一点。 原因可能很小或很大。 并且,根据数据库中发生的损坏类型,消除该损坏的方法也会有所不同。 可能只是一个小错误,可以快速修复而不会丢失任何数据,或者数据库已完全损坏,唯一的恢复方法是通过备份。

在大多数情况下,完全的数据库损坏并不是全部发生。 如果您试图修复数据库,但您对整个过程不熟悉,则可能导致您甚至进一步破坏数据库。 因此,建议仅与专家一起执行此还原过程。


如何在MS SQL Server数据库中检测损坏



如果您感觉到数据库有问题或数据库行为异常,那么要做的第一件事就是运行CHECKDB命令。 如果数据库有任何与分配或损坏有关的问题,此命令将给出错误。

知道数据库有问题的另一种方法是,当用户尝试查询表时,即使他有权访问该特定表,他也无法获取数据。

如果您的数据库已经物理损坏,那么通过数据库进行访问的方法就是使用服务器模板,但这还取决于您正在使用的SQL Server。 服务器模板方法仅在使用SQL Server 2008或更高版本时才有效。 您需要做的是复制数据库模板,然后将此副本移到


实例根目录中存在Binn / Templates文件夹。

但是,如果数据库中发生物理损坏,并且使用的是SQL Server 2008之前的版本,或者数据库出现逻辑损坏,会发生什么情况?

好吧,我们已经找到答案了。


如何修复MS SQL Server数据库损坏


步骤1-尝试重建损坏的SQL Server数据库



在此步骤中,您将必须重建损坏的数据库,并且在执行此操作时,必须避免与该特定数据库的任何连接。

  1. 为此,您必须使用跟踪标志3608启动MS SQL Server。通过此跟踪标志,仅主数据库将被恢复。
  2. 您需要做的第一件事是停止SQL Server实例。 此外,关闭与之相关的所有其他服务,包括Analysis Services,Reporting Services和Integration Services。 要停止它们,可以使用服务器管理器。
SQLCMD -E -S  -Q"EXEC sp_detach_dbmsdb
SQLCMD -E -S -iinstmsdb.sql –lologfile1.txt
  1. 确保您与iinstmsdb.sql位于同一文件夹中。 整个命令的输出将放在logfile1.txt中。

步骤-2恢复MS SQL Server数据库中的所有存储过程


如果您只想恢复数据库中的存储过程,则只需运行instmsdb.sql。

当您运行此脚本时,它会重新创建所有存储过程,而不是删除并重新创建数据库中的所有表。

此步骤的妙处在于,您不必专门停止任何实例即可完成它。

完成上述步骤后,您要做的就是重新启动数据库并检查问题是否已解决。 在大多数情况下,错误将消失,但如果错误仍然存在,则数据库可能已损坏,超出了恢复点。 您需要在专家的帮助下重建整个数据库。

https://bytes.com/topic/sql-server/insights/965525-facts-about-ms-sql-server-database-corruption