23 Mart 2019 Cumartesi

VS ile Veritabanları Arasında Yapısal Kıyaslama Yapma ve Değişiklikleri Geri Alma (Schema Comparison + Restore from Snapshot)

Veritabanı tasarlama yöntemlerine daha önceki bir yazımızda değinmiştik. Bahsettiğimiz yöntemler arasında Visual Studio üzerinde SQL Server Database Project isimli proje ile çalışmanın farklı bir yeri var. Bu şekilde çalışmak sadece veritabanı tasarlamayı kolaylaştırmıyor aynı zamanda projenin anlık görüntüsünü almayı, yapı ve veri karşılaştırmaları yapabilmeyi ve birden fazla kişi ile aynı tasarımı farklı projeler üzerinden ortaklaşa geliştirebilmeyi sağlıyordu. 

Önceki yazımıza aşağıdaki linkten bir göz atabilirsiniz:

Veritabanı Proje Geliştirme Çözümleri - Visual Studio Özellikleri
http://www.abdullahkise.com/2014/03/veritaban-proje-gelistirme-cozumleri.html

Biz bu yazımızda Visual Studio'nun SQL Server ile ilgili sunduğu nimetlerden Schema Comparison aracına odaklanacağız.

Schema Comparison aracı SQL Server Data Tools üzerinden de erişebilirsiniz. Bu özellik iki nokta arasındaki yapısal farklılıkları gayet şık bir arayüzle bize sunabilmekte. iki nokta diyorum çünkü kaynak ve hedef olarak şunları belirtebilirsiniz:
  • Bağlı veritabanları
  • SQL Server Database Project projeleri
  • Veritabanı Snapshotları
  • Data Tier Application (.dacpac) dosyaları
Schema Comparison aracının kullanımı oldukça kolay. Adımlar şöyle:
  1. Kaynak ve hedef belirle.
  2. Karşılaştır.
  3. Farklılıkları hedefe doğrudan yansıt veya
  4. Farklılıkları yansıtacak scriptleri dışarı al (Bu birden fazla hedefi değiştirmek için idealdir.)
Schame Comparison aracını bir senaryo ile birlikte inceleyelim.

Senaryo şöyle:

ChangeableDB isimli bir veritabanımız var. Bu veritabanında bir takım yapısal değişiklikler yapılmak isteniyor. Çalışma sonunda yapısal farklılıklara bir göz atıp belki değişikliklerin tümünü belki de bir kısmını geri eski haline çevirmek isteyebiliriz.

Schame Comparison aracını da kullanarak bu senaryoyla nasıl başa çıkabiliriz?

Çeşitli yöntemler uygulanabilir. Biz yazımızda şu şekilde ilerleyeceğiz:
  1. Çalışma öncesi veritabanının snapshotını al
  2. Yapısal değişiklikler uygulansın
  3. Schema Comparison aracında Source olarak çalışma öncesi alınan snapshotı seç
  4. Schema Comparison aracında Target olarak değişiklikler uygulanmış veritabanını seç
  5. Kaynak ve hedefi yapısal olarak karşılaştır
  6. Değişiklikleri geri almak için iki yöntem var:
    • Schema Comparison ile tüm yapısal değişiklikleri veya bir kısmını hedefe yani veritabanına uygula
    • Snaphsot kullanarak veritabanını restore et. (veri ve yapı dahil snapshot alınan zamana döner)

1- Çalışma öncesi veritabanının snapshotını al


Veritabanı snapshotını aşağıdaki script ile alabiliyoruz. Snapshotlar sayesinde veritabanının o anki görüntüsünü sadece okuma amaçlı alabiliriz. Snapshotlar bazen çoğu zaman kullanışlı olur fakat çok fazla değişiklik yapıldığında görüntünün korunması için işlem sayısında ciddi artış olmaktadır.

Veritabanlarının anlık görüntüsünü aşağıdaki script ile alabilirsiniz:

