金蝶云星空数据中心结转问题指导(持续更新)原创
金蝶云社区-i求知若渴
i求知若渴
17人赞赏了该文章 1,638次浏览 未经作者许可,禁止转载编辑于2022年09月24日 16:14:37
summary-icon摘要由AI智能服务提供

本文介绍了数据库结转后空间未释放、结转工具运行超时及数据库整体过大时的处理方案。包括通过数据库收缩功能释放空间,查看并删除备份表或MRP运算相关表以减小数据库大小;针对超时报错,区分普通脚本和删除脚本并手动执行或改造后执行;对于大数据库,建议跳过大数据量表清理,工具完成后再单独执行,以提高效率。

问题1、结转之后的数据库空间没有变化或者变化不明显

结转主要是执行数据库清理语句,数据量减少后数据库体现为可用空间增多,大小不会自动变小,需要通过数据库的收缩功能将可用空间释放。

如果结转之后数据库总大小减去可用大小依然很大,可以通过查看数据库报表-【按排在前面的表的磁盘使用情况】查看剩余的数据分布。具体查看方式如下:

image.png

可能的原因:

(1)、格式为表名+日期的备份表,多数为后台更新数据库的时候做的备份,由于结转前已经备份了完整的数据库,这列表可以直接删除掉

(2)、MRP运算相关的表,成本计算相关表,可参考帖子清理

https://vip.kingdee.com/article/163073?productLineId=1&isKnowledge=2

问题2、结转工具运行过程中出现超时报错“已中止事务”

image.png

处理方案如下:

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做一些调整。


图标赞 17
17人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!