Merhaba,
Bu soru bana iş başvurum sırasında Sayın Kadir Evciler hocam tarafından sorulmuştu. Cevabını sizlerede anlatmak istedim.
SQL Server’da 3 şekilde backup alabilirsiniz.
1-) Full Backup
2-) Differential Backup
3-) Transaction Backup
Konumuz itibari ile ben sizlere 3’ü madde olan Transaction Backup’ı anlatacağım. Her transaction’ın işlem bilgilerini içeren Transaction Log Backup ile istenilen bir ana dönmek mümkündür.
Şimdi örneğimize başlayalım ;
-- Örnek bir Database Create Ediyoruz CREATE DATABASE TRLogBackup -- Oluşturduğumuz Database Recovery Model bilgisini Full olarak değiştiriyoruz Log Backup Alabilmemiz için Full olmak zorunda. ALTER DATABASE TRLogBackup SET RECOVERY FULL -- Oluşturduğumuz Backup seçiyoruz Use TRLogBackup GO -- TblTarih isiminde Tarih ve deger bilgisi barındıran bir tablo oluşturuyoruz. Create table TblTarih(Tarih datetime, Deger int)
Log Backup’ların restore edilebilmesi için ilk olarak bir Full Backup’ın restore edilmesi gerekmektedir. O yüzden işlemlere başlamadan önce bir Full Backup alıyorum.
--İşlemlere başlamadan önce Full Backup alıyorum backup database TRLogBackup to disk='D:TRLogBackup_Full.bak'
Şimdi Farklı zamanlarda 5 Adet Kayıt girişi yapıyorum..
-- Farklı zamanlarda 5 kayıt girişi yapıyorum INSERT INTO TblTarih VALUES (GETDATE(),1) INSERT INTO TblTarih VALUES (GETDATE(),2) INSERT INTO TblTarih VALUES (GETDATE(),3) INSERT INTO TblTarih VALUES (GETDATE(),4) INSERT INTO TblTarih VALUES (GETDATE(),5)
Oluşturdum Kayıtları Kontrol ediyorum.
-- Girilen Kayıtları kontrol ediyorum. SELECT * FROM TblTarih
Şimdi ise Log Backup Alıyorum.
--Insert işlemlerinden sonra Log Backup alıyorum backup Log TRLogBackup to disk='D:TRLogBackup_Log.trn'
Evet şimdiye kadar herhangi bir sıkıntı olmadan kayıtlarımızı oluşturduk. Kayıt girişlerimizi de gerçekleştirdik. Bir sebepten dolayı 14:50:00 zamanına geri dönülmesi gerekti.Bu durumda benim TblTarih isimli tablom da sadece 2 kayıt olması gerekiyor.
Şimdi bu işlemi nasıl yapacağız buna bakalım.
Restore işleminde ilk olarak Full Backup’ı restore edip daha sonra Log Backup’ı restore edeceğim. Eğer birden fazla Log Backup var ise istediğim ana gelene kadar bütün Log Backup’ları sırası ile restore etmem lazım. Ben 1 adet Log Backup almıştım.
use master GO --Önce Full Backup'ı restore ediyorum. --Bu işlemden sonra Log Backup'ı da restore edeceğim için. -- WITH NORECOVERY seçeneğini kullanıyorum. RESTORE DATABASE [TRLogBackup] FROM DISK = N'D:TRLogBackup_Full.bak' WITH NORECOVERY, REPLACE GO --Şimdi Log Backup'ı restore ediyorum. --İstenilen bir ana dönmek için STOPAT seçeneğini kullanıyorum RESTORE LOG [TRLogBackup] FROM DISK = N'D:TRLogBackup_Log.trn' WITH STOPAT = '2013-07-25 14:50:00.000' GO
Sonuç ;