Merhaba!
Bu yazıda, SQL Server ileri seviye yedekleme yöntemlerinden bahsedeceğim. Özellikle Differential Backup ve Transaction Log Backup konularına odaklanacağız. Ayrıca tavsiyeler, senaryolar ve sık yapılan hatalardan da bahsedeceğim.
Full Backup’ı Hatırlayalım
Önceki içeriklerde Full Backup‘ı detaylıca anlatmıştık.
Differential Backup Nedir?
Differential Backup, sadece son Full Backup’tan sonra değişen verileri alır.
Veritabanı boyutu büyüdüğünde, full backup almak daha uzun sürer. Differential backup sayesinde yalnızca değişen verileri yedekleyerek süreyi kısaltabilirsiniz.
Neden kullanılır?
-
Full backup’tan sonra değişen veriler alınır.
-
Daha hızlı yedekleme ve daha küçük dosya boyutları sağlanır.
Örnek Senaryo: Tek Vardiya Çalışan İşletme
Bir işletmemiz var, haftanın 6 günü sabah 09:00 — akşam 17:00 arasında çalışıyor.
Pazar günü kapalı.
-
Her Cumartesi akşamı saat 19:00’da Full Backup alınmalı.
-
Hafta içi her gün saat 19:00’da Differential Backup alınmalı.
Script Üzerinde Değişiklikler
Full Backup için kullandığımız günlük dosyada:
-
Yedek adı tanımlanır ve @YedekAdi olarak değiştirilir.
-
Tarih kısmı “Cumartesi” olarak ayarlanır.
Bu sorguyu Full Backup Cumartesi olarak kaydedip çalıştırabilirsiniz.
Differential Backup için:
-
Dosya adı ve içindeki ifadeler “Differential” olarak değiştirilir.
-
BACKUP DATABASE komutunda
DIFFERENTIAL
parametresi eklenir.
Differential Backup Dosya Boyutları
Cumartesi Full Backup büyük boyutludur.
Hafta içi Differential Backup dosyaları daha küçüktür.
Örneğin Çarşamba günü differential backup alırsanız, Pazartesi ve Salı yapılan değişiklikleri de içerir.
Hafta sonuna doğru differential dosyası büyür.
Yeni Senaryo: 3 Vardiya Çalışan İşletme
Bir işletme haftanın 7 günü, 24 saat (3 vardiya) çalışıyor. Veritabanı büyük, full backup ve differential backup süreleri uzun. Ayrıca anlık olarak geri dönme ihtiyacı var.
Bu durumda Transaction Log Backup kullanmak zorunlu hale gelir.
Transaction Log Backup Nedir?
SQL Server’da her veritabanında iki temel dosya vardır:
-
Data file (.mdf): Asıl veriler.
-
Transaction log file (.ldf): Verilere yapılan tüm değişikliklerin kayıtları.
Transaction log, hangi satıra ne zaman ne oldu bilgisini tutar.
Avantajları
-
Ani kesintilerde kurtarma (recovery).
-
Belirli bir zamana geri dönüş (point-in-time restore).
Recovery Model Kontrolü ve Ayarlama
Transaction Log Backup alabilmek için veritabanı FULL veya BULK_LOGGED recovery modelinde olmalıdır. Varsayılan olarak genelde SIMPLE gelir.
SELECT name, recovery_model_desc FROM sys.databases WHERE name = ‘Uretim’;
Recovery model değiştirme
ALTER DATABASE Uretim SET RECOVERY FULL;
Transaction Log Backup Script
BACKUP LOG Uretim TO DISK = ‘C:\Backup\Uretim_LOG.trn’;
-
Burada artık
BACKUP DATABASE
değilBACKUP LOG
kullanılır. -
Dosya uzantısı
.trn
olmalıdır. -
WITH kısmına gerek yoktur.
Yedekleme Dosyalarını Karşılaştırma
-
Full Backup → En büyük dosya.
-
Differential Backup → Orta boyut.
-
Transaction Log Backup → En küçük dosya.
Otomasyon: SQLCMD ve Batch Dosyaları
SQLCMD komutlarıyla batch dosyaları hazırlanabilir ve Windows Görev Zamanlayıcısı’na eklenebilir. Böylece yedekleme işlemlerini tamamen otomatik hale getirebilirsiniz.
Tavsiyeler
Veritabanı Boyutuna Göre
-
3 GB’ten küçükse: Günlük Full Backup yeterlidir.
-
3–10 GB arası: Haftalık Full Backup, günlük Differential Backup.
-
10 GB’ten büyükse: Aylık Full Backup, haftalık Differential Backup, saatlik Transaction Log Backup.
Çalışma Şekline Göre
-
1 vardiya (8 saat): Günlük Full Backup.
-
2 vardiya (16 saat): Haftalık Full Backup, günlük Differential Backup, opsiyonel log backup.
-
3 vardiya (24 saat): Aylık Full Backup, haftalık Differential Backup, saatlik Transaction Log Backup.
Detaylı anlatım için videomu izleyebilirsiniz:
SQL Server Differential ve Transaction Log Backup Video