SQL Server 2005: Database Snapshotlar

SQL Server 2005: Database Snapshot’lar

SQL Server 2005 ile gelen yeniliklerden biri Database Snapshotlar. Bu özellik bize veritabanının snapshot oluşturulduğu anki içeriğini sunan, read-only bir kopyasını sunar, böylece veritabanının sorgulamalar için kullanılabilecek read-only bir kopyasını elde etmiş oluruz. Peki bu özelliğin veritabanının yedeğini alarak ikinci bir kopyasını oluşturmaktan farkı ne?İlk bakışta bir fark yok gibi görünse de, database snapshot özelliğinin iç yapısına baktığımızda veritabanının ikinci bir kopyasını oluşturmakla aynı şey olmadığını görüyoruz. Hemen bakalım;Şekil 1.1: Database Snapshot Mimarisi

Şekil 1.1"de görebileceğiniz üzere bir database snapshot oluşturduğumuz zaman orjinal veritabanında yer alan tüm verilerin bir kopyası oluşturulmaz. Database Snapshot"a gelen okuma talepleri eğer orjinal veritabanı üzerindeki değişikliğe uğramamış alanları sorguluyorsa, sorgulama orjinal veritabanından yapılır. Sadece orjinal veritabanında bir değişiklik olduğu zaman değiştirilen verilerin değiştirilmeden önceki hali database snapshot dosyasına yazılır. Şekil 1.1"de orjinal veritabanının sadece %10"luk bölümünde değişiklik gerçekleşmiş durumda olduğu ve snapshot dosyasına sadece bu %10"luk bölüm aktarıldığı için database snapshot dosyamız orjinal veritabanının yaklaşık %10"u civarında bir dosya boyutuna sahiptir.

Database Snapshotların Sunduğu Avantajlar

Database Snapshotlar orjinal database ile sadece değişiklik olmuş veriler olması halinde diyalog kurduğu için snapshot oluşturma işlemi son derece hızlıdır. Sparse dosyasına sadece orjinal veritabanında değişiklik olduğunda veri yazıldığı için disk alanı sadece değişikliğe uğrayan veri oranında olacaktır. Veritabanının ikinci bir kopyasını oluşturma işleminde olduğu gibi kullanılan disk alanı iki katına çıkmayacaktır. Aynı veritabanı için istediğiniz kadar snapshot oluşturabilirsiniz. Böylece veritabanının farklı zamanlardaki durumları üzerinde istediğiniz zaman çalışabilirsiniz. Backup ve Restore işlemlerine göre hem çok daha kolay hem de çok daha hızlıdır. Çok az efor sarfederek statik bir raporlama ortamı oluşturabilirsiniz. Ana veritabanındaki hasar görmüş, yanlışlıkla değiştirilmiş veriler snapshot aracılığıyla düzeltilebilir, ana veritabanı restore edilebilir.

Database Snapshotların DezavantajlarıHer teknoloji gibi database snapshotlarda avantajlara sahip olduğu gibi bazı kısıtlamalar ve dezavantajlar da içermektedir. Database Snapshotların dezavantajları özetle şunlardır:

Raporlama v.b. nedenlerle performans sorunları yaşıyorsanız, Database Snapshotlar sizin için bir çözüm sunmayacak aksine sorununuzu daha da büyütecektir. Bunun nedeni database snapshotların değişmemiş verileri ana veritabanınızdan okuyacak olmasıdır. Database Snapshotlar ana veritabanına bağlı oldukları için ana veritabanınızı offline moda almanız halinde ilgili veritabanına bağlı snapshotlara erişmek mümkün olmayacaktır. Database Snapshot özelliği sadece Enterprise Edition"da bulunmaktadır. Sürekli değişen verilerin bulunduğu veritabanları için çok ideal bir yöntem olduğunu söyleyemem. Snapshotlarda full-text indexing desteklenmemektedir.

