Veritabanı Backup ve Log Backuplarının Kontrol Edilmesi
SQL Server üzerinde ilk olarak kontrol edilmesi gereken iki temel başlıktan bahsetmek istiyorum. En önemli ve öncelikli konumuz verilerin yedeklenmesi olmalıdır. Backup stratejileri hakkında değerli SQL Öncüleri yazarları dostlarımızın makalerinde yeterli bilgiyi bulabilirsiniz. Burada veritabanlarımızın yedeklenip yedeklenmediği, yedeklenenlerin en son ne zaman yedeğinin alındığını kontrol edeceğiz.
SELECT d.name as Veritaban, MAX(b.backup_finish_date) AS [Son Yedekleme Zaman]
FROM master.sys.databases d
LEFT OUTER JOIN msdb.dbo.backupset b ON d.name = b.database_name AND b.type = 'D'
WHERE d.database_id NOT IN (2, 3)
GROUP BY d.name
ORDER BY 2 DESC
Sorgunun sonucunda eğer yedeklenmeyen veya beklediğimizden daha eski tarihte yedeklenmiş olan veritabanlarımız varsa bunlar için maintenance plan veya backup job schedule’larınızı kontrol etmelisiniz.
İkinci olarak veritabanı loglarının yedeklenmesini kontrol edeceğiz. Kotrol scriptinden önce çok önemli hususların altını çizmek istiyorum.
-
Log backup alabilmek için veritabanının recovery mode’un Full veye Bulk-Logged olması gerekir. Simple mode’daki veritabanlarının Log Backup’ları alınamaz.
-
Full veya Bulk-Logged mode’da olan veritabanlarının loglarının truncate olabilmesi için mutlaka Log Backuplarının alınması gerekir. Diğer bir deyişle, Full backup Log dosyasını truncate etmez.
Çok basit olmasına karşın, son söylediğim konu bilinmediğinden veya atlandığından dolayı sık sık log dosyalarının gereksiz yere büyüdüğü ve ancak diskte yer kalmayınca farkına varıldığı durumlarla karşılasıyoruz. Default olarak create edilen veritabanlarının Recovery Mode’ları Full olmaktadır (Model veritabanının Recovery Mode’u değiştirilerek önlenebilir). Log backup ihtiyacı olmayan veritabanlarının Recovery Mode’unu mutlaka Simple yapmalıyız. Recovery Mode Simple olduğunda SQL server log dosyasını truncate eder fakat boş alanı işletim sistemine geri vermez. Log dosyasının fiziksel boyutunu küçültmek için gerektiği durumlarda Shrink yapılmalıdır.
İşte size Recovey Mode’u Full veya Bug-Logged olduğu halde Log backupları alınmayan veritabanları veren script:
SELECT d.name, d.recovery_model, d.recovery_model_desc
FROM master.sys.databases d
LEFT OUTER JOIN msdb.dbo.backupset b ON d.name = b.database_name AND b.type = 'L'
WHERE d.recovery_model IN (1, 2) AND b.type IS NULL AND d.database_id NOT IN (2, 3)
Eğer sorgu sonuç döndürüyorsa ya Log Backup taskı düzenlenmeli veya Recovery Mode’u Simple yapılmalıdır.
Recovery Mode değiştirme komutu:
USE [master]
GO
ALTER DATABASE [Model] SET RECOVERY SIMPLE WITH NO_WAIT
Üretim, yazılım geliştirme ve test ortamlarınızdaki bütün veritabanlarını hemen şimdi kontrol edin, eminim şaşıracağınız sonuçlarla karşılasacaksınız.