شیرینک کردن لاگ فایل های کل دیتابیس های موجود در دیتابیس

عملیات shrink در Sql فضاهای اضافی را حذف کرده و حجم دیتابیس را کاهش می دهد. در sql دیتابیس به دلیل تولید Log File ، حجم زیادی از فضای دیتابیس را اشغال خواهد کرد که با استفاده از امکان های Truncate و Shrink این log File ها حذف شده و فضای قابل توجهی از فضای دیتابیس شما آزاد خواهد شد.

جهت Shrink کردن ب کل دیتابیس ها می توانید از اسکریپت زیر استفاده کنید:

USE MASTER
declare
    @isql varchar(2000),
    @dbname varchar(64),
    @logfile varchar(128)
    
    declare c1 cursor for
    SELECT  d.name, mf.name as logfile--, physical_name AS current_file_location, size
    FROM sys.master_files mf
        inner join sys.databases d
        on mf.database_id = d.database_id
    where recovery_model_desc <> 'SIMPLE'
    and d.name not in ('master','model','msdb','tempdb')
    and mf.type_desc = 'LOG'    
    open c1
    fetch next from c1 into @dbname, @logfile
    While @@fetch_status <> -1
        begin
        select @isql = 'ALTER DATABASE [' + @dbname + '] SET RECOVERY SIMPLE'
        print @isql
        exec(@isql)
        select @isql='USE [' + @dbname + '] checkpoint'
        print @isql
        exec(@isql)
        select @isql='USE [' + @dbname + '] DBCC SHRINKFILE ([' + @logfile + '], 1)'
        print @isql
        exec(@isql)
        
        fetch next from c1 into @dbname, @logfile
        end
    close c1
    deallocate c1