Veritabanı Programlama Dersi 7. Ünite Özet

Yedekleme, Felaket Yönetimi, Bakım

MS SQL Server Dosya ve Veritabanı Yapısı

MS SQL Server’de oluşturulan bir kullanıcı veritabanında ön tanımlı olarak aşağıdaki dosya türleri bulunur:

  • Veri dosyaları (.mdf ve .ndf): Tabloları ve indeksleri barındırır. Veri dosyaları (ön tanımlı 8 kb) bloklara ayrılmıştır ve sql veritabanı tüm işlemleri; blokları yüklemek, bellekte tutmak, değiştirmek ve bir bloğu diske kaydetmek şeklinde gerçekleştirir.
  • İşlem kayıtlarını tutan hareket dosyaları (“.ldf ”): İşlem kayıtlarını tutar. Kayıt dosyası, bir açıdan veri dosyasında yapılacak işlerin komut dizisidir ve geriye doğru da çalıştırılabilir. Bu sayede bir işlemin geri alınabilmesi ya da sistemin çökmesi durumunda veritabanının kararlı bir noktaya geri döndürülebilmesi mümkün olur.

MS SQL Server, çalışmak için dört sistem veritabanına ihtiyaç duyar:

  • Master: MS SQL Server’ın tüm yapılandırma bilgileri bu veritabanında yer alır. Bu yapılandırma bilgilerinde; genel sistem yapılandırması, oturum açma bilgileri, veritabanlarının konumları, diğer bağlı sunucular, replikasyon ve ikizleme gibi işlemlerin bilgileri yer alır.
  • Model: Model veritabanı, yeni oluşturulan veritabanları için ön tanımlı örnektir. Yeni bir veritabanı oluşturulduğunda Model veritabanının kopyası oluşturulur.
  • Msdb: MS SQL Server SQL Agent servisinin yapılandırma bilgilerini içerir. Veritabanı uyarı ve işleri ile ilgili bilgileri tutar.
  • Tempdb: Geçici tablolar, her türlü yordam değişkenleri ve imleç verileri Tempdb’ye yazılır ve okunur. Verilerin sıralama işlemleri Tempdb üzerine yazılarak gerçekleştirilir (order by). Sürüm yönetimi bulunan tablolarda verilerdeki değişiklikler Tempdb’de depolanır.

Yedekleme

Veritabanlarını çalıştıran sistemler ya da sistemlerin barındığı konumlar, ne kadar önlem alınır ise alınsın tam güvenilirlik sağlayamazlar. Her zaman tanımlanmamış ya da dikkate alınmamış risklerin gerçekleşme olasılığı vardır ve herhangi bir sistemde öngörülmemiş bir risk nedeni ile verilerin kaybolması istenmez. Riskleri telafi edebilmek için veritabanlarının yedeklenmeleri gerekir.

Donanım / altyapı arızaları nedeni ile oluşabilecek veri bütünlüğünün bozulması hâlleri, veritabanına ya da üzerinde çalıştığı sistemlere müdahale eden kullanıcıların yanlış işlemleri nedeni ile oluşabilecek kayıplar ya da veri bütünlüğünün bozulması hâlleri ve yasal nedenlerle herhangi bir verinin eski hâlinin talep edilmesi gibi sebepler nedeni ile veriler yedeklenmelidir.

MS SQL Server’da yedeklemenin 3 çeşidi vardır:

  1. Tam yedekleme: Verinin tümünün tek seferde elde edildiği uygulamalardır.
  2. Fark yedekleme: Fark yedeklemeleri, artımlı yedekleme olarak da anılır. Son tam yedekten itibaren verinin sadece değişen blokları alınarak gerçekleştirilir.
  3. Hareket günlük yedeklemeleri: Hareket günlük yedeklemeleri, verinin kendisini değil, veride yapılan değişiklik işlemlerinin kayıtlarını elde eder ve saklar.

