[教学] 如何使用Visual Studio 内建SQL工具修复资料库

大家好,我是一名菜鸟工程师,这篇文章用来记录我工作遇到的需求及解决方式,如果有更好的解决方式,也欢迎大家提出,话不多说,赶快开始今天的教学吧。

遇到的问题

这次遇到的问题主要是客户反映了某笔资料点入编辑页的时候会出现错误,实际去查询原因后,在进入编辑页的时候,会对某个table纪录更新时间,但奇怪的是只有这笔资料会出现错误,其他笔资料都正常运作。
实际用SQL Server下指令后,SQL 会报出这个错误
Imgur

求助Google大神后,发现造成这个问题的原因,可能是资料库发生毁损,所以先在SQL Server用了 DBCC CHECKDB
对资料库进行检查,不检查还好,一检查发现有很多table都有发生配置错误或是一致性错误,因此接下来就必须进行DB修复工作

解决心路历程

SQL Server 有提供修复DB的指令一共分成3种

DBCC CHECKDB ('资料库名',REPAIR_FAST)DBCC CHECKDB ('资料库名',REPAIR_REBUILD)DBCC CHECKDB ('资料库名',REPAIR_ALLOW_DATA_LOSS)

根据Microsoft Docs的解释,第一种的REPAIR_FAST不会进行任何修复动作,会进行修复只有REPAIR_REBUILD及REPAIR_ALLOW_DATA_LOSS,经过实际测试 REPAIR_ALLOW_DATA_LOSS可以修复大部分table出现的错误,至于资料部分就不一定了,因为平常该资料库会一个星期备份一次,我拿了两个时间备份的DB测试,一个资料没有因修复而被删除,一个资料则有,所以如果真的要用还是先备份一下资料库比较好。

在修复完成后,再跑一次DBCC CHECKDB确认一下资料库,结果还是有错误

Imgur

这下子就麻烦了,因为这个错误在修复过程中,是直接显示"无法修复此错误" 然后被跳过去
好吧既然无法完全修复,那就试试看别条路,所幸Visual Studio 内建提供一个SQL 比较工具,可以比较两个DB间的结构和资料,再加上查了备份档后,发现是从某个星期开始出现问题,因此在那个星期前的DB都是正常没有任何错误的状态
因此与公司的主管和MIS讨论后,决定利用这个工具,将目前的DB的结构与资料全部抄写进入完整无错误的旧DB,然后确认资料与原先DB皆相同后,就改用这个複製的DB,在这么做后,目前运作还算是正常,不过主管还是提醒,因为比较是由软体比较的,到底有没有完整比较然后複製过去还是必须观察。
接下来我就稍微介绍一下Visual Studio 内建SQL工具。

Visual Studio 内建SQL工具

以下是我修复步骤

点选工具->SQL Server -> 新增资料比较
Imgur

2.来源资料库请选择 有问题的DB
Imgur

3.目标资料库选择完整无误的DB,好了点选下一步
Imgur

4.两个都打勾
Imgur

5.比对完成后,点选更新目标
Imgur

比对完成后,中间的三栏分别代表新增、更新、删除,最后一栏则是两个DB相同纪录

6.确认是否更新完成后,点击重新整理,此时会再重新比对一次
Imgur

7.确认比对完成的两个DB无差异,中间三栏数字应为0,表示这两个DB资料已无差异
Imgur

8.最后执行sql : DBCC CHECKDB ('资料库名称'); 确认DB状态
Imgur

要注意的是这个比较只会比较结构相同和有设PK的table,所以在做资料比对之前务必先确定table的状态,避免没被比较到

后记

经过这次的事件,让我体会到备份的重要性,也希望这篇文章能帮助到遇到一样问题的人


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章