您的位置:首页 > 其它

日志的压缩与清除技巧

2008-04-26 09:42 162 查看
一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大:  1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft-->SQLServer组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择"简单",然后按确定保存。
  2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。
  3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据。
  方法二
SETNOCOUNTON
DECLARE@LogicalFileNamesysname,
    @MaxMinutesINT,
    @NewSizeINT
USE  tablename      --要操作的数据库名
SELECT @LogicalFileName='tablename_log', --日志文件名
@MaxMinutes=10,       --Limitontimeallowedtowraplog.
    @NewSize=1         --你想设定的日志文件的大小(M)
--Setup/initialize
DECLARE@OriginalSizeint
SELECT@OriginalSize=size 
 FROMsysfiles
 WHEREname=@LogicalFileName
SELECT'OriginalSizeof'+db_name()+'LOGis'+ 
    CONVERT(VARCHAR(30),@OriginalSize)+'8Kpagesor'+ 
    CONVERT(VARCHAR(30),(@OriginalSize*8/1024))+'MB'
 FROMsysfiles
 WHEREname=@LogicalFileName
CREATETABLEDummyTrans
 (DummyColumnchar(8000)notnull)
DECLARE@Counter INT,
    @StartTimeDATETIME,
    @TruncLog VARCHAR(255)
SELECT @StartTime=GETDATE(),
    @TruncLog='BACKUPLOG'+db_name()+'WITHTRUNCATE_ONLY'
DBCCSHRINKFILE(@LogicalFileName,@NewSize)
EXEC(@TruncLog)
--Wrapthelogifnecessary.
WHILE  @MaxMinutes>DATEDIFF(mi,@StartTime,GETDATE())--timehasnotexpired
   AND@OriginalSize=(SELECTsizeFROMsysfilesWHEREname=@LogicalFileName)
   AND(@OriginalSize*8/1024)>@NewSize 
 BEGIN--Outerloop.
  SELECT@Counter=0
  WHILE ((@Counter<@OriginalSize/16)AND(@Counter<50000))
   BEGIN--update
    INSERTDummyTransVALUES('FillLog') 
     DELETEDummyTrans
     SELECT@Counter=@Counter+1
    END 
   EXEC(@TruncLog) 
 END  
SELECT'FinalSizeof'+db_name()+'LOGis'+
    CONVERT(VARCHAR(30),size)+'8Kpagesor'+ 
    CONVERT(VARCHAR(30),(size*8/1024))+'MB'
 FROMsysfiles
  WHEREname=@LogicalFileName
DROPTABLEDummyTrans
SETNOCOUNTOFF
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: