修复SQL数据库MDF表出错解决速达软件不能修复和不能备份帐套图解.docx
《修复SQL数据库MDF表出错解决速达软件不能修复和不能备份帐套图解.docx》由会员分享,可在线阅读,更多相关《修复SQL数据库MDF表出错解决速达软件不能修复和不能备份帐套图解.docx(10页珍藏版)》请在冰豆网上搜索。
修复SQL数据库MDF表出错解决速达软件不能修复和不能备份帐套图解
修复SQL数据库MDF表出错--解决速达软件不能修复和不能备份帐套(图解)
致远在“SQLServer无日志文件的恢复”中讲到:
衡量数据恢复成功与否的标准:
第一:
能不能进行速达帐套的修复操作,第二:
能不能进行速达帐套的备份操作,附合上述两个标准说明数据恢复成功。
如不能修复或不能备份现象已出现,在修复或备份过程中系统会提示MDF“表出错”,该如何修复MDF“表出错”呢?
下面将分步进行详细的介绍。
对使用SQL数据库引擎的用友、金蝶等用户,如出现同类错误,同样能修复MDF“表出错”错误。
运软件行环境:
SQLSERVER2000SP4
速达V5V3.90ERP试用版
一:
不能修复或不能备份出错提示。
1:
不能修复分两种:
A:
不能修复帐套,也不能备份帐套;B:
不能修复帐套,但能备份帐套。
下图1提示“帐套修复失败:
修复S_SALEDETAIL表时出错。
2:
不能备份只有一种:
既不能修复帐套,也不能备份帐套。
这里示用到的为不能修复帐套,也不能备份帐套这种。
下图2提示“数据据库DBCC检查发现以下错误,不能备份。
表错误:
表“AA_BILLFLOW”,行的键缺少或无。
从上面两图中描述,可以发现数据库中的两表出错:
销售开单明细“S_SALEDETAIL”和底稿表“AA_BILLFLOW”。
经过分析:
发生表出错的主表为:
销售开单明细“S_SALEDETAIL”;
发生表出错的从表为:
底稿表“AA_BILLFLOW”;
发生表出错的辅表为:
系统日志表“AM_SYSLOG”。
第三表修不修复对帐套修复和备份操作几乎没影响。
为更彻底处理出错的表,致远把系统日志表“AM_SYSLOG”也列入要修复SQL数据表中。
二:
如何发现SQL数据库中出错的表。
如何发现SQL数据库中出错的表,致远用底稿表“AA_BILLFLOW”、系统日志表“AM_SYSLOG”和销售开单明细“S_SALEDETAIL”3表同时进行示操作。
用DTS导出,从速达软件“SD0001”数据库导出表到临时数据库“致远”的过程省略。
方法可参阅我的博文
Excel表如何导入SQL数据表中──速达软件操作示_致远_acoffe_新浪博客
这里只介绍从临时数据库“致远”导出到数据库“SD0001”的过程。
利用临时数据库“致远”中未经修复的SQL表导出,如果发现表导出出错,系统会自动提示,“有X个表复制失败”。
1:
用DTS导出,首先创建临时数据库“致远”。
致远习惯用:
“ 致远”作临时数据库代号。
只填临时数据库“致远”名称,其它均忽略。
临时数据库中致远已导入底稿表“AA_BILLFLOW”、系统日志表“AM_SYSLOG”和销售开单明细“S_SALEDETAIL”3表。
2:
选择“数据源”。
“数据源”为临时数据库“致远”。
3:
选择“导出目的”。
目的数据库为速达“SD31502_SD0001”。
4:
选择“从源数据库复制表”。
5:
选择“源表”。
“源表”为“AA_BILLFLOW”、“AM_SYSLOG”和“S_SALEDETAIL”3表。
6:
提示“有X个表复制失败”。
这里实际提示“有3个表复制失败”。
三:
如何定位表出错的行所在位置。
经过步骤“二”系统已提示DTS导出表“出错”,“有3个表复制失败”。
1:
现在你只要“双击错误行以获得对错误的详细描述”,提示“在目标的行号为X处出错”。
提示表“AA_BILLFLOW”“在目的行号为3359处出错。
不能在对象‘AA_BILLFLOW’中插入重复键。
提示表“AM_SYSLOG”“在目的行号为4445处出错。
不能在对象‘AM_SYSLOG’中插入重复键。
提示表“S_SALEDETAIL”“在目的行号为3318处出错。
不能在对象‘S_SALEDETAIL’中插入重复键。
2:
导出表“AA_BILLFLOW”,保存格式为EXCEL即可,找到“行号为3359”的行,记住图中红色部份:
“BILLID”为“537”,“BILLCODE”为“XSD-2014-12-12-0014”。
下面进行其它操作还要用到“BILLID”和“BILLCODE”。
致远已同时导出3表,见下图。
系统日志表“AM_SYSLOG”和销售开单明细“S_SALEDETAIL”作同样操作,不再提示。
四:
利用临时数据库“致远”,对已找到的“”插入重复键的行进行修复。
1:
进入SQL“企业管理器”--临时数据库“致远”—“表”--“AA_BILLFLOW”,删除表“AA_BILLFLOW”中“BILLID”为“537”的整行。
致远建议在SQL管理器中直接删除表“AA_BILLFLOW”中“BILLID”为“537”的整行。
利用EXCEL表的目的只是为了找到表“AA_BILLFLOW”中“行号为3359”的错误位置。
删除下图SQL表中带黑色的行。
2:
用DTS导入临时数据库“致远”中已修复的表“AA_BILLFLOW”。
如果3已全部修复,就可以合并导入。
步骤同上面“二”,只是步骤“二--4”:
“选择“从源数据库复制表””,改为选择“在SQLSERVER数据库之复制”,再增加选择“创建目的对象”—“包括扩展属性”,省略“二--5”和“二--6”两步,其它操作均相同。
A:
导入“指定表复制”—选择“在SQLSERVER数据库之复制”。
B:
选择“创建目的对象”--选择“包括扩展属性”,下一步继续执行就可以了。
五:
如果你熟悉SQL数据库也可以几表同时导出导入,同时修改。
对不熟悉SQL的速友,致远还是建议你老老实实一表一表进行导出,再进行修复。
如果你选择导出整个数据库,那么与之相关的“出错表”有249,你会看花眼,致远也不建议你这样操作。
上面提到的3表关系到下图中提到的249表,如果修复了关键的3表,剩余的200多表交给SQL来处理,SQL数据库会在帐套修复过程中自动进行修复,不必过于谨慎。
六:
3已修复的表导入结束,重启电脑。
打开速达软件服务器进行“修复”帐套操作,“修复”帐套完成,就可以进行“备份”帐套操作了。
到此,完美修复SQL表出错,一切完好如初,大功告成。