热门:网页模板.net视频教程JQueryMVCjsonExtJs源码示例三级联动JQuery菜单
您现在的位置:.Net中文社区>> 数据库>>正文内容

有效清除大文件日志(存储过程)

发布时间:2010年01月26日点击数: 未知

SQL2005 1个多G的日志,有时候清不掉。所以整理这段代码。有时候清理日志未清理成1M 请多执行几遍。一般清况下执行一次就可以的。我碰到过要执行两遍的。

  1. SELECT @LogicalFileName = 'Test_log',   

Test_log 为日志逻辑名称

  1. CREATE PROCEDURE [dbo].[tools_ClearSqlLog] 
  2.      
  3. AS 
  4. BEGIN 
  5.  
  6. SET NOCOUNT ON 
  7. DECLARE @LogicalFileName sysname, 
  8. @MaxMinutes INT
  9. @NewSize INT  
  10.  
  11. SELECT @LogicalFileName = 'Test_log',  
  12. @MaxMinutes = 1,  
  13. @NewSize = 1 
  14.   
  15. -- Setup / initialize 
  16. DECLARE @OriginalSize int 
  17. SELECT @OriginalSize = size  FROM sysfiles WHERE name = @LogicalFileName 
  18. SELECT 'Original Size of ' + db_name() + ' LOG is ' +  
  19.     CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +  
  20.     CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB' 
  21. FROM sysfiles 
  22. WHERE name = @LogicalFileName 
  23.  
  24. CREATE TABLE DummyTrans 
  25. (DummyColumn char (8000) not null)   
  26.  
  27. DECLARE @Counter INT
  28. @StartTime DATETIME, 
  29. @TruncLog VARCHAR(255) 
  30. SELECT @StartTime = GETDATE(), 
  31. @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY' 
  32.   
  33. DBCC SHRINKFILE (@LogicalFileName, @NewSize) 
  34. EXEC (@TruncLog) 
  35. -- Wrap the log if necessary. 
  36. WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired 
  37.     AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)  
  38.     AND (@OriginalSize * 8 /1024) > @NewSize  
  39. BEGIN -- Outer loop. 
  40.     SELECT @Counter = 0 
  41.     WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000)) 
  42.     BEGIN -- update 
  43.         INSERT DummyTrans VALUES ('Fill Log')  
  44.         DELETE DummyTrans 
  45.         SELECT @Counter = @Counter + 1 
  46.     END  
  47.     EXEC (@TruncLog)  
  48. END  
  49. SELECT 'Final Size of ' + db_name() + ' LOG is ' + 
  50.     CONVERT(VARCHAR(30),size) + ' 8K pages or ' +  
  51.     CONVERT(VARCHAR(30),(size*8/1024)) + 'MB' 
  52. FROM sysfiles  
  53. WHERE name = @LogicalFileName 
  54.  
  55. DROP TABLE DummyTrans 
  56. SET NOCOUNT OFF 
  57.  
  58. END 

本站热点业务

更多模板/案例展示

关于我们 | 联系我们 | 团队日志 | 网站地图 | 网站合作