Veritabanı replikasyonu, ana veritabanında gerçekleşen işlemlerin hareket kayıtları kısa periyotlarla çalışan bir işlem aracılığı ile ayrı bir disk alanına dosya blokları şeklinde bırakılır. Kopya veritabanları, bu hareket dosyalarını okur ve işlemleri taklit ederek kendilerini ana veritabanı ile eşitlerler. SQL Server replikasyonun doğası gereği veritabanları eş zamanlı olarak eşitlenemezler, her zaman kopya veritabanları biraz geride kalır. Ancak eş zamanlı çalışmıyor olması ve basitliği nedeni ile veritabanlarına daha az yük getirir ve esnek özellikler sağlar. Ancak MS SQL replikasyonu, ana veritabanının ulaşılamaz olduğu hâllerde kopya veritabanına otomatik olarak geçilmesini sağlamaz. Veritabanı yöneticilerinin sistemlere elle müdahale etmesi gerekir.

Veritabanı ikizleme, beklenmedik bir hata, felaket ya da istenmeyen durumlarda felaketten dönme ve yüksek erişilebilirliği sağlamak için geliştirmiş olan bir çözümdür. İkizleme kullanıldığında felaket durumunda veri kaybının önüne geçilmiş ve yüksek erişilebilirlik sağlanmış olur. Kopya veritabanı sunucuları, ana veritabanı sunucusuna ve birbirlerine doğrudan bağlanır ve gerçekleştirilen işlemler aracısız transfer edilir. Bu sayede kimi yapılandırmalarda “gerçek” eş zamanlı eşitleme sağlanabilir. Diğer yapılandırmalarda da eş zamanlı eşitleme mümkün olur. Ancak eşzamanlı ikizlemede ana veritabanı ile kopya veritabanları arasındaki iletişimin mükemmel olması, kopya veritabanlarının performansının ana veritabanı ile yakın olması gibi gereksinimler getirir. Aksi hâllerde, ikizleme, ana veritabanı performansının ciddi biçimde düşmesine yol açabilir. İkizleme, şahit veritabanı sunucusu kullanıldığında asıl veritabanının devre dışı kaldığı hâllerde otomatik olarak kopya veritabanının devreye girmesine izin verir.

Yedekleme ve geri yükleme maliyeti; yedekleme işlemlerinin kurgu ve hazırlığı için çalışanların emek maliyeti, alınması gereken donanım ya da hizmetlerin maliyeti, yedekleme / geri yükleme işlemlerinin gerektirdiği sistem kaynakları (işlemci ve disk yükleri), yedekleme / geri yükleme işlemlerinin gerektirdiği süre ve yedekleme bütçesi maliyet olarak ele alınır.

Geri Yükleme

Aşağıdaki sebeplerden dolayı geri yükleme işlemi yapılır:

  • Felakete uğrayan veritabanını yerine koymak için 
  • Yanlış yapılan bir işlemi verinin önceki hâline ulaşarak onarmak için
  • Eski hâline ulaşarak çeşitli araştırmalar yapmak için
  • Bir ikizleme kurgusunun kurulumunu yapabilmek için
  • Test ortamı oluşturmak için

Felaket Yönetimi

Veritabanı yöneticilerinin, verileri güvenliğini her ortamda iş sürekliliğini sağlaması adına koruması gerekir. Diğer yandan sistem altyapısındaki kayıp ve kesintiler çalışmaların durma noktasına gelmesine sebep olur ve onarılması zor olan kayıplara yol açabilir. Bu nedenle veritabanı yöneticileri bir felaket durumu nedeniyle zarar görerek tüm verilerin kaybolmasına karşı felaket kurtarma planları hazırlamalıdır.

Felaket planlarında kullanılan çözüm yaklaşımları şunlardır:

  • Veritabanı kümeleme
  • Veri yedekleme,
  • Replikasyon veya İkizleme

Master veritabanının bütünlüğünün bozulması durumunda veritabanı sunucusu çalışmayacaktır. Öncelikle veritabanı sunucusunu çalışır hâle getirmek için temel bir Master veritabanı oluşturmak gerekir. Bunun için iki yöntem uygulanabilir. Bu yöntemlerde veritabanının kullanıcı giriş bilgileri geri elde edilemeyeceğinden, yedeklenmiş Master veritabanı geri yüklenene kadar SQL Server’ın ilk kurulumu sırasında seçilen ve yönetici olarak kullanılan ilgili işletim sistemi hesabı kullanılmalıdır. TempDB veritabanının zar görmesi durumunda; SQL Server’ın yeniden başlatılması hâlinde Tempdb veritabanı yeniden oluşturulacaktır. Msdb veritabanının zar görmesi durumunda; Msdb veritabanı yedeklerinden kullanıcı veritabanları gibi geri yüklenir.

