SQL Server’da Veritabanlarının Log Dosyalarını Shrink ile Küçültmek
Herkese merhaba,
Bu yazıda SQL Server’da veritabanlarının log dosyalarını shrink ile küçültmek hakkında bilgi vereceğim.
Basit olarak shrink nedir ona değinelim.
Shrink kısaca küçültmek demektir. Burada yapılacak işlem de log dosyalarının küçültülmesi işlemidir.
Aşağıdaki kod veritabanlarınızın log dosyalarını shrink ile küçültecektir. Bu sayede diskte yer açmış da olacaksınız.
Uyarı : Aşağıdaki kodu canlı veritabanınız üzerinde herhangi bir yedek almadan, işlemin ne olduğunu bilmeden lütfen denemeyin. Aksi takdirde sorumluluk size aittir. Eğer bu işlemi denemek ve ne olduğunu anlamak istiyorsanız local veritabanınız üzerinde işlemi test edin.
DECLARE @LogDBAdi NVARCHAR(100),
@DBAdi NVARCHAR(100),
@SQL NVARCHAR(500);
DECLARE db_cursor CURSOR FOR
SELECT lg.name AS LogDBAdi,
db.name AS DBAdi
FROM sys.master_files lg
INNER JOIN sys.databases db
ON db.database_id = lg.database_id
WHERE lg.type = 1
AND db.name NOT IN ( 'master', 'model', 'msdb', 'tempdb', 'ReportServer$YAVUZSELIM',
'ReportServer$YAVUZSELIMTempDB'
); --Bu kısımda shrink edilmek istenmeyen veritabanları seçilir.
OPEN db_cursor;
FETCH NEXT FROM db_cursor
INTO @LogDBAdi,
@DBAdi;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = N'USE ' + @DBAdi + N';';
SET @SQL
= @SQL + CHAR(13) + CHAR(10) + N'ALTER DATABASE [' + @DBAdi + N'] SET RECOVERY SIMPLE WITH NO_WAIT;' + CHAR(13)
+ CHAR(10) + N'DBCC SHRINKFILE(' + @LogDBAdi + N');' + CHAR(13) + CHAR(10) + N'ALTER DATABASE [' + @DBAdi
+ N'] SET RECOVERY FULL WITH NO_WAIT;' + CHAR(13) + CHAR(10);
EXECUTE sp_executesql @SQL;
FETCH NEXT FROM db_cursor
INTO @LogDBAdi,
@DBAdi;
END;
CLOSE db_cursor;
DEALLOCATE db_cursor;
Shrink edilmesini istemediğiniz veritabanlarını seçtikten sonra shrink işlemine başlayabilirsiniz.
Kodu çalıştırdığınızda aşağıdaki gibi bir sonuç göreceksiniz.
Görüldüğü üzere 4 adet veritabanı için shrink yapılmış oldu. Bu sizin seçiminize göre değişecektir.
Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.