EXEC sp_msforeachdb @command1=N'
PRINT ''''
RAISERROR(''处理数据库: ? '',10,1) WITH NOWAIT
PRINT ''''
-- 截断日志
BACKUP LOG [?] WITH NO_LOG
-- 收缩文件
USE [?]
DECLARE tb CURSOR LOCAL
FOR
SELECT N''DBCC SHRINKFILE(''+RTRIM(fileid)+N'')''
FROM dbo.sysfiles
DECLARE @s nvarchar(4000)
OPEN tb
FETCH tb INTO @s
WHILE @@FETCH_STATUS=0
BEGIN
EXEC(@s)
FETCH tb INTO @s
END
CLOSE tb
DEALLOCATE tb
-- Auto Shrink
IF LOWER(''?'') not in(''master'',''tempdb'')
EXEC sp_dboption ''?'',''autoshrink'',''TRUE''
-- 设置数据库恢复模型为 SIMPLE
IF LOWER(''?'') <> ''tempdb''
EXEC(N''ALTER DATABASE [?] SET RECOVERY SIMPLE'')
'
PRINT ''''
RAISERROR(''处理数据库: ? '',10,1) WITH NOWAIT
PRINT ''''
-- 截断日志
BACKUP LOG [?] WITH NO_LOG
-- 收缩文件
USE [?]
DECLARE tb CURSOR LOCAL
FOR
SELECT N''DBCC SHRINKFILE(''+RTRIM(fileid)+N'')''
FROM dbo.sysfiles
DECLARE @s nvarchar(4000)
OPEN tb
FETCH tb INTO @s
WHILE @@FETCH_STATUS=0
BEGIN
EXEC(@s)
FETCH tb INTO @s
END
CLOSE tb
DEALLOCATE tb
-- Auto Shrink
IF LOWER(''?'') not in(''master'',''tempdb'')
EXEC sp_dboption ''?'',''autoshrink'',''TRUE''
-- 设置数据库恢复模型为 SIMPLE
IF LOWER(''?'') <> ''tempdb''
EXEC(N''ALTER DATABASE [?] SET RECOVERY SIMPLE'')
'
------来自邹建
MSSQL2005日志的收缩
1.右键在清除日志的数据库,如“TestDB”,点击[新建查询(Q)]
2.输入以下SQL语句,其中“TestDB”是数据库名称
DUMP TRANSACTION TestDB WITH NO_LOG
3.执行该SQL,成功后继续以下操作
4.右键该数据库节点,点击[任务(T)] -> [收缩(S)] -> [文件(F)]
5.在弹出的“收缩文件”对话框中,将“文件类型(T)”选为“日志”,将“收缩操作”选中“在释放未使用的空间前重新组织页(O)”
6.在“将文件收缩到(K)”文本框中输入后面提示的最小大小的数值,点击[确定]即可。
忽然发现原来空间急剧减少的原因是MSSQL2005的errorlog,而不是database的log文件。太囧了~~~
现在补上清楚MSSQL2005的errorlog的办法。
sql2005的error一共有6个,从errorlog,errlog.1一直到errorlog.6貌似是7个。。
执行一次EXEC sp_cycle_errorlog就会产生一个新的errorlog,然后把errorlog.6给删掉。就是先进先出(队列类似的情况)这样循环6次就可以把errorlog都刷新一遍。老的那个就被删掉了。