临时表堆积未按时清理处理方案

【问题描述】
由于星空的定期执行计划中,清理临时表的执行计划未能正常执行,或现场修改为1天执行一次,导致临时表堆积的情况发生。
【解决方案】
请尝试下列操作来解决:
SQLServer执行脚本:
--第一步:删除登记表中的可删除的临时表登记记录,标识FPROCESSTYPE等于1,说明是可以删除的,另外生成了超过24小时的,我们也认为是可以做清理的。
delete from T_BAS_TEMPORARYTABLENAME where FPROCESSTYPE=1 or FCREATEDATE<DATEADD(hh,-24, GETDATE())
--第二步:删除临时表,每次删除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 len(name)=30 and name not like 'tmp[_]%'
and not exists(select 1 from T_BAS_TEMPORARYTABLENAME where FTABLENAME=t.name) and create_date<=DATEADD(hh,-24, 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;
另外,查询临时表数量的脚本如下:
select count(*) from T_BAS_TEMPORARYTABLENAME where FPROCESSTYPE=1 or FCREATEDATE<DATEADD(hh,-24, GETDATE())
select count(*) from T_BAS_TEMPORARYTABLENAME
selec
临时表堆积未按时清理处理方案
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



