SQL Server otomatik yedekleme (SQL Express dahil)

SQL Server veritabanını her gece kendiliğinden yedeklemek: Standard'da bakım planı, Agent'ı olmayan SQL Express'te sqlcmd ve Görev Zamanlayıcı.

724 Backup ekibi 5 dk okuma

SQL Server otomatik yedekleme (SQL Express dahil)

SQL Server veritabanı çalışırken dosyaları açık ve sürekli değişen bir yapıdır. Veritabanının .mdf ve .ldf dosyalarını kopyalamak tutarlı bir yedek vermez; veritabanı SQL Server'ın kendi BACKUP komutuyla ya da SQL Server'ı tanıyan bir yedekleme programıyla yedeklenmelidir. Bu yazıda yedeği her gece kendiliğinden almanın yollarını, ücretsiz SQL Server Express dahil, adım adım anlatıyoruz.

Önce: hangi sürümü kullanıyorsunuz?

SQL Server Management Studio'da (SSMS) sunucuya bağlanıp şu sorguyu çalıştırın:

SELECT SERVERPROPERTY('Edition')

Sonuç "Express Edition", "Standard Edition" ya da "Enterprise Edition" gibi bir değerdir. Bu fark önemlidir: zamanlanmış işleri çalıştıran SQL Server Agent bileşeni Express sürümünde yoktur. Standard ve Enterprise'da birkaç tıkla kurulan otomatik yedek, Express'te Windows Görev Zamanlayıcı ile kurulur. Microsoft'un SQL Server Express yedeklerini zamanlama rehberi de bu yolu anlatır.

Express'in iki sınırı daha yedeklemeyi ilgilendirir:

  • Veritabanı boyutu: Veritabanı başına sınır SQL Server 2022 ve öncesinde 10 GB, SQL Server 2025'te 50 GB'dır. Sınıra ulaşan veritabanı büyüyemez.
  • Yedek sıkıştırma yoktur: Yedek dosyası, veritabanındaki veriye yakın büyüklükte olur. Yedek klasörünün diskini buna göre seçin.

Yedek türleri: tam, fark ve işlem günlüğü

  • Tam yedek (full): Veritabanının tamamı. Her geri yüklemenin başlangıç noktasıdır.
  • Fark yedeği (differential): Son tam yedekten bu yana değişen kısımlar. Tam yedekten küçüktür ve daha hızlı alınır.
  • İşlem günlüğü yedeği (log): Son günlük yedeğinden bu yana yapılan işlemler. Belirli bir dakikaya dönmeyi sağlar. Yalnız kurtarma modeli Full ya da Bulk-logged olan veritabanlarında, en az bir tam yedekten sonra alınabilir.

Küçük bir işletme için yaygın düzen her gece bir tam yedektir. Gün içinde yoğun veri girişi varsa öğle saatine ikinci bir tam ya da fark yedeği eklenir. Dakika hassasiyetinde geri dönüş gerekiyorsa kurtarma modeli Full yapılır ve birkaç saatte bir günlük yedeği alınır.

Veritabanlarınızın kurtarma modelini şu sorguyla görebilirsiniz: SELECT name, recovery_model_desc FROM sys.databases. Kurtarma modeli Full olup hiç işlem günlüğü yedeği alınmayan bir veritabanında günlük dosyası (.ldf) sürekli büyür ve zamanla diski doldurabilir. Ya düzenli günlük yedeği alın ya da dakika hassasiyetinde geri dönüşe ihtiyacınız yoksa kurtarma modelini Simple yapın.

Standard ve Enterprise: Bakım Planı ile otomatik yedek

  1. SSMS'te Management altında Maintenance Plans'e sağ tıklayın ve Maintenance Plan Wizard'ı seçin.
  2. Görev olarak Back Up Database (Full) seçin ve yedeklenecek veritabanlarını işaretleyin.
  3. Hedef klasörü yazın (ör. D:\SQLYedek) ve "Verify backup integrity" kutusunu işaretleyin.
  4. Zamanlamayı her gece 02.00 gibi kimsenin çalışmadığı bir saate ayarlayın.
  5. Eski dosyaların diski doldurmaması için plana Maintenance Cleanup Task ekleyin (ör. 14 günden eski .bak dosyalarını silsin).

SQL Server Agent hizmetinin çalıştığından ve başlangıç türünün otomatik olduğundan emin olun. Agent durursa plan da çalışmaz ve bu kolayca fark edilmeyebilir.

SQL Server Express: Görev Zamanlayıcı ile otomatik yedek

1. Yedek klasörünü hazırlayın

Veritabanının bulunduğu diskten farklı bir diskte bir klasör açın, ör. D:\SQLYedek. Yedek dosyasını SQL Server hizmeti yazar; bu yüzden SQL Server hizmet hesabının bu klasöre yazma izni olmalıdır.

2. Microsoft'un yedekleme prosedürünü kurun

Microsoft, Express için sp_BackupDatabases adlı hazır bir saklı yordam yayımlıyor. Yukarıdaki rehberde bağlantısı bulunan SQL_Express_Backups.sql betiğini indirin ve SSMS'te açıp çalıştırın ya da komut satırından kurun:

