declare @ssql nvarchar(4000) set @ssql= ' if ''?'' not in (''tempdb'',''master'',''model'',''msdb'') begin use [?] declare @tsql nvarchar(4000) set @tsql = '''' declare @iLogFile int declare LogFiles cursor for
--找出所有的Log文件,Log文件的status是0x40 select fileid from sysfiles where status & 0x40 = 0x40 open LogFiles fetch next from LogFiles into @iLogFile while @@fetch_status = 0 begin
--使用DBCC名字缩短Log文件 set @tsql = @tsql + ''DBCC SHRINKFILE(''+cast(@iLogFile as varchar(5))+'', 1) '' fetch next from LogFiles into @iLogFile end
--DBCC shrink只能释放标记为无效的Log区段,使用backup log可以完成这个标记 set @tsql = @tsql + '' BACKUP LOG [?] WITH TRUNCATE_ONLY '' + @tsql --PRint @tsql exec(@tsql) close LogFiles DEALLOCATE LogFiles end' --依次遍历所有的数据库,用数据库名字替换@ssql中的?,并执行语句 exec sp_msforeachdb @ssql