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.