sqlcmd -S .\SQLEXPRESS -E -i "C:\Temp\SQL_Express_Backups.sql"

Yordam üç parametre alır: yedek klasörü, yedek türü (F tam, D fark, L işlem günlüğü) ve isteğe bağlı olarak veritabanı adı. Ad verilmezse çevrimiçi tüm veritabanlarını yedekler ve dosya adlarına tarih ile saati ekler.

3. Toplu iş dosyasını yazın

Not Defteri'nde Yedekle.bat adlı bir dosya oluşturun ve şu satırı yazın:

sqlcmd -S .\SQLEXPRESS -E -b -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLYedek\', @backupType='F'"

-E Windows hesabıyla bağlanır. -b bir hata olduğunda komutun hata koduyla bitmesini sağlar; bu parametre olmadan başarısız bir yedek Görev Zamanlayıcı'da başarılı görünür. SQL kullanıcı adı ve parolasıyla bağlanırsanız parola dosyada açık metin olarak durur; dosyanın bulunduğu klasöre erişimi kısıtlayın.

Dosyayı önce elle çalıştırın ve yedek klasöründe .bak dosyasının oluştuğunu görün. Hatayı şimdi düzeltmek, zamanlanmış görevde aramaktan kolaydır.

4. Görev Zamanlayıcı'ya ekleyin

  1. Başlat menüsüne "Görev Zamanlayıcı" yazıp açın.
  2. Temel Görev Oluştur'u seçin ve göreve bir ad verin, ör. "SQL gece yedeği".
  3. Tetikleyici olarak her gün 02.00'yi seçin.
  4. Eylem olarak program başlatmayı seçin ve Yedekle.bat dosyasını gösterin.
  5. Bitirmeden önce özellikler penceresini açın. Görevin kullanıcı oturum açmamışken de çalışmasını seçin ve görevi veritabanını yedekleme yetkisi olan bir hesapla çalıştırın.

5. Eski yedekleri temizleyin

Microsoft'un yordamı eski dosyaları silmez. Diskin dolmaması için toplu iş dosyasına ikinci satır olarak 14 günden eski yedekleri silen şu komutu ekleyebilirsiniz:

forfiles /p "D:\SQLYedek" /m *.bak /d -14 /c "cmd /c del @path"

Yedeğin alındığını ve açıldığını doğrulayın

  • Görev Zamanlayıcı'da görevin son çalışma sonucu 0x0 olmalıdır. 0x1, yedek komutunun hata verdiğini gösterir.
  • SQL Server'ın yedek geçmişine bakın: SELECT TOP 10 database_name, type, backup_finish_date FROM msdb.dbo.backupset ORDER BY backup_finish_date DESC
  • Yedek dosyasının okunabildiğini denetleyin: RESTORE VERIFYONLY FROM DISK = N'D:\SQLYedek\dosya.bak'. Bu komut dosyanın eksiksiz ve okunabilir olduğunu gösterir; içindeki verinin sağlam olduğunu kesin olarak göstermez.
  • En güvenilir test geri yüklemedir. Ayda bir, son yedeği SSMS'te Restore Database ile farklı bir adla (ör. sonuna _TEST ekleyerek) geri yükleyin. Files sayfasında dosya adlarını da değiştirin; yoksa canlı veritabanının dosyalarının üzerine yazmaya çalışırsınız. Kontrolden sonra test veritabanını silin.

Yedeği sunucudan çıkarın

Yedek dosyaları aynı sunucuda durdukça disk arızasında, fidye yazılımında ya da hırsızlıkta veritabanıyla birlikte kaybolur. Yedek klasörünü her gece başka bir yere, tercihen buluta gönderin. Saatleri çakıştırmayın: 02.00'de SQL yedeği başlıyorsa bulut yedeğini 03.00'e koyun. SQL yedeği bitmeden başlayan bir dosya yedeği yarım .bak dosyası gönderebilir.

SQL Server'ı destekleyen bir bulut yedekleme programı veritabanını doğrudan da yedekleyebilir. Express'te yukarıdaki yerel yedeği yine de kurmanızı öneririz: bulut hizmetinden bağımsız ikinci bir kopya verir ve küçük kayıplarda en hızlı geri dönüş yoludur.

Kontrol listesi

  • SQL Server sürümü ve veritabanlarının kurtarma modeli belli mi?
  • Gece tam yedeği zamanlandı mı, komutta -b var mı?
  • Yedek klasörü veritabanından farklı bir diskte mi?
  • Eski yedekler düzenli siliniyor mu?
  • Yedek klasörü sunucu dışına gidiyor mu, saatler çakışmıyor mu?
  • Son deneme geri yüklemesi ne zaman yapıldı?

Logo kullanıyorsanız bu adımların Logo veritabanına nasıl uygulandığını Logo yedekleme yazısında anlattık. SQL Server'ın buluta yedeklenmesi için SQL yedekleme sayfasına bakabilirsiniz.

Hangi paketin yeteceğini birlikte bulalım

Kaç bilgisayarınız, sunucunuz ve veritabanınız olduğunu söyleyin; yedeklenecek veriyi birlikte hesaplayıp size uygun paketi ve yedekleme planını önerelim.

Çalışma saatleri
Hafta içi 09:00 – 18:00