SQL Server数据库损坏、检测以及简单的修复办法 数据库损坏( 三 )


SSB检查
检查索引、XML索引等 。
首先 , 当发现系统表损坏时 , 只能通过备份来恢复(这也是为什么备份TempDB以外的系统表非常重要的原因) 。其次 , 在大型数据库中 , 做一次CheckDB会花费很长时间 , 维护窗口时间或者系统空闲时间可能都覆盖不了这个时间 。然后 , 我们可以将CheckDB的任务分配给三个命令:CHECKALLOC、DBCC检查表和DBCC检查目录 。
有关CheckDB的更多详细信息 , 请参考:http://technet.microsoft.com/en-us/library/ms176064.aspx.
修复数据库损坏损坏数据库的最有效方法是拥有冗余数据 , 并使用它进行恢复 。所谓冗余数据 , 包括热备、冷备、温备 。
使用镜像或可用性组作为热备盘 , 当检测到错误时 , 可以自动修复页面(镜像需要2008以上 , 可用性组是2012的函数) 。当镜像主体服务器遇到824错误时 , 它会向镜像服务器发送请求 , 将损坏的页面从镜像复制到主体以解决问题 。对于可用性组 , 如果在主复制副本上找到数据页面 , 主复制副本将向所有辅助复制副本发送广播 , 第一个响应的辅助复制副本的页面将修复页面错误 。如果错误发生在只读辅助副本中 , 将从主副本请求相应的页面来修复错误 。这里值得注意的是 , 无论哪种高可用技术 , 都不会将页面错误传播到冗余数据上 , 因为SQL Server中所有的高可用技术都是基于日志 , 而不是数据页面 。
第二种是使用热备份或冷备份来恢复页面 。我已经在清单1中给出了详细的代码 , 所以这里不再赘述 。
如果没有合适的备份 , 如果损坏的数据页存在于非聚集索引上 , 那么您是幸运的 , 您只需要禁用索引并重建它 。
如果存在基线完整备份 , 并且日志链没有断开(包括差异备份可以覆盖丢失日志的部分) , 则可以通过在备份结束日期之后恢复数据库来修复 。
最后 , 如果基础工作没有做好 , 您可能需要通过丢失数据来改回数据库的一致性 。我们可以使用DBCC CheckDB的REPAIR_ALLOW_DATA_LOSS命令来修复数据库 。使用这种方法可能会也可能不会导致数据丢失 , 但在大多数情况下 , 一致性将通过删除数据来修复 。使用REPAIR_ALLOW_DATA_LOSS需要将数据库设置为单用户模式 , 这意味着停机 。
在任何情况下 , 修复数据库时都应该考虑是否能满足SLA 。如果出现问题 , 发现自己无论如何都达不到SLA , 那就只能回顾之前的准备 , 祈祷自己不要失业 。
【SQL Server数据库损坏、检测以及简单的修复办法 数据库损坏】

推荐阅读