【发布时间】:2020-07-14 21:50:47
【问题描述】:
在我的 SQL 实例中,我有大约 50 个处于简单恢复模式的数据库。有时会有很多活动导致日志文件膨胀并填满日志驱动器。
我尝试编写一个脚本每天执行一次,以检查哪些日志文件大于 30 GB,并且有 80% 或更多的可用空间。只有这样我才想运行 DBCC Shrinkfile。 但是,我现在不知道如何在脚本中放置一个循环来循环浏览数据库并捕获 名称和日志文件名。
-- create result holder
DECLARE @result TABLE
(
[Database_Name] VARCHAR(150) ,
[Log_Size] FLOAT ,
[Log_Space] FLOAT ,
[Status] VARCHAR(100)
)
INSERT INTO @result
EXEC ( 'DBCC sqlperf(LOGSPACE) WITH NO_INFOMSGS'
)
-- only return for the DB in context, rounding it
Declare @SQL varchar(2000), @logsize float,@logspace float
SELECT @logsize =Round(Log_Size,2), @logspace=100 - Log_space
FROM @result
If @logsize >= 30000 and @logspace >= 80
set @SQL = 'use ' +'[NameofDatabase]'+' dbcc shrinkfile ([Enternameoflogfile], 20000, TRUNCATEONLY) WITH NO_INFOMSGS'
exec (@SQL)
【问题讨论】:
标签: sql-server