Sayfalar

15 Ekim 2019 Salı

SQL Server Differential Backup ve Restore

SQL Server ile bir veritabanını yedekledikten sonra sadece ufak değişimleri yedekleyerek daha küçük boyutlu bir yedek dosyası oluşturmak için differential (parçalı) yedekleme yapılabilir.
Bunu yapabilmek için önce bir kez Full Backup alınmalıdır. Ardından differential backup ile son alınan full backuptan itibaren yapılan değişiklikler yedeklenir.

Bu işlemler SQL Management Studio ile yapılabilir. Ancak ben dokümantasyon amaçlı olarak SQL komutları ile nasıl yapıldığını açıklayacağım. Öncelikle aşağıdaki full backup komutu ile baz alınacak yedekleme dosyası oluşturulur:

USE [master]
BACKUP DATABASE [MyDb] TO DISK = N'C:\Backup\MyDb-Full.bak' WITH NOFORMAT, INIT, NAME = N'MyDb-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10
GO

Ardından gerçekleşen ufak değişimler sonrasında farklı bir dosya adı belirterek daha küçük boyutlu bir yedek dosyası oluşturmak için aşağıdaki kodu kullanabiliriz:

USE [master]
BACKUP DATABASE [MyDb] TO  DISK = N'C:\Backup\MyDb-Diff1.bak' WITH  DIFFERENTIAL , NOFORMAT, NOINIT,  NAME = N'MyDb-Diff Database Backup #1', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

Şu anda elimizde 1 adet FULL ve bir adet DIFFERENTIAL backup dosyası bulunuyor. Şimdi bunları restore etmek istiyoruz. Burada dikkat edeceğimiz bir husus, full backup restore edildikten sonra burada bir değişiklik olmuşsa tekrar full backup restore etmek istersek NORECOVERY seçeneğini belirtmemiz gerektiğidir. O halde aşağıdaki komut ile full backup u restore ediyoruz.

USE [master]
RESTORE DATABASE [MyDb] FROM  DISK = N'C:\Backup\MyDb-Full.bak' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 5
GO

Ardından differential backup dosyasındaki değişimleri restore etmek için aşağıdaki kodu kullanıyoruz.

USE [master]
RESTORE DATABASE [MyDb] FILE = N'MyDb' FROM  DISK = N'C:\Backup\MyDb-Diff1.bak' WITH  FILE = 1,  RECOVERY,  NOUNLOAD,  STATS = 10
GO

Hiç yorum yok:

Yorum Gönder