MS SQL Server da log dosyalarının boyutlarını küçültmek

SQL Server da yaptığınız işlemleri şayet transaction içerisinde yapıyorsanız belirli bir süre sonra log dosyasının şiştiğini ve bir zaman sonra diskte yer sıkıntısı yaşadığınızı fark edeceksinizdir.

Aşağıdaki komut ile SQL Server da bulunan bütün veritabalarınızın log dosyalarının boyutlarını minimum a indirebilirsiniz.

declare @ssql nvarchar(4000)
set @ssql= '
if ''?'' not in (''tempdb'',''master'',''model'',''msdb'') begin
use [?]
declare @tsql nvarchar(4000) set @tsql = ''''
declare @iLogFile int
declare @sLogFileName varchar(55)
declare @RecoveryModel nvarchar(10)
declare LogFiles cursor for
select fileid from sysfiles where status & 0x40 = 0x40
open LogFiles
fetch next from LogFiles into @iLogFile
while @@fetch_status = 0
begin
set @tsql = @tsql + ''DBCC SHRINKFILE(''+cast(@iLogFile as varchar(5))+'', 10) ''
fetch next from LogFiles into @iLogFile
end
select @RecoveryModel = CONVERT(nvarchar(10),Databasepropertyex(name, ''Recovery'')) from master..sysdatabases where name = ''?''
set @tsql = ''USE [?]; '' + @tsql + '' ALTER DATABASE [?] SET RECOVERY SIMPLE '' + @tsql
set @tsql = @tsql + ''; ALTER DATABASE [?] SET RECOVERY '' + @RecoveryModel + '';''
--print @tsql --for debugging
exec(@tsql)
close LogFiles
DEALLOCATE LogFiles
end'

exec sp_msforeachdb @ssql

Not: Yukarıdaki log dosyası küçültme işlemi sadece recovery modeli Simple olan veritabanları için geçerlidir. Veritabanınızın recovery modelini veritabanı özelliklerindeki Options alanından görebilirsiniz.