如何缩小MS SQL Server日志文件数据库教程 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    server

    方法一:

    将数据库日志文件改成简单日志模式

    方法二:

    DUMPTRANSACTION你的数据库名WITHNO_LOG

    BACKUPLOG你的数据库名WITHNO_LOG

    DBCCSHRINKDATABASE(你的数据库名)

    EXECsp_dboption'你的数据库名','autoshrink','TRUE'

    方法三:

    把代码COPY到查询分析器里,,然后修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大小),运行即可(我已经用过多次了)

    -----

    SETNOCOUNTON

    DECLARE@LogicalFileNamesysname,

    @MaxMinutesINT,

    @NewSizeINT

   

    USEMarias--要操作的数据库名

    SELECT@LogicalFileName='Marias_log',--日志文件名

    @MaxMinutes=10,--Limit on time allowed to wrap log.

    @NewSize=100--你想设定的日志文件的大小(M)

   

    --Setup / initialize

    DECLARE@OriginalSizeint

    SELECT@OriginalSize=size

    FROMsysfiles

    WHEREname=@LogicalFileName

    SELECT'Original Size of'+db_name()+'LOG is'+

    CONVERT(VARCHAR(30),@OriginalSize)+'8K pages or'+

    CONVERT(VARCHAR(30),(@OriginalSize*8/1024))+'MB'

    FROMsysfiles

    WHEREname=@LogicalFileName

    CREATETABLEDummyTrans

    (DummyColumnchar(8000)notnull)

   

   

    DECLARE@CounterINT,

    @StartTimeDATETIME,

    @TruncLogVARCHAR(255)

    SELECT@StartTime=GETDATE(),

    @TruncLog='BACKUP LOG'+db_name()+'WITH TRUNCATE_ONLY'

   

    DBCCSHRINKFILE (@LogicalFileName,@NewSize)

    EXEC(@TruncLog)

    --Wrap the log if necessary.

    WHILE@MaxMinutes>DATEDIFF(mi,@StartTime,GETDATE())--time has not expired

    AND@OriginalSize=(SELECTsizeFROMsysfilesWHEREname=@LogicalFileName)

    AND(@OriginalSize*8/1024)>@NewSize

    BEGIN--Outer loop.

    SELECT@Counter=0

    WHILE((@Counter<@OriginalSize/16)AND(@Counter<50000))

    BEGIN--update

    INSERTDummyTransVALUES('Fill Log')

    DELETEDummyTrans

    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'

    FROMsysfiles

    WHEREname=@LogicalFileName

    DROPTABLEDummyTrans

    SETNOCOUNTOFF

   

最新文章