SQL Server Transaction Log Backup ile istenilen zamana geri dönün..

By | July 25, 2013

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

Select List

Ş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ç ;

Select List2

Leave a Reply

Your email address will not be published. Required fields are marked *