本文介绍了数据库结转后空间未释放、结转工具运行超时及数据库整体过大时的处理方案。包括通过数据库收缩功能释放空间,查看并删除备份表或MRP运算相关表以减小数据库大小;针对超时报错,区分普通脚本和删除脚本并手动执行或改造后执行;对于大数据库,建议跳过大数据量表清理,工具完成后再单独执行,以提高效率。
问题1、结转之后的数据库空间没有变化或者变化不明显。
结转主要是执行数据库清理语句,数据量减少后数据库体现为可用空间增多,大小不会自动变小,需要通过数据库的收缩功能将可用空间释放。
如果结转之后数据库总大小减去可用大小依然很大,可以通过查看数据库报表-【按排在前面的表的磁盘使用情况】查看剩余的数据分布。具体查看方式如下:
可能的原因:
(1)、格式为表名+日期的备份表,多数为后台更新数据库的时候做的备份,由于结转前已经备份了完整的数据库,这列表可以直接删除掉
(2)、MRP运算相关的表,成本计算相关表,可参考帖子清理
https://vip.kingdee.com/article/163073?productLineId=1&isKnowledge=2
问题2、结转工具运行过程中出现超时报错“已中止事务”
处理方案如下:
2.1、判断是普通脚本还是删除脚本,报错的sql 中出现类似下面格式sql 样式,就是删除脚本:
delete from 表名 where fid in (select fid from t_deletetemp)
2.2、如果是普通脚本的话,直接将报错中涉及的脚本复制到ssms上面执行(注意选择正确的数据库实体)
2.3、如果是删除脚步的话,将报错中涉及的脚本复制到ssms,然后加以改造。
具体改造方法如下:
(1)、执行下面sql,复制查询结果中FTransferSQL的文本
select * from T_Bas_TransferSQL where FScriptOrder in (select max(FScriptOrder) from T_Bas_TransferSQL where FScriptOrder< (select FScriptOrder from T_Bas_InitStep) )
(2)找到(1)复制的文本下图框出来的sql
insert into t_bas_deletetablelog(fformid ,ftablename ,fprimarykey) values('STK_INSTOCK','t_STK_InStock_past','FID')
Vales子句中最后两部分't_STK_InStock_past','FID'就是我们需要找到的表名和主键,由于报错的单据不同,这里的值不同,'t_STK_InStock_past','FID'只是举例。
(3)执行下面sql,复制查询结果中FTransferSQL的文本
select * from T_Bas_TransferSQL where FScriptOrder in (select FScriptOrder from T_Bas_InitStep )
将复制的sql中 (select fid from t_deletetemp)替换为 (select 主键from 表名)完成改造,比如根据上面的截图,应该改为: (select FID from t_STK_InStock_past)
(4)执行(3)改造后的sql
2.4、不管是普通脚本还是删除脚本,手工执行之后,我们执行下面脚本跳过这一步骤
--切换到下一步 declare @FScriptOrder int declare @fscriptid varchar(100) select @FScriptOrder=min(FScriptOrder) from T_Bas_TransferSQL where FScriptOrder>(select FScriptOrder from T_Bas_InitStep ) select @fscriptid =FScriptID from T_Bas_TransferSQL where FScriptOrder=@FScriptOrder update T_Bas_InitStep set FScriptID=@fscriptid,FScriptOrder=@FScriptOrder
2.5、重新运行结转工具,由于跳过报错的sql,所以可以继续往后执行
问题3、数据库整体很大(500G以上),问题2经常出现,即时没有出现报错执行过程太慢
建议方案:工具跳过执行数据量大的表的清理,工具完成后再单独执行。具体操作方式如下:
3.1、通过看数据库报表-【按排在前面的表的磁盘使用情况】查看剩余的数据分布,确认哪些单据量比较大
3.2、找到服务权益单对应的结转脚本,找出单据量大的单据对应的sql序号
除了数据量大的单据的sql序号之外,还需要包括:
对象 | 序号 |
上机日志 | 9001——9003 |
流程实例数据 | 9004——9034 |
这些序号的结转脚本在线上取消发布
3.3、执行工具后,手工执行跳过的sql,删除脚本的sql需要参考2.3做一些调整。
推荐阅读