MSSQL Server AlwaysOn Yapısında Oluşturulmuş Database Silme veya Durdurma İşlemleri

Bu makalede AlwaysOn yapısı üzerinde herhangi bir database’i AG üzerinde durdurma, silme ve veri akışını kesme gibi işlemleri ele alacağım. Hemen uygulamalı bir şekilde işlemlerimize başlayalım.

AlwaysOn yapısı üzerindeki herhangi bir database’i durdurabiliriz  veya secondary sunucusuyla veri trafiğini kesebiliriz.

“Suspend” işlemi, veri senkronizasyonunu (data movement) durdurur ancak sunucular arasındaki iletişim kanalı açık kalır.

  • Primary sunucu hala secondary’nin orada olduğunu bilir.
  • Secondary sunucu üzerindeki veritabanı “Not Synchronizing” durumuna geçer ve Read-Only erişiminiz varsa, suspend anına kadar olan verileri okumaya devam edebilirsiniz.
  • Sadece Primary’den Secondary’ye yeni log kayıtlarının gönderimi ve orada işlenmesi (Redo) durur.

Normalde (AG olmayan bir yapıda) Log Backup aldığınızda, log dosyasındaki “commited” (onaylanmış) işlemler temizlenir (truncate edilir) ve dosya içinde boş yer açılır. Ancak Always On yapısında bir kural vardır:

Altın Kural: Bir log kaydının Primary üzerinde truncate edilebilmesi için, o kaydın tüm Secondary sunuculara başarıyla gönderilmiş ve yazılmış olması gerekir.

Siz veritabanını suspend ettiğinizde, Primary sunucu logları Secondary’ye gönderemez. Bu durumda:

  1. Siz log backup alsanız bile, SQL Server bu logların henüz Secondary’ye ulaşmadığını bildiği için log dosyasını truncate edemez.
  2. Log backup dosyası oluşur (içinde veriler olur), ancak Primary sunucudaki .ldf dosyasının içi boşalmaz.

Secondary “Suspend” modunda kaldığı sürece Primary sunucu logları biriktirmeye devam eder.

  • Sonsuza kadar bekler: Siz manuel olarak “Resume” demediğiniz sürece veya Secondary’yi AG’den çıkarmadığınız sürece Primary sunucu o logları silmez.
  • Disk Dolma Riski: Eğer veritabanınızda yoğun işlem (DML operasyonları) varsa, log dosyası hızla büyür ve diskini tamamen doldurabilir. Bu durum, Primary sunucunun durmasına (downtime) neden olur.

Availability database üzerine sağ tıklayıp suspend data movement diyiyoruz.

Gelen ekranda Okey tuşuna bastıktan sonra veri aktarımını durdurmuş oluyorum.

İşlemin scripti:

ALTER DATABASE [AdventureWorks2012] SET HADR SUSPEND;

Not: Veritabanı üzerinde herhangi bir işlem yapılmadan önce veritabanı durdurulup yapılan işlemlerin secondary sunucusuna yazılması engellenmektedir.

Artık veri akışı yapılmıyor. Aşağıdaki resim de yeşil olan ikonun mavi olduğunu görmekteyiz.

Secondary sunucumda availability database sekmesini kontrol ettiğimde ikinci makinama herhangi bir veri aktarılmayacak. Çünkü primary sunucumda AG altındaki database’i durdurmuş oldum.

Yukarıdaki resimde görüldüğü gibi secondary sunucuma veri akışı durmuş durumda. AlwaysOn Dashboard ekranı ilgili veritabanından bir sorun olduğunu söylüyor.

Böyle bir sorunla karşılaşıldığında primary sunucumuzda availability databases sekmesi altında suspend olmuş database üzerine sağ tıklanır ve resume data movement kısmı seçilir.

Gelen ekranda Ok tuşuna basılır senkron moduna getirilir.

Primary ve secondary makinede veritabanım aktif olmuş durumda.

AlwaysOn’a dahil olan database’i silmek istediğimizde primary sunucuda Always on high availability sekmesi altında availability databases kısmında silmek istediğimiz database üzerine sağ tıklayıp remove database from availability group sekmesine tıklıyorum.

Gelen ekranda OK deyip işlemimi tamamlıyorum ilk başta Suspend Data Movement… diyebilirdik ama bu yöntemlede silme işlemimiz sorunsuz bir şekilde  yapılabilmektedir.

Yukarıda yapılan işlemin scripti:

ALTER AVAILABILITY GROUP [AGG]  REMOVE DATABASE [ABC];

Veritabanımız Availability Groups  altında silinmiş durumda.

Secondary sunucumuzda bakalım AlwaysOn’dan çıkmışmı ve  AG altında silmiş olduğumuz database nasıl bir durumda.

İkinci sunucuda AG altında veritabanım çıkmış durumda. AlwaysOn’dan çıktıktan sonra nasıl bir yapıya geçiyor bunu görmüş olalım. Restoring moduna düşmesi biraz zaman alabilir. Uzun süre restoring modunda kalan veritabanını tekrardan AG altına dahil etmek istersek dahil olmayabilir. Bunun için restoring modda olan veritabanı üzerindeki trn uzantılı dosyaların sırasıyla takip edilip yüklenmesi gerekmektedir. Sayfamızın backup bölümünde bulabilirsiniz.

Restoring modundan önce not syncronized veya not syncronizing modundan kalır sonra restoring modunda kalır bunu restoring modundan kurtarmak için aşağıdaki komut kullanılır.

Restore database [AdventureWorks2012] with recovery

Veritabanımızın restoring modundan kurtulduğunu görmüş oluyoruz. Kurtarma işlemini yapmayıp restoring olan veritabanımızı hemen silebilirizde.

AlwaysOn yapısında upgrade işlemlerde secondary sunucusuna veri akışının kesilmesi istendiği bir durumda  primary sunucusundan değil secondary sunucusundan veri akışı kesilir. Suspend Data Movement.. denilir.

Artık secondary sunucusuna veri akışının gelmediğini görmüş oluyoruz.

Primary sunucusunda secondary replicanın tamamen koparılması gerekmektedir. Aşağıdaki komut ile yapılmaktadır.

ALTER AVAILABILITY GROUP [AG_NAME] REMOVE REPLICA ON 'SECONDARY_REPLICA'

Başka bir makalede görüşmek dileğiyle..

Şüphesiz yerde ve gökte Allah’a hiçbir şey gizli kalmaz.Âl-i İmran-5

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir