注册
 找回密码
 注册
江西广告网
查看: 367|回复: 0
打印 上一主题 下一主题

SQL SERVER日志清除的两种方法

[复制链接]

该用户从未签到

1
跳转到指定楼层
发表于 2009-1-8 11:11:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
  在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法……      方法一      一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大      1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存      2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定      3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据      方法二      SET NOCOUNT ON      DECLARE @LogicalFileName sysname,      @MaxMinutes INT,      @NewSize INT      USE tablename -- 要操作的数据库名      SELECT @LogicalFileName = 'tablename_log', -- 日志文件名      @MaxMinutes = 10, -- Limit on time allowed to wrap log.      @NewSize = 1 -- 你想设定的日志文件的大小(M)      -- Setup / initialize      DECLARE @OriginalSize int      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      CREATE TABLE DummyTrans      (DummyColumn char (8000) not null)      DECLARE @Counter INT,      @StartTime DATETIME,      @TruncLog VARCHAR(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      DROP TABLE DummyTrans      SET NOCOUNT OFF <
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表