Database in zarar görmesi yada bunun gibi database e erişilemeyen durumlarda backup alınmamış işlemlerin kayıpsız olarak geri alınabilmesi için kullanılan back up tipi Tail-Log Backup tır.
Sistem böyle bir durumda normal backup scriptlerinin kullanılmasına izin vermez ve sadece Tail-Log Backup kullanabilirsiniz.
Tail-Log Backup ile Backup Alma
Tail Log backup ın kullanılabilmesi için database Recovery Model in full yada bulk-logged olması gerekmektedir. Ayrıca bu backup işlemi GUI den yapılamaz. Not düşmekte fayda var. Log file ın zarar gördüğü durumlarda Tail-Log backup alınamaz.
Aşağıdaki durumlarda Tail-Log Backup alarak backup lanmamış işlemlerinizi kurtarabilirsiniz.
- Eğer database online ise restore işlemlerine başlamadan önce WITH NORECOVERY option ı ile tail-log backup alabilirsiniz.
BACKUP LOG database_name TO WITH NORECOVERY
- Eğer database offline ise ve start edilemiyor ise Tail-Log Backup alabilirsiniz. WITH NORECOVERY kullanımı opsiyoneldir. Eğer database damaged ise WITH CONTINUE_AFTER_ERROR yada WITH NO_TRUNCATE option ı kullanılabilir. WITH NO_TRUNCATE option ı damaged database ler haricinde kullanılmaması önerilir.
BACKUP LOG database_name TO [WITH { CONTINUE_AFTER_ERROR | NO_TRUNCATE }
Şöyle bir senaryo düşünelim.
Live ortamda kullandığımız bir database var ve belirli aralıklarla bu database i backup lıyoruz. Yeni backup zamanı gelmeden disk te bir problem oldu ve mdf file bozuldu. Şu anda Database e erişemiyoruz ve normal backup lama işlemlerini yapamıyoruz. Eldeki backup lardan dönersekte veri kaybımız olacak. Bizim amacımız log dosyası vasıtasıyla veri kayıpsız mdf file a tekrar ulaşmak.
Şimdi bunun örneğini yapalım.
İşlemlere başlamadan önce C:\Backup klasörünü yaratalım. Çünkü backup lar buraya alınacak.
use master
GO
--yeni bir database create ediyoruz.
create database TailSampleDB
GO
--yeni bir table create ediyoruz.
use TailSampleDB
create table TailSampleTbl (a varchar(10))
GO
--Yeni bir satır insert ediyoruz.
--Amacımız her backup tan evvel bir satır ilave etmek.
--Son satır ilavesinden sonra mdf file ı sileceğiz ve
--Tail-Log Backup ile bu satırı yani datanın son halini kurtarmaya çalışacağız.
insert TailSampleTbl select '1'
GO
--İlk satır ilavesinden sonra full backup alıyoruz.
BACKUP DATABASE [TailSampleDB] TO DISK = N'C:\backup\full.bak' WITH NOFORMAT, NOINIT, NAME = N'TailSample-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
--İkinci satırı insert ediyoruz.
insert TailSampleTbl select '2'
GO
--İkinci satırdan sonra diff backup alıyoruz.
BACKUP DATABASE [TailSampleDB] TO DISK = N'C:\backup\diff.bak' WITH DIFFERENTIAL, NOFORMAT, NOINIT, NAME = N'TailSample-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
--Üçüncü satırı insert ediyoruz.
insert TailSampleTbl select '3'
GO
--mdf file ı silebilmek için sql server service ini stop ediyoruz.
--daha sonra mdf file ı bulup siliyoruz.
--service i tekrar start ediyoruz.
--şu anda SSMS ten database bakacak olursanız erişilemez olduğunu göreceksiniz.
--Ayrıca SSMS üzerinden backup alınmadığını görebilirsiniz.
--Restore işlemlerine başlamadan önce data kaybı olmaması için Tail-Log Backup alıyoruz.
BACKUP LOG TailSampleDB TO DISK='C:\backup\tail.bak'
--Restore lere başlıyoruz. Önce Full restore.
--Tail log backup a kadar restore işlemleri WITH NORECOVERY option ı ile
RESTORE DATABASE [TailSampleDB] FROM DISK = N'C:\backup\full.bak' WITH FILE = 1, NORECOVERY, NOUNLOAD, REPLACE, STATS = 10
GO
--Diff back up restore
RESTORE DATABASE [TailSampleDB] FROM DISK = N'C:\backup\diff.bak' WITH FILE = 1, NORECOVERY, NOUNLOAD, REPLACE, STATS = 10
GO
--Tail-Log Backup ı restore ediyoruz.
--Bu restore işlemi son adım olduğu için WITH NORECOVERY kullanıyoruz.
RESTORE LOG [TailSampleDB] FROM DISK = N'C:\backup\tail.bak' WITH FILE = 1, NOUNLOAD, STATS = 10
GO
--Tabloyu kontrol ediyoruz
use TailSampleDB
select * from TailSampleTbl
--bingoo
--Son satır olmak üzere bütün satırlar kurtarıldı.
Umarım faydalı bir yazı olmuştur.
İyi çalışmalar
494faf44-f5ff-435d-9340-7874e005931c|3|5.0