CREATE DATABASE ChangeableDB_20190323 ON
(
       NAME = ChangeableDB,
       FILENAME = 'G:\DBSnaps\ChangeableDB_20190323.ss'
)
AS SNAPSHOT OF ChangeableDB ;
GO


2- Yapısal değişiklikler uygulansın


Örneğimizdeki ChangeableDB üzerinde bir takım değişiklikler yapalım.Veritabanımızda Products  isimli bir tablo var. Örneğimizde tablonun veri tiplerini değiştiriyorum, kolon silip primary key ekliyorum.

3- Schema Comparison aracında Source olarak çalışma öncesi alınan snapshotı seç


Schema Comparison aracına Visual Studio'yu açıp yukarıdaki menuden Tools/SQL Server /New Schema Comparison.. ile ulaşabilirsiniz. Visual Stuido bir kaç versiyondur bu aracı içermekte. Ben örneğimizde Visual Studio 2017 kullanıyorum.


Açılan pencerede Source ve Target belirtebilirsiniz. Burada proje, veritabanı ve dacpac uzantılı dosyaları kaynak veya hedef olarak belirtebilirsiniz. Biz Database seçeneğini seçelim ve kaynak olarak çalışma öncesi oluşturduğumuz ChangeableDB_20190323 isimli snapshotı gösterelim.


4- Schema Comparison aracında Target olarak değişikliklerin uygulandığı veritabanını seç


Benzer adımları atarak değişikliklerin uygulandığı hali yani ChangeableDB veritabanını hedef olarak gösterelim.


5- Kaynak ve hedefi yapısal olarak karşılaştır


Kaynak ve hedefi belirtikten sonra Compare butonuna basarak yapısal karşılaştırmayı başlatabilirsiniz. Bir süre sonra iki nokta arasındaki tüm değişiklikler listelenecektir. Listeleri açıp maddeler arasında gezerek değişiklikler hakkında detaylı bilgi alabilirsiniz. Değişikliklerin kaynak ve hedefte nasıl göründüğüne scriptlerin olduğu en attaki pencereden bakabilirsiniz.


6-Değişiklikleri geri almak için Schema Comparison ile tüm yapısal değişiklikleri veya bir kısmını hedefe yani veritabanına uygula


Menude bulunan Update butonu ile kaynaktaki yapıyı hedefe uygulayabilirsiniz. Yanında Script butonu ile aksiyonların scriptini alıp üzerinde değişiklikler yapabilirsiniz. Bu şekilde birden fazla hedefe uygulama imkanı olur. Hemen bir yandaki Optioms butonu ile aksiyonların seçeneklerini yönetebilirsiniz.


7- Değişiklikleri geri almak için snaphsotı kullanarak veritabanını restore et


Eğer veritabanını tümüyle snapshot alınan zamana geri çevirmek isterseniz snapshottan restore etme yöntemini kullanabilirsiniz. Yalnız bu yöntemin hem veri hem de yapı anlamında o ana dönülmesini sağladığını unutmayalım. Veri kaybı yaşamamak için dikkatli kullanmakta fayda var.

Snapshottan restore işlemi şu şekilde yapılabilir:

use master
GO

RESTORE DATABASE ChangeableDB
FROM DATABASE_SNAPSHOT=N'ChangeableDB_20190323'

Snapshotları kaldırmak için şu komutu kullanabilirsiniz:

use master
GO

DROP DATABASE [ChangeableDB_20190323]

Schema Comparison, farklılıkları takip etmek ve değişiklikleri kısmen veya tamamen hedefe uygulayabilmek için geliştirilmiş güzel bir araç. Bir göz atmakta fayda var. Yalnız bu gibi çalışmaları önce test ortamlarında yapmayı ve istediğiniz tepkileri elde ettiğinizde canlı ortamlarda uygulamayı unutmamak gerekir.

Faydalı olması dileğiyle...

Hiç yorum yok:

Yorum Gönder