|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册账号
×
以浪潮清除临时表的方法为例:SQL Server版本
声明:GS中由于异常会导致很多垃圾临时表,这个脚本可用于自动清理的参考,但是执行前一定要先备份数据库,然后单独执行注释掉删除语句的脚本打印出要删除的临时表进行确认(默认exec(@sqltext)一句是屏蔽的,实际删除时去掉注释即可),不确定的表要跟业务组确认。以免误删数据。
--以LCxxxx9999登录系统,执行以下语句看看tmp打头的所有表,检查是否都在删除之列,如果有不能删除的请修改条件
SELECT [name] FROM sysobjects where type = 'U' and [name] like 'TMP%' and len([name]) > 13 and crdate < (getdate() -2) order by [name]由于临时比一般符合TMP+前缀+进程号的前10位,因此至少13个字符,避免个别非动态的临时表也是以TMP打头导致误删。
--以下为取出TMP打头的表然后进行删除的脚本
--条件 crdate < (getdate() - 3)表示创建日期早于三天前的表
--以下为实际脚本,可以加至SQL Server的维护任务中,每天晚上自动执行
------------------------------------
DECLARE @tblname varchar(250)
DECLARE @sqltext varchar(250)
DECLARE curTbls CURSOR FOR
SELECT [name] FROM sysobjects where type = 'U' and [name] like 'TMP%' and len([name]) > 13 and crdate < (getdate() -2) order by [name]
OPEN CurTbls
FETCH NEXT FROM curTbls INTO @tblName
WHILE @@FETCH_STATUS=0
BEGIN
SELECT @sqltext = 'drop table ' + @tblName
exec(@sqltext)
PRINT @sqltext
FETCH NEXT FROM curTbls INTO @tblName
END
CLOSE CurTbls
DEALLOCATE curTbls
|
|