SET NOCOUNT ON DECLARE@LogicalFileName sysname, @MaxMinutesINT, @NewSizeINT USE cms -- 要操作的数据库名 SELECT@LogicalFileName=\'cms_log\', -- 日志文件名 @MaxMinutes=10, -- Limit on time allowed to wrap log. @NewSize=100-- 你想设定的日志文件的大小(M) -- Setup / initialize DECLARE@OriginalSizeint SELECT@OriginalSize= size FROM sysfiles WHERE name =@LogicalFileName SELECT\'Original Size of \'+db_name() +\' LOG is \'+ CONVERT(VARCHAR(30),@OriginalSize) +\' 8K pages or \'+ CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) +\'MB\' FROM sysfiles WHERE name =@LogicalFileName CREATETABLE DummyTrans (DummyColumn char (8000) notnull) DECLARE@CounterINT, @StartTimeDATETIME, @TruncLogVARCHAR(255) SELECT@StartTime=GETDATE(), @TruncLog=\'BACKUP LOG \'+db_name() +\' WITH TRUNCATE_ONLY\' DBCC SHRINKFILE (@LogicalFileName, @NewSize) EXEC (@TruncLog) -- Wrap the log if necessary. WHILE@MaxMinutes>DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired AND@OriginalSize= (SELECT size FROM sysfiles WHERE name =@LogicalFileName) AND (@OriginalSize*8/1024) >@NewSize BEGIN-- Outer loop. SELECT@Counter=0 WHILE ((@Counter<@OriginalSize/16) AND (@Counter<50000)) BEGIN-- update INSERT DummyTrans VALUES (\'Fill Log\') DELETE DummyTrans SELECT@Counter=@Counter+1 END EXEC (@TruncLog) END SELECT\'Final Size of \'+db_name() +\' LOG is \'+ CONVERT(VARCHAR(30),size) +\' 8K pages or \'+ CONVERT(VARCHAR(30),(size*8/1024)) +\'MB\' FROM sysfiles WHERE name =@LogicalFileName DROPTABLE DummyTrans SET NOCOUNT OFF