Yönettiğim sistemlerde SQL veritabanlarında log yedeği (log backup) alabilmek ve gerektiğinde belirli bir zaman geri dönebilmek için recovery model olarak Full seçiyorum.
Bir veritabanının recovery modelini SQL Server 2000'de SQL Server Enterprise Manager, SQL Server 2005/2008/2008 R2'de SQL Server Management Studio'da veritabanına sağ tıklayıp Properties'e basıldığında görüntülenen ekranda yeralan Options bölümünden ayarlayabiliyoruz.
SQL Server 2005 / 2008 ve 2008 R2'de Recovery model ayarlanması
Recovery modelin Full olması, özellikle üzerinde çok fazla değişiklik gerçekleşen veritabanlarında bir süre sonra log dosyası boyutunun çok büyümesine, hatta veritabanının boyutunu geçmesine neden olabiliyor. Veritabanının yedeğini düzenli olarak alıyorsanız log dosyasını arada bir temizlemek hem diskte yer kaplaması açısından hem de veritabanının performansı açısından önemlidir.
SQL Server 2000 ve 2005 versiyonlarında aşağıdaki komutlar ile veritabanı log dosyasının boyutunu sıfırlamak mümkün :
USE veritabaniadi
GO
BACKUP LOG veritabaniadi WITH TRUNCATE_ONLY
DBCC SHRINKFILE(veritabaniadi_log)
GO
Ancak bu işlemi SQL Server 2008 ve 2008 R2 versiyonlarında gerçekleştirmek istediğiniz aşağıdaki hata mesajı ile karşılaşıyoruz :
Msg 155, Level 15, State 1, Line 1
'TRUNCATE_ONLY' is not a recognized BACKUP option.
Bu hatanın sebebi, artık TRUNCATE_ONLY komutunun desteklenmiyor olması. Peki, SQL Server 2008 ve 2008 R2'de log dosyasını temizlemek için var mı? Elbette var! Aşağıdaki komutlar ile veritabanı log dosyasını temizleyebiliyoruz :
USE veritabaniadi
GO
ALTER DATABASE veritabaniadi SET RECOVERY SIMPLE WITH NO_WAIT
DBCC SHRINKFILE(veritabani_log)
ALTER DATABASE veritabaniadi SET RECOVERY FULL WITH NO_WAIT
GO
Bu komutlarla yaptğımız işlem recovery modeli Simple olarak değiştirmek, log dosyasını temizlemek ve recovery modeli tekrar Full olarak değiştirmek.
NOT : DBCC SHRINKFILE(veritabani_log) satırlarında geçen veritabani_log kısmı veritabanının log dosyasının adıdır. Fiziksel dosya adı ile aynı olmayabilir. Bu adı veritabanının Properties ekranındaki Files bölümündeki Logical Name kısmından veya aşağıdaki komutları çalıştırıp ekrana gelen sonuçtaki Name bölümünden görebilirsiniz.
USE veritabaniadi
GO
SELECT * FROM sys.database_files