Veritabanı Log (.LDF) dosyalarımızın hepsini birden shrink etme ihtiyacımız olabilir. Recovery Model Simple olsa dahi bazen bunu yapmamız gerekebilir*
Yazmış olduğum SP ile tüm LDF dosyalarını topluca shrink edebilirsiniz. Bu SPyi tek olarak çalıştırabilir ya da sadece script ürettirebilirsiniz.
* Not: Shrink işleminin periyodik olarak ya da plansız yapılması önerilmeyen bir işlemdir. Shrink bir operasyon olarak ele alınmalı ve bilinçli bir şekilde yapılandırılmalı.
Kullanımı şu şekilde;
EXEC sp_shrinkLogFiles @executeNumber = 2, -- Kaç kes çalışsın? @execute = 1 -- 1: çalıştırır 0: sadece script üretir
SP’nin create scripti;
CREATE PROC sp_shrinkLogFiles @executeNumber INT = 1, @execute BIT = 0 AS DECLARE @cmd varchar(max) SELECT @cmd = COALESCE(@cmd + ' ', '') + ' USE [' + DB_NAME(database_id) + '] DBCC SHRINKFILE (N'''+ name + ''' , 0, TRUNCATEONLY)' FROM sys.master_files WHERE database_id > 4 AND [type] = 1 AND [state] = 0 IF (@execute = 1) BEGIN PRINT '--- Started: ' + CONVERT(NVARCHAR(19),GETDATE(), 104) + ' ' + CONVERT(NVARCHAR(20),GETDATE(), 114) + ' ---' PRINT '' WHILE (@executeNumber > 0) BEGIN EXEC(@cmd) SET @executeNumber -= 1 END PRINT '' PRINT '--- Finished: ' + CONVERT(NVARCHAR(19),GETDATE(), 104) + ' ' + CONVERT(NVARCHAR(20),GETDATE(), 114) + ' ---' END ELSE BEGIN SELECT @cmd = REPLACE(@cmd,'TRUNCATEONLY)','TRUNCATEONLY) GO ' + (SELECT CASE @executeNumber WHEN 1 THEN '' ELSE CAST(@executeNumber AS VARCHAR) END)) SELECT @cmd END