SQL Server yedeklemesi neden ayrı bir konu?

Dosya yedeklemede klasörü kopyalamak çoğu zaman yeterlidir. SQL Server veritabanlarında ise durum farklıdır: SQL Server çalışırken .mdf ve .ldf dosyalarını doğrudan kopyalamak tutarlı bir yedek vermeyebilir. Dosyalar kilitlidir, yazma işlemleri sürer ve kopyalanan dosya, farklı anlardan alınmış parçaların bozuk bir karışımı olabilir.

Doğru yöntem, SQL Server'ın kendi yedekleme mekanizmasını (BACKUP DATABASE) kullanmaktır. Bu komut, veritabanını tutarlı bir anlık görüntü olarak, çalışırken, .bak uzantılı bir yedek dosyasına yazar.

Çalışan bir SQL Server'ın veri dosyalarını elle kopyalamak yedek değildir. Yedeklemeyi her zaman SQL Server'ın kendi yedekleme komutlarıyla yapın.

Üç yedek türü

TürİçeriğiGeri yüklemede
Tam (Full)Veritabanının tamamıHer geri yüklemenin başlangıç noktası
Fark (Differential)Son tam yedekten bu yana değişen veri sayfalarıTam yedekle birlikte uygulanır
İşlem günlüğü (Transaction log)Son log yedeğinden bu yana yapılan tüm işlemlerBelirli bir ana kadar geri dönmeyi sağlar

Kurtarma modelleri (Recovery Model)

Hangi yedek türlerini alabileceğinizi veritabanının kurtarma modeli belirler:

ModelLog yedeğiNe zaman?
SimpleAlınamazKayıp verinin önemli olmadığı test/geliştirme veritabanları. Yalnızca son tam/fark yedeğine dönülebilir.
FullAlınırKritik üretim veritabanları (ERP, muhasebe). Belirli bir ana kadar geri dönüş mümkündür.
Bulk-loggedAlınırToplu veri yükleme dönemlerinde geçici olarak kullanılan özel bir model.

Sık yapılan hata: Veritabanı Full modelde, ama log yedeği alınmıyor. Bu durumda işlem günlüğü dosyası sürekli büyür ve diski doldurabilir. Full model kullanıyorsanız log yedeklerini mutlaka zamanlayın.

Temel yedekleme komutları

Aşağıdaki komutlar örnektir. Veritabanı adını ve yolları kendi ortamınıza göre değiştirin.

Tam yedek
BACKUP DATABASE [ERP]
TO DISK = N'D:\Yedek\ERP_Tam.bak'
WITH COMPRESSION, CHECKSUM, INIT,
     NAME = N'ERP Tam Yedek';
Fark (differential) yedek
BACKUP DATABASE [ERP]
TO DISK = N'D:\Yedek\ERP_Fark.bak'
WITH DIFFERENTIAL, COMPRESSION, CHECKSUM, INIT;
İşlem günlüğü (log) yedeği
BACKUP LOG [ERP]
TO DISK = N'D:\Yedek\ERP_Log.trn'
WITH COMPRESSION, CHECKSUM;
  • CHECKSUM: Yedek sırasında sayfaların bütünlüğünü doğrular.
  • COMPRESSION: Yedeği sıkıştırır; alan ve süre kazandırır. SQL Server sürümüne ve edisyonuna göre desteği değişebilir.
  • INIT: Aynı dosyanın üzerine yazar. Her çalışmada benzersiz dosya adı kullanmak (tarih/saat ile) geçmişi korur.

Belirli bir ana geri dönmek (Point-in-time Restore)

Full kurtarma modeli ve düzenli log yedekleri, veritabanını belirli bir ana geri döndürme imkânı verir. Örneğin yanlış bir DELETE komutu 14:32'de çalıştırıldıysa, veritabanını 14:31'e dönecek şekilde geri yükleyebilirsiniz. Bunun için son tam yedek, varsa son fark yedeği ve o ana kadarki tüm log yedekleri sırayla uygulanır.

Yedek zinciri ve geri dönüş noktası
TTam yedek FFark yedeği Log yedekleri

Kırmızı çizgi seçtiğiniz geri dönüş noktasıdır. Tam yedek, fark yedeği ve çizgiye kadarki log yedekleri sırayla uygulanır.

