用友软件免费下载(www.bbsufida.com)旨在提供全系列最新最全的用友财务软件免费下载地址,快速下载请添加微信 yyrjgls

数据库手工修复案例分析-用友U8

admin2016-06-20363用友U8记录修复索引
对应版本:用友U其他对应产品线:其他对应模块:MSSQL2000模块问题现象:问题描述:1、不能以2004年1月1日去整理现存量2、不能对2004年7月1日的采购入库单进行列表3、收发存汇总表不能查询4、不能连续修改采购入库单据,修改第一张可以,继续修改第二张提示网络连接失败,然后退出。问题产生原因:估计是近段时间不间断停电导致数据库损坏。 建议:将处理过程或SQL语句形成文挡,便于以后有类似问题可以自己解决。问题原因:由于非法操作(断电等)导致数据表结构损坏,部分数据表的主外键、索引异常错误,导致产品部分功能出错。解决方案:(调整过程中涉及到数据记录删除操作时请先与用户协商处理)问题答复:修复工作如下:1、首先使用数据库修复脚本对数据库反复修复检查(修复了4遍),直至再修复时错误提示不变,即只剩下无法修复的错误为止,对该数据最后剩下13个一致性错误无法修复,提示信息“CHECKDB发现了0个分配错误和13个一致性错误(在数据库‘UFDATA_002_2004‘中)”。使用脚本:数据检查.sql2、根据提示信息中的具体错误信息,如“服务器:消息2601,级别14,状态3,行1。不能在具有唯一索引‘RRKey‘的对象‘RdRecord‘中插入重复键的行。数据行(1:65607:15)(由RID=(1:65607:15)标识)的索引值为cWhCode=‘422‘andbRdFlag=1andcCode=‘0000005913‘。”,从查询分析器中查看现象:select*fromrdrecordwhereccode=‘0000005913‘(有记录)select*fromrdrecordwhereid=‘308090‘(无记录)下面尝试修正错误。3、修复数据表Rdrecord(子表rdrecords无错误):a、重命名rdrecord为rdrecord2;b、将原收发记录主表rdrecord2中记录复制到新表rdrecord中select*intordrecordfromrdrecord2,删除Rdrecord2;c、尝试创建表间关系及rdrecord的索引、主键等时,创建索引RRKey失败,查询cwhcode+ccode+brdflag上存在的重复值(非法记录),根据提示‘发生在重要主键401上’,查询仓库401,selectcount(ccode),ccodefromrdrecordwherecwhcode=‘401‘groupbyccode,brdflaghavingcount(ccode)>1,查询结果显示ccode=0000000264,0000000265的记录重复。select*fromrdrecordwherecwhcode=‘401‘andccodein(‘0000000264‘,‘0000000265‘)andbrdflag=0,对每个单据号存在2条记录,删除7月1号的单据(实际中应征询用户意见进行妥当处理)deletefromrdrecordswhereidin(‘308307‘,‘308309‘)deletefromrdrecordwhereidin(‘308307‘,‘308309‘)再次创建索引RRkey时发现在仓库408、410、422、423等等上均存在非法重复值,观察数据记录,发现错误记录均在2004-07-01号。通过以下sql语句查询所有非法记录:selectid,ccode,cwhcode,brdflagfromrdrecordwhereccodein(selectccodefromrdrecordgroupbyccode,brdflag,cwhcodehavingcount(ccode)>1)andddate=‘2004-07-01‘orderbyccode,cwhcode,通过以下sql语句删除7月1号的非法记录信息:deletefromrdrecordswhereidin(selectidfromrdrecordwhereccodein(selectccodefromrdrecordgroupbyccode,brdflag,cwhcodehavingcount(ccode)>1)andddate=‘2004-07-01‘)deletefromrdrecordwhereccodein(selectccodefromrdrecordgroupbyccode,brdflag,cwhcodehavingcount(ccode)>1)andddate=‘2004-07-01‘4、根据提示信息中的具体错误信息,如“违反了PRIMARYKEY约束‘aaaaaTransVouch_PK‘。不能在对象‘TransVouch‘中插入重复键。服务器:消息8951,级别16,状态1,行1表错误:表‘TransVouch‘(ID785437872)。索引‘aaaaaTransVouch_PK‘(ID2)中下列行的键缺少或无效:”,数据表TransVouch损坏,尝试修复该数据表。5、同上步骤3,修复数据表TransVouch:a、重命名TransVouch为TransVouch2;b、将原收发记录主表rdrecord2中记录复制到新表rdrecord中select*intotransVouchfromTransvouch2,,删除transVouch2;c、试图创建关系索引时提示“服务器:消息1505,级别16,状态1,行1CREATEUNIQUEINDEX终止,因为发现了索引ID2的重复键。最重要的主键为‘0000000949‘。”,查询select*fromtransvouchwherectvcode=‘0000000949‘,发现有重复记录,故索引创建失败。删除7月1号的重复记录:(查询)select*fromtransvouchwherectvcode=‘0000000949‘select*fromtransvouchswherectvcode=‘0000000949‘由于子表transvouch与主表transvouch通过ctvcode关联,现主表和子表中各存在2条记录,因无法定位子表中哪条记录属于7月1号单据的表体,暂只删除主表中重复记录(由日期关系判断子表transvouchs中autoid较小的记录应为7月1号的表体内容,建议征询用户意见后再决定删除哪条记录,也可后期在界面上删除表体行记录):(删除)deletefromtransvouchwherectvcode=‘0000000949‘anddtvdate=‘2004-07-01‘6、执行创建关系、索引、主外键脚本,脚步执行成功。rdrecordCreate.sql;TransVouchCreate.sql;(此两个脚本可通过企业管理器来创建)7、再次用数据库修复检查脚本进行复查,检查结果显示数据库结构/数据正确无误。CHECKDB发现了0个分配错误和0个一致性错误(在数据库‘UFDATA_002_2004‘中)。数据检查.sql8、查看采购入库单列表时显示记录异常(只有表头信息),故怀疑rdrecord中存在部分非法记录,其在子表rdrecords中无对应记录。(查询:)selectidfromrdrecordwhereidnotin(selectdistinctidfromrdrecords)(删除:)deletefromrdrecordwhereidnotin(selectdistinctidfromrdrecords)数据修复工作完成!进入产品查看问题:1、修复数据库后整理现存量成功;2、采购入库单列表查询正常;3、收发存汇总表可查询;4、可连续修改采购入库单。注意:1、建议用户定期备份数据;2、不可非法关机、随意插拔USB设备等。

微信号:yyrjgls
技术咨询,有偿服务!
复制微信号

本文链接:https://www.bbsufida.com/u8/39927.html

网友评论

热门文章
侧栏广告位
随机文章