SQL Server'da çalışan bir Database üzerinde Backup (yedekleme) ve Restore (geri yükleme) işlemleri, veri kaybını önlemek ve iş sürekliliğini sağlamak açısından kritik bir önem taşır. Özellikle üretim ortamında aktif olarak kullanılan bir Database'de bu işlemleri gerçekleştirmek dikkat ve planlama gerektirir. Full Backup ve Differential Backup stratejileri, çalışan bir Database'de veri kaybı yaşamadan bu işlemleri yapabilmeyi mümkün kılar. SQL Server, yedekleme ve geri yükleme işlemlerini, Database'in kullanıma kapatılmasına gerek kalmadan gerçekleştirebilir.
Full Backup, bir Database'in tamamının yedeklenmesi anlamına gelir ve çalışan bir Database'de bu işlem sırasında Database aktif olarak kullanılmaya devam edebilir. SQL Server, yedekleme işlemi sırasında Copy-on-Write mantığını kullanır; yani, yedekleme işlemi başladığında o anki Database durumu korunur ve bu esnada Database'de yapılan değişiklikler yedeklemeyi etkilemez. Bu sayede, Database üzerinde çalışan kullanıcılar veya işlemler yedekleme süresince kesintisiz devam ederken, Database'in tam bir kopyası oluşturulabilir. Ancak, büyük Database'lerde Full Backup işlemi uzun sürebileceğinden, genellikle haftalık ya da aylık olarak planlanır.
Differential Backup ise, son alınan Full Backup'tan bu yana değişen verilerin yedeklenmesini sağlar. Çalışan bir Database'de bu işlem, Full Backup'tan çok daha hızlı gerçekleşir ve daha az disk alanı kullanır. Bu durum, özellikle büyük veri setlerinde performansı artırır ve yedekleme işlemlerinin minimum kaynak kullanımıyla tamamlanmasını sağlar. Differential Backup, Database'in sürekli aktif olduğu ortamlarda veri kaybını minimize eder ve daha sık aralıklarla yedek alınmasına olanak tanır.
Restore işlemi, veri kaybı durumunda veya eski bir Database sürümüne geri dönme ihtiyacı olduğunda kullanılır. Çalışan bir Database'de geri yükleme işlemi genellikle Database'i kısa bir süreliğine Offline duruma getirir. Geri yükleme işlemi sırasında, en son alınan Full Backup ve ardından en güncel Differential Backup kullanılarak Database eksiksiz bir şekilde geri yüklenir. Bu işlem dikkatle planlanmalı ve iş sürekliliğini en az kesintiye uğratacak şekilde gerçekleştirilmelidir. Özellikle kritik Database'lerde Restore işlemi öncesinde test ortamında işlem doğrulanmalı ve tüm yedekler sağlıklı bir şekilde alınmış olmalıdır.
SQL Server'ın sağladığı online yedekleme ve geri yükleme özelliği, çalışan bir Database üzerinde operasyonel kesintiler olmadan veri güvenliğini sağlayabilir. Bu özellik, veritabanı yöneticilerine esneklik kazandırır ve Database'in kullanıma kapatılmasına gerek kalmadan düzenli yedekleme yapılmasına olanak tanır. Ancak Restore işlemi sırasında Database genellikle kısa süreliğine erişime kapatılacağından, bu işlemin iş yüküne göre dikkatlice zamanlanması önemlidir.
Çalışan bir Database'e, herhangi bir zaman diliminde tekrar Database Backup (veri tabanı yedek alma) işlemi uyguladığınızı varsayalım. Bu yedeği de mevcutta çalışmakta olan Ör. Database001 isimli çalışan veri tabanım üzerinde sağ tıklayıp sırası ile Taks > Restore > Database... seçeneklerini seçerek Restore Database – Database001 penceresi açılıp, Database Restore adımlarını tekrar uyguladığımda;
Restore of Database Failed Hatası
Bu hata, SQL Server’da bir Database geri yükleme işlemi sırasında geri yüklenmek istenen veritabanının mevcut olduğu durumlarda ve geri yükleme işlemi sonrasında veritabanının erişime açılmasıyla ilgili gerekli adımların tamamlanmaması sonucunda ortaya çıkar. Mevcut veritabanı üzerine yazılmadan işlem yapılmaya çalışıldığında veya geri yükleme işlemi tamamlandıktan sonra veritabanı erişime açılmadığında bu hatayla karşılaşılır. Özellikle geri yükleme işlemi sırasında gerekli izinlerin verilmemesi ya da işlem sonrasında veritabanının tam anlamıyla erişilebilir hale getirilmemesi, geri yükleme işleminin başarısızlıkla sonuçlanmasına yol açar.
Restore of Database Failed Hata Çözümü
Çalışan bir Database üzerinde Database Restore (yedekten dönme) işlemi gerçekleştirebilmek için Restore Database penceresinde Select a page altındaki Options alanında tıklıyorum. Bu alanda Restore options bölümünde;
1- Overwrite the existing database (WITH REPLACE)
Bu seçenek, geri yükleme işlemi sırasında mevcut Database'in üzerine yazılmasını sağlar. Yani, eğer aynı isimde bir Database zaten varsa, bu Database silinir ve geri yüklenecek olan yedekle değiştirilir. WITH REPLACE komutu, mevcut Database'i zorla değiştirmek için kullanılır.
2- Recovery state: RESTORE WITH RECOVERY
Bu seçenek, geri yükleme işlemi tamamlandıktan sonra Database'i erişilebilir duruma getirir. Yani, geri yüklenen Database hemen erişilebilir hale gelir ve daha fazla geri yükleme işlemi yapılamaz. RESTORE WITH RECOVERY, Database'i normal çalışma moduna geri döndürür ve geri yüklenecek başka işlem kalmadığını belirtir.
Bu iki seçenek birlikte kullanıldığında, mevcut Database'in üzerine yazılır ve geri yükleme işlemi tamamlandıktan sonra Database, erişime açık hale gelir.
WITH REPLACE Seçeneği Seçilmezse
» Database Adı Çakışması: Geri yüklenecek olan yedek ile hedef Database aynı isimdeyse, SQL Server mevcut veritabanının üzerine yazmaya çalışır. Ancak WITH REPLACE seçeneği kullanılmadığında, SQL Server bunu bir çakışma olarak değerlendirir ve geri yükleme işlemini durdurur. Bu çakışmanın sonucu olarak geri yükleme işlemi başarısız olur ve mevcut Database'in korunması amacıyla üzerine yazılmasına izin verilmez.
» Yedek Dosyasının İkinci Defa Yüklenememesi: Aynı veritabanının yedeklerini tekrar tekrar geri yüklemeniz gerekiyorsa, her geri yüklemede WITH REPLACE seçeneğinin kullanılmaması, işlemde tutarsızlıklara ve hatalara neden olabilir. Özellikle test ortamlarında sıkça geri yükleme yapılıyorsa, bu seçeneğin atlanması işlemin sürekliliğini engeller.
WITH REPLACE seçeneği, mevcut veritabanını tamamen silip yerine yedekten geri yükleme işlemi yapmak için zorunludur. Bu seçenek işaretlenmediğinde SQL Server mevcut Database'in üzerine yazmayı engeller, bu da geri yükleme işleminin başarısızlıkla sonuçlanmasına neden olur.
RESTORE WITH RECOVERY Seçeneği Seçilmezse
» Database’in Erişime Kapatılması: Geri yükleme işlemi tamamlandıktan sonra veritabanı erişime açılmaz ve NORECOVERY modunda kalır. Bu durumda veritabanı, veritabanı yönetim sisteminde Restoring modunda görünür ve herhangi bir işlem yapılamaz. Yani, veritabanı geri yüklenmiş olsa dahi SQL Server, geri yükleme işleminin devam edeceğini düşünür ve veritabanını erişime açmaz.
» İşlemin Tamamlanmaması: Geri yükleme işlemi tamamlandıktan sonra RESTORE WITH RECOVERY komutunun verilmemesi, işlemin bitmemiş gibi algılanmasına yol açar. Veritabanını erişime açmak için bu komutun mutlaka işlenmesi gerekir. Aksi takdirde SQL Server, veritabanını geri yükleme aşamasında bırakır ve başka Transaction Log dosyalarının yükleneceğini varsayar.
Çalışan bir veri tabanında Differential Backup Restore İşlemleri
Eğer elinizde Differential Backup varsa ve daha öcesinde Full Backup aldıysanız, Full Backup üzerine Differential Backup ile yedeğini aldığınız değişen verileri Restore edebilmek için;
İlk geri yükleme işleminde RESTORE WITH RECOVERY seçeneğini seçmiştik çünkü o adımda geri yükleme işlemi tamamlandığında Database'in hemen erişilebilir olmasını istemiştik. Ancak, şu an RESTORE WITH NORECOVERY seçeneğini seçiyoruz çünkü Differential Backup veya Transaction Log Backup gibi ek yedeklemeleri geri yüklemeye devam etmek istiyoruz.
RESTORE WITH NORECOVERY seçeneği, SQL Server'a Recover işleminin henüz tamamlanmadığını ve başka yedeklerin geri yükleneceğini bildirir. Bu nedenle, Database'in erişime açılmadan, geri yükleme modunda kalması sağlanır. Eğer bu adımda RESTORE WITH RECOVERY seçilmiş olsaydı, Database'in geri yükleme işlemi sonlandırılır ve ek yedeklerin geri yüklenmesine izin verilmezdi.
Bu geçişi yapmamızın nedeni, Full Backup yüklendikten sonra Differential Backup gibi ek adımları yükleyebilmek için Database'i NORECOVERY modunda tutmamızın gerekmesidir. NORECOVERY seçeneği, geri yükleme zincirini tamamlarken Database'in açık işlemler veya başka veri kayıplarını önlemek adına kilitli kalmasını sağlar.
Bu makalemde Çalışan bir veri tabanında FULL Database (veri tabanı) Backup Restore ve DIFFERENTIAL Database (veri tabanı) Backup Resote (veri tabanı yedekten dönme) işlemlerinin nasıl yapılacağına değindim.
Faydalı olması dileğiyle...
Her türlü görüş ve önerilerinizi aşağıdaki yorum panelinden bırakabilir, kafanıza takılanları veya merak ettiklerinizi sorabilirsiniz.