Page Restore
Veritabanı suspect mode’a düştüğünde full backup’tan restore işlemini yapmadan önce sadece bozulmuş page’leri restore ederek bazen sorunu çözebiliriz. Aşağıdaki script yardımıyla suspect olmuş page’leri bulabilirsiniz.
select * from msdb..suspect_pages
Suspect_pages tablosu aşağıdaki durumlardan sonra değişebilir.
- Bir query read yapmak istediğinde
- DBCC CHECKDB komutu çalıştırıldıktan sonra
- Backup alındıktan sonra
Veritabanı üzerinde aşağıdaki script’i kullanarak restore edeceğimiz page’leri teyit edelim.
DBCC CHECKDB (N'Test') WITH NO_INFOMSGS, ALL_ERRORMSGS;
Bu işlemden sonra aşağıdaki script’i tekrar çalıştıralım.
select * from msdb..suspect_pages
Restore işlemine başlamadan önce suspect mode’a düşmüş veritabanından aşağıdaki script yardımıyla tail log backup almaya çalışalım. Tail Log Backup son log backup’tan sonraki log kayıtlarının backup’ını alır. NO_TRUNCATE ifadesini sağlam bir veritabanında kullanmamalısınız.
BACKUP LOG Test TO DISK = 'C:\MSSQL\TestTailLog.trn' WITH NO_TRUNCATE, COMPRESSION, STATS = 1
Suspect olmuş page’leri bulduktan sonra makalenin başında paylaştığım sorgudaki file_id’leri aşağıdaki script’te 1 gördüğünüz yerlere page_id’leri’de 58 ve 200 gördüğümüz yerlere yazıyoruz ve script’i çalıştırıyoruz.
use master go RESTORE DATABASE Test PAGE='1:58, 1:200' FROM DISK=N'C:\MSSQL\testfull.bak' WITH NORECOVERY ; RESTORE LOG Test FROM DISK=N'C:\MSSQL\testlog.trn' WITH NORECOVERY;
Son olarak aldığımız Tail Log Backup’ı recovery mode’da restore ederek işlemi tamamlıyoruz.
RESTORE LOG Test FROM DISK=N'C:\MSSQL\TestTailLog.trn' WITH RECOVERY;
Page Restore işlemi SQL Server 2012 ile beraber SSMS üzerinden de yapılabiliyor. Aşağıdaki gibi ilgili veritabanına sağ tıklayarak Task-Restore-Page… diyoruz.
Karşımıza gelen ekranda Pages kısmından Add diyerek restore edeceğimiz page’i ya da page’leri giriyoruz. Tabi alt tarafta backup sets kısmında gözüken backup’ların o path’lerde duruyor olması gerekir. Verify diyerek restore işlemi yapmadan önce o dosyaların doğruluğunu teyit edebilirsiniz.
DBCC CHECKDB ile ilgili “DBCC CHECKDB Detayları” isimli makalemi okumanızı tavsiye ederim.