SQL SERVER’ DA RECOVERY MODELLERİ
SQL server da yer ala önemli hususlardan biri de her Database Administrator bilmesi gereken Recovery Modelleri, Backup ve Restore işlemleridir.
Bir veri tabanında muhakkak herkes; İnsert, Update, Delete, Select işlemleri veya Creat, Alter, Drop terimlerini kullanmıştır. Yapılan tüm bu işlemler ve kullanılan tüm terimler log_file dosyasında konumlandırılmakta ve içerisine yazılmaktadır. Seçilen Recovery türüne göre tutulup tutulmayacağı değişir Bir veri tabanı tanımladığımızda 2 tane dosya oluşur, bunlar data ve log_file olarak ayrılmaktadır.
Data file; tablolar, dizinler, saklı prosedürler ve görünümler gibi verileri ve nesneleri içerir. Log_file, veri tabanındaki tüm işlemleri kurtarmak için gereken bilgileri içerir, (Veri dosyaları, 2021) loglama işlemlerinin takip edildiği alandır.
Backup ve restore işlemlerini gerçekleştirebilmek için öncelik olarak Recovery modelini bilmemiz gerekmektedir. SQL Server yedekleme ve geri yükleme işlemleri, veri tabanının kurtarma modeli kapsamında gerçekleşir.
Recovery modeli; SQL server’da bir veri tabanı özelliğidir. Transaction logların nasıl tutulacağına karar vermektedir. Veri tabanının işlem günlüğünün nasıl tutulacağına karar verir ve daha sonra bir veri tabanı geri yükleme işlemi için kullanılabilecek belirli bir sıradaki veri değişikliklerini korur. Transaction Log; SQL ‘de her türlü işlemin tutulduğu yerdir. Herhangi bir felaket durumunda verilerin kurtarılmasını sağlar.
Recovery modeli 3 çeşittir:
- Full Recovery Modeli
- Simple Recovery Modeli
- Bulk Logged Recovery Modeli
Full Recovery Modeli
Veri tabanı üzerindeki yapılan bütün işlemler Transaction Log dosyasına yazılır. Veri tabanında veri kaybına yol açmak istemediğimizde Full Recovery model kullanırız.
Full Recovery modelde kullanıcı silme işlemi yapmadan silinmez ve her işlem kayıt altına alınır. Bu açıdan da en güvenli Recovery modeldir. Herhangi bir problem oluştuğunda ve veri tabanımızda bozulmalar gerçekleştiğinde olayın olduğu son ana gidebilmek için full Recovery modeli kullanılmalıdır.
Full Recovery model, her türlü yedeklemeyi destekler. Günlük yedeklemeleri gerektirir. Zaman içinde rastgele bir noktaya geri dönebilir (örneğin, uygulamadan veya kullanıcı hatasından önce). Veri yedeğinizi veya yedeklerinizi geri yükledikten sonra, sonraki tüm işlem günlüğü yedeklerini geri yüklemeniz ve ardından veritabanını kurtarmanız gerekir. Bu günlük yedeklemelerinden biri içindeki belirli bir kurtarma noktasına bir veritabanını geri yükleyebilirsiniz. Kurtarma noktası, belirli bir tarih ve saat, işaretli bir işlem veya bir günlük sıra numarası (LSN) olabilir. (Complete Database Restores, 2021)
Dikkat edilmesi gereken husus, ilerleyen zamanda loglar büyüyeceği için aralıkla temizlenmelidir. Bu işlem Full Recovery modelde backup alarak yani veritabanını yedekleyerek gerçekleşir. Veritabanını tam veri tabanı yedeğinden herhangi bir konuma geri yükleyerek tüm veritabanını tek adımda yeniden yerine getirebiliriz. Yedekleme sonucu orijinal veri tabanı gibi çalışma durumu gerçekleşecektir.
Bir veri tabanındaki Recovery modeli T-SQL ‘de Full Recovery modele çevirmek için aşağıda yer alan sorguyu da kullanabiliriz:
ALTER DATABASE database_adı SET RECOVERY FULL
Simple Recovery Modeli
Simple Recovery modelde veri tabanında bulunan Transaction logların günlük yedeklemesi yoktur. Bundan dolayı Transaction loglar büyüyemezler. Bu modelde Log yönetimi kolaydır, ancak geriye dönük Transaction loglar silindiği için Transaction logların yedeklenmesi(backup) ve yedekten döndürülmesi (restore) Full Recovery Modeli gibi sağlıklı olmaz. Dolayısıyla bu durum da veri kaybına yol açar, her yedeklemeden sonra, bir felaket olması durumunda veri tabanı olası iş kaybına maruz kalır.
Simple Recovery modeli Transaction kod bloğu çalıştığı sürece ihtiyacı varsa eğer küçük küçük olarak log_file içerisine alır ancak kayıtlı tutmaz. Transaction Log işlemleri Simple Recovery modeli tarafından desteklenmezler.
Bir veri tabanındaki Recovery modeli T-SQL ‘de Simple Recovery modele çevirmek için aşağıda yer alan sorguyu da kullanabiliriz:
ALTER DATABASE database_adı SET RECOVERY SIMPLE
CheckPoint işlemini Simple Recovery Modelde Kullanımı:
CheckPoint işlemi, full Recovery modelde çalışmaz iken Simple Recovery modelde çalışır. Nedeni full Recovery modelde silme işleminin gerçekleşmemesinden kaynaklıdır.
Simple Recovery modeli kullanılmayan ve aktif olan iki bölüm şeklinde yer alır. Transaction loglarını tutan ancak CheckPoint işlemine bağlı olarak sağlıklı Backup alamadığı için veri kaybı oluşturan Recovery modelidir.
Simple Recovery modeli için kısa bir örnek çalışma verecek olursak;
Bir veri tabanı oluşturalım.
CREATE DATABASE Üniversite_Etkinliklerii
GO
Oluşturduğumuz bu veri tabanının içine bir tablo atalım.
CREATE TABLE üniler
(
ASÜ NVARCHAR(50)
, YTÜ NVARCHAR(50)
, NEVÜ NVARCHAR(50)
, AKDÜ NVARCHAR(50)
, ERÜ NVARCHAR(50)
, GAÜN NVARCHAR(50)
)
Oluşturduğumuz tabloya CheckPoint atarak Transaction Log file’daki kayıtlı işlemleri temizleyelim.
Oluşturduğumuz tabloya kayıt ekleyerek çalıştıralım.
INSERT INTO üniler (ASÜ, YTÜ, NEVÜ, AKDÜ, ERÜ, GAÜN) VALUES (68, 34, 50, 07, 38, 27)
Son olarak eklediğimiz kayıtlara istinaden oluşan kayıtlarımızı sorgulayalım.
CHECKPOINT
GO
SELECT * FROM fn_dblog(null,null)
Bu fonksiyon Log file içinde yer alan kayıtları döndüren fonksiyondur. Her bir fonksiyonun başlangıç bitiş kaydını ve LSN bilgisini bize getirir.
Uyguladığımız sorgu sonucu, atmış olduğumuz işlemler loglanmıştır.
Tekrar CheckPoint atarak, SELECT * FROM fn_dblog(null,null) komutunu çalıştırıyoruz ve işlem sonucu bize default olarak kayıtlarımızı getiriliyor.
Yapılan örnek sonucu CheckPoint işlemi Simple Recovery modelde uygulanmıştır.
Bulk Logged Recovery Modeli
Bulk Logged Recovery Modeli, Bulk işlem yaparken Transaction Log dosyasının büyümediği bir modeldir. Bulk, toplu işlem demektir. Bu işlemler dışında bütün her şey loglanır.
Bulk işlemler bir Transaction Log dosyasına yazılmadığı için bu işlemler Full Recovery Modeline göre daha hızlı gerçekleşir. Transaction Logları İşlem günlüğü geri yüklemesini gerektirebilecek toplu günlük kurtarma modeli altında işlemler çalıştırırsanız, bu işlemler veri kaybına maruz kalabilir.
Bulk işlem için minimum günlük kaydı kullanarak günlük alanın kullanımını azaltır.
Bulk Logged da İnsert ‘ler den farklı olarak başına Bulk getirilir ve her türlü yedeklemeyi destekler.
Bir veri tabanındaki Recovery modeli T-SQL ‘de Bulk Logged Recovery modele çevirmek için aşağıda yer alan sorguyu da kullanabiliriz:
ALTER
DATABASE
database_adı SET RECOVERY BULK LOGGED
Ek olarak; oluşturduğumuz veri tabanının Recovery modelini, hatta tüm veri tabanlarımızın Recovery modellerini T-SQL sorgu ile öğrenebiliriz:
SELECT NAME, RECOVERY_MODEL_DESC FROM sys.databases
Çok güzel bir çalışma nitelikli bir fikir çalışması olmuş başarılar dilerim.
Bu tür çalışmaları genç girişimci arkadaşlardan bekliyoruz