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
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:
- Kaynak ve hedef belirle.
- Karşılaştır.
- Farklılıkları hedefe doğrudan yansıt veya
- 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:
- Çalışma öncesi veritabanının snapshotını al
- Yapısal değişiklikler uygulansın
- Schema Comparison aracında Source olarak çalışma öncesi alınan snapshotı seç
- Schema Comparison aracında Target olarak değişiklikler uygulanmış veritabanını seç
- Kaynak ve hedefi yapısal olarak karşılaştır
- 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:
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.
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