临时表清理任务未正常执行
前言:【执行计划列表】中的任务(包括临时表清理)依赖k3cloudjobprocesses服务和k3cloudapp站点。
分析步骤:
1、检查ip/k3cloudapp是否能正常访问。如果能,直接看第2步;如果不能,一般常见的提示为500.0内部服务器错误,原因主要为.NET缓存异常,需要清理.net缓存,方法为:
① cmd.exe命令中执行iisreset -stop
② 删除应用服务器C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files下的所有文件夹
③ cmd.exe命令执行iisreset -start
2、检查应用服务器的控制面板-管理工具-服务, 是否存在k3cloudjobprocesses服务,若未启动,则启动,若已启动则右击选择重新启动,若状态正常,看第3步
3、administrator登录cloud系统,查看【执行计划列表】,查看临时表清理计划的最后一次成功执行时间,例如今天5.14日,其设置的间隔时间为1天,则最后一次成功执行如果是13号为正常,否则说明该计划任务故障了(哪怕状态为【准备】),若1和2的检查结果都正常,而这里不正常,可能是因为一些异常情况导致临时表清理任务执行失败,状态死掉了, 需要先手工全部清理一次临时表才能恢复正常。
PS:一般建议间隔时间设置为5-10分钟或闲时统一执行
4、在数据库服务器对数据中心对应的实体执行以下2个操作(如果不放心请先备份账套):
--第一步:删除登记表中的记录
delete from T_BAS_TEMPORARYTABLENAME where FPROCESSTYPE=1 or FCREATEDATE<GETDATE()-1
--第二步:删除临时表,每次删除50个临时表释放一次资源,可在业务运行期间执行语句(不影响业务)
if object_id('temptb','table')>0 drop table temptb;
declare @sql varchar(max)
declare @icount int
declare @I int
set @sql='drop table '
set @i=1
select name,IDENTITY(int,1,1) id into temptb from sys.tables t where name like 'tmp%'
and not exists(select 1 from T_BAS_TEMPORARYTABLENAME where FTABLENAME=t.name) and create_date<=DATEADD(n,-5, GETDATE())
select @icount=@@ROWCOUNT
while @i<@icount
begin
select @sql=@sql+name+',' from temptb where id between @i and @i+49
if @@ROWCOUNT>0
set @sql=substring(@sql,1,len(@sql)-1)+';'
set @i=@i+50
exec(@sql)
set @sql='drop table '
end
if object_id('temptb','table')>0 drop table temptb;
--说明:第二步耗时会比较长,具体要看临时表的数量,也许几分钟,也许几个小时,放在那儿让它执行完即可。
5、完成后在服务器闲时对数据库执行收缩处理,收缩——文件(确认无人登录,最好执行前重启一下sql服务释放连接)
然后根据下图操作,下方的框需要注意:将文件收缩到的值需要自行观察右侧【最小为XXX MB】,你自己设置的值比这个XXX大100即可。
附:查询临时表占用磁盘总量的语句:
select cast(sum(a.total_pages)*8/1024 as varchar)+' MB' total
from sys.partitions p join sys.allocation_units a on p.partition_id = a.container_id
join sys.tables it on p.object_id = it.object_id
where it.name like 'TMP%'
临时表清理任务未正常执行
本文2024-09-16 18:43:02发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-23945.html