Geri yükleme örneği (zincir)
-- 1) Tam yedek: veritabanı henüz açılmaz
RESTORE DATABASE [ERP_Test]
FROM DISK = N'D:\Yedek\ERP_Tam.bak'
WITH NORECOVERY, REPLACE;

-- 2) Fark yedeği
RESTORE DATABASE [ERP_Test]
FROM DISK = N'D:\Yedek\ERP_Fark.bak'
WITH NORECOVERY;

-- 3) Log yedeği, belirli bir ana kadar; sonra veritabanı açılır
RESTORE LOG [ERP_Test]
FROM DISK = N'D:\Yedek\ERP_Log.trn'
WITH STOPAT = '2026-10-15 14:31:00', RECOVERY;

Geri yüklemeyi önce farklı bir ada (ör. ERP_Test) yapın. Böylece canlı veritabanınızı riske atmadan içeriği kontrol edebilirsiniz. Dosya yolları farklıysa MOVE seçeneği gerekebilir.

Yedeğin işe yaradığını nasıl doğrularsınız?

  • CHECKSUM ile yedek alın. Bozuk sayfaları yedek sırasında yakalar.
  • RESTORE VERIFYONLY ile okunabilirliği kontrol edin. Bu komut yedek dosyasının okunabilir olduğunu doğrular; ancak gerçek bir geri yüklemenin yerine geçmez.
  • Düzenli test geri yüklemesi yapın. Yedeği ayrı bir sunucuya ya da farklı bir veritabanı adına geri yükleyin ve verileri kontrol edin.
  • DBCC CHECKDB çalıştırın. Veritabanındaki bozulma, yedeğe de yansır; bozulmayı erken fark etmek için bütünlük kontrolünü zamanlayın.
Yedek doğrulama
RESTORE VERIFYONLY
FROM DISK = N'D:\Yedek\ERP_Tam.bak'
WITH CHECKSUM;

Örnek zamanlama

Doğru sıklık, kabul edebileceğiniz veri kaybına (RPO) bağlıdır. Kritik bir muhasebe ya da ERP veritabanı için sık kullanılan bir şablon:

YedekSıklık (örnek)Amaç
TamHaftada bir (hafta sonu gecesi)Geri yüklemenin temeli
FarkHer geceGeri yükleme zincirini kısa tutmak
Log15-60 dakikada bir (RPO'ya göre)Veri kaybını dakikalara indirmek

Log yedeği almıyorsanız (Simple model ya da yalnızca tam/fark), olası veri kaybınız son yedekten bu yana geçen süredir.

Unutulan ayrıntılar

  1. Sistem veritabanları: master ve msdb (işler, kullanıcılar, yapılandırma) sunucunun yeniden kurulumunda gerekir; bunları da yedekleyin.
  2. Yedeği başka yere kopyalayın. Yedek, veritabanıyla aynı diskte kalırsa disk arızasında ikisini de kaybedersiniz. 3-2-1 kuralını uygulayın.
  3. Yedeği şifreleyin. Yedek dosyası, veritabanınızın tamamını taşır. Çalınırsa tüm veri sızar. Şifreleme kullanıyorsanız sertifika ve anahtarlarını da yedekleyin; olmadan geri yükleme yapılamaz.
  4. Yer kontrolü yapın. Hedef disk dolarsa yedekler sessizce başarısız olabilir; bildirimleri izleyin.
  5. Geri yükleme sürenizi bilin. Büyük bir veritabanının geri yüklenmesi saatler sürebilir; RTO hedefinizi buna göre belirleyin.

DenizBackup ile SQL Server yedekleme

Yukarıdaki işlemleri her gece elle çalıştırmak ya da kendi betiklerinizi bakımını yapmak yerine, DenizBackup SQL Server veritabanlarınızı otomatik olarak .bak formatında yedekler. Zamanlamayı bir kez kurarsınız; yedekler AES-256 ile şifrelenir, FTP/SFTP sunucusuna aktarılır, eski yedekler politikaya göre temizlenir. Her çalışma loglanır ve sonuç e-posta ile bildirilir.

SQL yedekleme kurulumunda destek almak isterseniz, satın alma formunda notunuza SQL Server kullanımınızı yazmanız yeterli; ekibimiz dönüş yapar.