收缩并截断SQLSERVER服务器上所有数据库日志

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'')   
  
'   

------来自邹建


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都刷新一遍。老的那个就被删掉了。

原文地址:https://www.cnblogs.com/LCX/p/1335626.html