Veritabanı Bakımı

Veritabanının sürekliliğini ve performansını maksimum düzeyde tutmak için bakım planına ihtiyaç duyulur. Bakım planında veritabanı yedekleri alınacağı için bir felaket durumunda oluşacak zararlar minimum düzeye indirilmiş olur. İndeks bakımı ve istatistiklerin güncellenmesi ile de veritabanı performansı arttırılmış olur. Bu nedenle veritabanı bakım planındaki faaliyetler periyodik olarak yürütülmelidir.

Veri tabanı bakım faaliyetleri aşağıdaki gibi sıralanabilir:

  • Sistem Veritabanlarını ve Kullanıcı veritabanlarını yedeklemek
  • Tutarlılık denetimleri ile veritabanındaki problem ve bozulmaları kontrol ederek veri kaybını en aza indirgemek
  • İndeks bakımı ile indeksleri yeniden yapılandırmak ve organize etmek, fiziksel parçalanmayı ve indeks sayfa bütünlüğünü iyileştirmek
  • İstatistiklerin bakımı ile eski veya bozuk istatistik verilerini düzeltmek
  • Bakım sonrası temizleme görevleri ile eski yedek ve bakım görevi günlük (log) dosyalarını silmek ve Msdb’deki geçmiş tabloları temizlemek
  • Yedek saklamada kapasite sorunu varsa, yedeği alınan veritabanları sıkıştırmak

Veritabanları genellikle tablo, indeks vb. içeriği büyük dosyalar içerisinde bir arada tutar ve bloklar (page, block) hâlinde yönetir. Bir tablo ya da indekse ait blokların dosya üzerinde orijinal sırası ile durması, kayıtların da bloklar içerisinde sıralı bir şekilde bulunması hâlinde işlemlerin büyük bölümü sistemin normal performansı ile gerçekleştirilebilecektir. Ancak veritabanları, veri biriktirdikçe ve uygulamalar veriler üzerinde değişiklik yaptıkça tabloları içeren veri dosyaları içerisindeki bloklar faklı yerlere taşınır ve ideal dizilimlerinden uzaklaşır. Parçalanma olarak adlandırılan bu durum, indeksleri barındıran veri dosyaları için de geçerlidir. Aynı şekilde veride yapılan değişiklikler zamanla kayıtların bloklar içerisindeki sırasını da değiştirir.

MS SQL aşağıdaki bakım faaliyetlerini destekler:

  • Yedekleme görevlerini planlamak: Veritabanı yedekleme görevi istenilen veritabanlarında tam, fark ve hareket günlük yedeklemesini gerçekleştirir. Fark ve hareket günlük yedeklemesinden önce mutlaka bir tam yedekleme alınması gerekmektedir.
  • Tutarlılık kontrolü: Veritabanı bütünlüğünü kontrol eden görev (Check Database Integrity Task) için DBCC CHECKDB yordamını çalıştırıp seçilmiş veritabanlarında, veri bozulması olup olmadığı kontrol edilir.
  • İndeks bakımı: İndeks yenileme görevi (Rebuild Index Task) veritabanlarındaki indeksleri yeniden oluşturmaya yarar. Bu görevde tam tarama yapılırken, aynı zamanda istatistikler de güncellenir.
  • İstatistik bakımı: Seçilen veritabanındaki tüm nesneler ya da tablo, view bazında istatistik güncelleme görevi (Update Statistics Task) uygulanabilir.
  • Bakım sonrası temizlik: Geçmiş Temizleme Görevi (History Cleanup Task), bir sistem veritabanı olan Msdb’deki işlemlere ait geçmiş kayıtların belli periyodlar arasında yapılmasını sağlar. Bakım Temizleme Görevi (Maintenance Cleanup Task), bakım temizleme olarak adlandırabilir. Yedekleme dosyaları, plan raporları veya dosya sisteminin oluşturduğu diğer dosyalar bu görev ile temizlenebilir.
  • Veritabanı sıkıştırma: Bu görev (Shrink Database Task) veritabanı dosyalarını küçültmeye yarar. Veritabanlarının büyümek için alana ihtiyacı varsa yapılmalıdır. İndeks bozulmasına yol açacağından indeks yenileme görevinden önce yapılmalıdır.