SQL SERVER SNAPSHOT MİMARİSİ

Reading Time: 4 minutes

Snapshot Sql Server 2005 ile hayatımıza girmiştir.

Snapshot; Veritabanının herhangi bir anında alınan ReadOnly yapıda bir kopyasıdır. Source (Kaynak) veritabanımızın Snapshot  ‘ını yani o an ki görüntüsünü aldığımız da fiziksel olarak Diskte snapshot ı alınan verinin o an ki hali bulunmaz.

Veritabanımızın snapshot ını alırken o anda Commit ‘lenmemiş işlemler Rollback yapılır.Yani snapshot CREATE edilirken UNCOMMITED Transaction ‘lar ROLLBACK  yapılarak oluşturulur.

Snapshotlar Read-Only oldukları için herhangi bir Transaction log dosyaları yoktur. Database SNAPSHOT ‘lar Source veritabanında bulunan dataların tutulduğu her bir page için bir bitlik bir değer tutar. Source veritabanında herhangi bir değişiklik olduğu zaman değişikliğin yapıldığı page ler SNAPSHOT ’ta tutulan değer okunarak değiştirilip değiştirilmediğine karar verilir.

a1

                                                    Şekil 1.0 SQL Server SNAPSHOT Mimarisi

 

Yukarıda yer alan Şekil 1.0  şemasında SNAPHOT Mimarisini daha iyi anlayabiliriz. Görüldüğü üzere Source Database üzerinde yapılan değişiklikler Sparse File ‘da mavi blok halinde gözükmektedir.Yani Ana Database ‘imizde  herhangi bir değişiklik olduğunda eski veri Sparse File ‘a geçmekte ve SNAPSHOT üzerinden veri okumaya çalıştığınızda değişmiş verinin bir önceki halini görmüş olursunuz.

Eğer verimiz değişikliğe uğramamışsa SNAPSHOT üzerinden çektiğimiz veriyi Ana Database ‘imiz üzerinden çekmektedir.Yani buradan anlayacağınız aldığımız snapshot üzerinden ana database imizde bir değişiklik olduğunda eski veri yani değişmeden önce ki hali Sparse File ‘e yazılır ve SNAPSHOT üzerinden okumak istediğimizde direk okur. Fakat herhangi bir değişiklik yoksa ana database imizde ; çekmek istediğimiz veriyi gidip ana database imizden çekip bize getirir.

Unutmamak gerekir ki ; Snapshot lar Read-Only moddadır.Yani üzerlerinde değişiklik yapılamaz.

 

ADIM ADIM SNAPSHOT OLUŞTURULMASI

Snapshot oluşturmak için SQL SERVER Managament Studio üzerinde bir arayüz bulunmamaktadır. Bu yüzden Snapshot ’larımızı T-SQL scriptlerimizle oluşturabiliriz.

İlk olarak Test Database imizi ve içerisnde ki tabloları oluşturalım.

 

Buraya kadar test veritabanımızı ve tablolarımızı oluşturduk.

Daha sonra  Snapshot’ını oluşturacağımız Database ‘in Data File Name ‘ine ulaşmamız gerekmektedir. Bunu ister aşağıda ki sistem view ‘ına Select işlemini gerçekleştirerek ya da yine aşağıda gösterdiğim sistem stored prosedürünü çalıştırarak  ulaşabilirsiniz.

–          Sistem View ı üzerinden erişme;

 

a2

–          Sistem Sp_ ‘si ile sorgulama

 

a3

 

Bu bilgilere eritiğimize göre artık aşağıda ki Syntax ‘ı kullanarak Snapshot ımızı oluşturabiliriz.

3

Şekil 1.4 Snapshot Create Syntax

Yukarıda ki scripti incelediğimizde Create Database den gelen alana Snapshot ımıza vereceğimiz alanın adını yazıyoruz.Daha sonra NAME kısmına ise yukarıda işlemler yapıp aldığımız Database  ‘imizin File Name ‘ini yazıyoruz. File_Name bölümüne ise Snapshot ‘ımızı nerede oluşturacaksak onun path bilgisini yazıyoruz. Daha sonra SNAPSHOT OF kısmına da Snapshot alacağımız Database ‘imizin direk ismini yazıyoruz.

Scriptimizde de gördüğünüz gibi , SQLTURKIYE_001 adlı veritabanımızın Snapshot ‘ını SQLTURKIYE_001_SNAPSHOT olarak oluşturuyoruz.

Oluşturduğumuz SNAPSHOT ‘ımıza Management Studuio üzerinden erişmek istiyor isek ;

Object Explorer bölümünde , Databases Snapshots bölümüne tıklayarak Instance ‘ımız üzerinde yer alan Snapshot ‘lara buradan ulaşabilirsiniz. Şekil 1.5 ‘te de görüldüğü üzere SQLTURKIYE_001 adlı Source veritabanımızın oluşturduğumuz SNAPSHOT ‘I bu sekmede yer almaktadır. Aynı zamanda test tablolarımızıda görmekteyiz.

 

 

a4

Şekil 1.5 Databases Snapshots

 

Buraya kadar bir sorun yoksa Snapshot ‘ımızı aldığımızı görmekteyiz. . Database Snapshot oluştururken Source veritabanında bulunan her bir data dosyası için database Snapshot ’ta da bir data dosyası oluşturmalıyız. Ayrıca daha önce bahsettiğimiz gibi NTFS dosya sistemine sahip bir diskte oluşturulmalıdır. Database Snapshot ilk oluşturulduğunda Snapshot için oluşturulan data dosyaları kullanıcılara ait hiçbir veri içermez. Source üzerinde ki page ‘ler güncellendikçe Database Snapshot ’a kopyalanır. Burada dikkat edilmesi gereken nokta ise Database Snapshot ilk oluşturulduğunda çok fazla disk alanına ihtiyaç duymasa bile zamanla ihtiyaç duyduğu disk alanı artabilir. Bu yüzden Snapshot data dosyalarının tutulduğu disk üzerinde boş alan iyi hesaplanmalıdır.

 

Oluşturduğumuz snapshot hakkında bilgi almak için sys.databases   adında sistemde bulunan vertabanları hakkında bilgi veren view sorgulanarak detaylı bilgiye ulaşabiliriz.

İyi Çalışmalar.

 

Leave a Reply

Your email address will not be published. Required fields are marked *