Nasıl Kullanırım?Database Snapshotları kullanmak için elinizde iki alternatif vardır. Birincisi t-sql kodları yazarak (ki gerçekten çok karmaşık kodlar değildir bu kodlar) database snapshotları oluşturabilir ve yönetebilirsiniz. İkinci (ve tavsiye edilen :) ) yöntemse benim geliştirdiğim database snapshot manager uygulamasını kullanmak. Ben örneği kendi uygulamamı kullanarak vereceğim ancak her işlemde arkaplanda çalıştırılan kodları da belirteceğim.Örnek senaryomuzda yazgelistir adındaki veritabanı üzerinde çalışıyor olacağız. Bu veritabanında aşağıdaki şemaya sahip bir makaleler tablomuz var.Şekil 1.2: articles tablosunun şemasıBu tabloya deneme amacıyla iki kayıt ekliyorum.Şekil 1.3: örnek veriDatabase Snapshot OluşturmakBu noktada veritabanının bir database snapshot"ını oluşturuyorum. Database Snapshot Manager ile snapshot oluşturmak için önce sunucuya bağlantı oluşturuyor, sonra snapshot alacağınız veritabanını seçip, snapshot için bir isim verip disk üzerinde (sunucunun diski, networkte bir klasör belirtemiyorsunuz) hangi dosyada oluşturulacağını belirtiyoruz ve oluştur diyoruz.Şekil 1.4: Database Snapshot oluşturulduÖrneğimizdeki işlemin arkaplanında çalışan kod şu şekilde oluyor: CREATE DATABASE yazgelistirSnapshot1 ON (NAME = yazgelistir, FILENAME = "C:snapshotsyages1.dbs" ) AS SNAPSHOT OF yazgelistir

Oluşturduğumuz snapshot Management Studio içinde Database Snapshots alanında listelenmektedir ve kaynak veritabanının snapshot oluşturulduğu anki tüm içeriğini birebir yansıtmaktadır ancak önceden belirttiğim gibi burada gördüğümüz veriler kaynak veritabanında değişmemişse kaynak veritabanının veri dosyasınadan, değişiklik olmuşsa snapshot için belirttiğiniz veri dosyasından gelmektedir.Şekil 1.5: Management Studio içinde Database Snapshot

Oluşturulan snapshot"ı artık bir veritabanı gibi görerek içindeki tablolardan sorgulama yapmamız mümkündür ancak unutmamalıyızki database snapshotlar read-only dir. Dolayısıyla update/insert ve delete komutlarını kullandığımızda hata (bkz: şekil 1.6) alırız.Şekil 1.6: Database snapshotlar read-only çalıştığı için insert/update ve delete komutlarını desteklememektedir.

Veritabanını Database Snapshot"tan Restore EtmekŞimdi orjinal veritabanında yer alan iki satırı siliyorum.Şekil 1.7: articles tablosundaki tüm kayıtları sildik.

Restore için Database Snapshot Manager"da ilgili ekranı açarak önce sunucu üzerinden bir database snapshot sonra restore edeceğim veritabanını seçiyorum.Şekil 1.8: Veritabanını Database Snapshot"tan Restore EtmekBu işlem tamamlandığında veritabanı database snapshot"ı oluşturduğum andaki halinde geri dönüyor. Hatırlayacak olursak iki adet kayıt vardı veritabanında. Veritabanındaki articles tablosunun içeriğine yeniden baktığımızda sildiğimiz iki satırın geri geldiğini görüyoruz.Şekil 1.9: Restore Sonrası articles tablosu

Gördüğünüz gibi Database Snapshot veritabanının çeşitli amaçlarla read-only kopyasını oluşturmayı son derece basit ve düşük maliyetli bir hale getiren işimize yarayabilecek bir çözüm olarak karşımıza çıkıyor. Bir sonraki makalede SQL Server 2005 ile ilgili yeni özellikleri incelemeye devam edeceğiz.

Döküman Arama

Başlık :

Kapat