Bu yazıda sizlere SQL Server’daki data-tier uygulamalarını tanıtacağım. Microsoft dokümanlarında denildiği gibi – “SQL Server’daki data-tier – veri katmanı – uygulamaları, table, view, stored procedure, function vb. gibi SQL Server nesneleri geliştirmek ve yönetmek için kullanılabilen mantıksal bir pakettir.” Aslına bakarsanız bu tanımlamanın anlamı SQL Server’ın, tıpkı diğer web veya masaüstü uygulamalarını geliştirirken kullandığınız ortamlar gibi geliştirebileceğiniz, test edebileceğimiz ve konuşlandırabileceğimiz bir SQL Server bileşeni olmasıdır.
SQL Server’daki veri katmanı uygulamaları ilk olarak SQL Server 2008 R2 ile piyasaya sürüldü. Bir veri katmanı uygulamasının oluşturulması demek aslında bir DACPAC dosyası oluşturma işlemidir ve yazı içerisinde kısaca DAC olarak bahsediyor olacağım. DAC, dağıtım için gerekli diğer bazı dosyalarla birlikte XML biçiminde tasarlanan veritabanının modelini içeren başka bir sıkıştırılmış zip klasörüdür. Geliştiriciler, bir DAC kullanarak, veritabanındaki her nesne için DDL komut dosyaları geliştirebilir.Daha sonra bu geliştirilen DAC dosyaları, SQL Server dağıtımına uygun bir yaklaşım ile sunucuya yüklenebilir.
SQL Server’daki veri katmanı uygulamaları ilk olarak SQL Server 2008 R2 ile yaklaşık on yıl önce piyasaya sürüldü. Bir veri katmanı uygulamasının oluşturulması, bir DACPAC dosyasıdır – kısaca DAC dosyası olarak da bilinen Veri Katmanı Uygulama Paketi. DAC, dağıtım için gerekli diğer bazı dosyalarla birlikte XML biçiminde tasarlanan veritabanının modelini içeren başka bir sıkıştırılmış zip klasörüdür. Geliştiriciler, bir DAC kullanarak, veritabanındaki her nesne için DDL komut dosyaları geliştirebilir ve bu komut dosyaları, daha sonra veritabanlarını çeşitli SQL Server ortamlarında yayınlamak için bir dağıtım aracı olarak kullanılabilecek bir DAC dosyasına yerleştirilecektir. SQL Server veritabanlarını dağıtmaya yönelik bu yaklaşım, diğer durumlarda geliştiricilerin her sürüm için sürdürmesi gereken birden çok geçiş komut dosyasını yönetme zorluğunu azaltmıştır.
SQL Server Management Studio’da (SSMS) Data-Tier Nasıl oluşturulur?
Geliştiriciler ve Veritabanı Yöneticileri (DBA’lar), SQL Server Management Studio’yu kullanarak kolayca DAC’ler oluşturabilir. Bu, kullanıcıların DAC dosyasını mevcut bir veritabanından çıkarmasına ve ardından veri katmanı uygulamaları tarafından desteklenen diğer temel işlemleri gerçekleştirmesine olanak tanır. Bir veri katmanı uygulaması çıkarmak için aşağıdaki adımları takip edebilirsiniz.
Bir data-tier uygulaması oluşturmak için mevcut veritabanına sağ tıklayın. Task’i seçin ve ardından Extract Data-tier Application…’ı seçin.
Resim 1 – SSMS ile Data-Tier’ı Extract edin
Ardından karşınıza DAC çıkartma işlemi ile ilgili bir tanıtım ekranı gelir. Bu ekran da gerçekleştirebileceğiniz işlem hakkında bilgiler yer alır. Sonraki işlemlerinizde bu ekranı görmek istemezseniz “Do not show this page again” işaretlemeniz yeterli olacaktır. Bu ekranı geçmek için next ile devam ediniz.
Resim 2 – Extract Data-tier Özellikler penceresi
Burada dikkat etmeniz gereken adım ise DAC dosyası oluştururken buna bir sürüm numarası atayabiliyor olmanızdır. Bu sürüm numarası bundan sonra oluşturacağınız tüm DAC dosyaları içinde yer alacak ve sizin sürüm geçişlerinizi korumanızda yardımcı olacaktır. Son olarak DAC dosyasının oluşacağı konumu seçmeniz gerekmektedir. Örneğimizde D:\SQLDataTierSample klasörü içerisine oluşturuyorum.
Bir sonraki ekrana geçtiğimde işlem ile ilgili özet bilgisi yer almaktadır. Bu adımı da geçiyorum. Son olarak karşıma işlem durumunu gösteren bir ekran geliyor.
Resim 3 – Data-Tier Build Penceresi
DAC oluştuğu kontrol edelim ve içeriğe bakalım.
Resim 4 – DAC File oluşturuldu
DAC dosyası, herhangi bir zip çıkarıcı tarafından açılabilen basit bir sıkıştırılmış zip arşividir. DAC dosyasının uzantısını DACPAC’tan ZIP’ye yeniden adlandırın ve içeriği klasöre çıkarın.
Resim 5 – Extract Zip Dosya içeriği
DACPAC dosyasının içeriğini çıkardığınızda, içinde dört farklı XML dosyası olduğunu göreceksiniz.
Resim 6 – DACPAC içeriği
Bu XML dosyaları, veritabanı ile ilgili herhangi bir veri yada bilgi içermez. İşlem yaptığınız veritabanının yalnızca model bilgileri ile oluşturulur. Veriler ile almak isterseniz de BACPAC olarak dosyası olarak almanız gerekir.DACPAC aslında bir nevi veritabanı modelinin yedeklenmesi işlemidir.
SQL Server Management Studio’da BACPAC dosyası nasıl oluşturulur?
BACPAC oluşturma adımları DACPAC oluşturma adımlarına neredeyse çok benzemektedir. BACPAC oluşturmak için mevcut veritabanına sağ tıklayın. Task’i seçin ve ardından Export Data-tier Application…’ı seçin.
Resim 7 – SSMS ile Export Data-Tier
Karşınıza ilk gelen ekran DACPAC de oluduğu gibi bilgilendirme ekranıdır. Next diyerek “Export Settings” ekranına gelin.
Resim 8 – Export Data-tier Export Settings Ekranı
Bu sayfada iki sekme olduğunu görebilirsiniz – Ayarlar ve Gelişmiş. Burada, BACPAC dosyasının nerede oluşturulmasını istediğinizi belirtebilirsiniz. Ayrıca bu sayfada BACPAC dosyasını bunun yerine doğrudan Microsoft Azure’a kaydetme seçeneğiniz de vardır. Örneğimiz dahilinde ben kendi lokal diskime kaydetmeyi tercih ediyor olacağım.
Gelişmiş sekmesine geçtiğinizde ise veritabanı içerisinde bulunan tüm schema – şemaların – altındaki bir listede tablolardan seçim yapmanızı sağlar. BACPAC dosyasında verilerin olmasını istediğini tabloları buradan seçebilirsiniz. Örnek özelinde ben tüm tabloları seçtim fakat sizin örneğinizde uygulamala loglarını bastığınız yada veritabanı ddl kayıtlarını tuttuğunuz tablolar var ise bunların verilerini oluşturmak istemezseniz dışarıda bırakabilirsiniz.
Resim 9 – Export Data-tier Application Advanced Setting ekranı
Next ile devam edelim, özet ekranın da geçtikten sonra dışarı aktarım işlemi verilerin boyutuna bağlı olarak işlem biraz zaman alabilir. BACPAC dosyasında dışa aktarılan tüm tabloların bir listesini görebilirsiniz.
Resim 10 – Export BACPAC Durumu
DACPAC dosyası gibi, BACPAC dosyası da sıkıştırılmış bir zip dosyasıdır. İçini görüntülemek için herhangi bir zip uygulaması kullanabilirsiniz. Ben Winrar ile görüntüleyip, içerisinde bulunan dosyaları dışarı çıkarttım.
Resim 11 – BACPAC dosya içeriği
Resim 11 görebileceğiniz gibi DACPAC dosyasının içeriğine ek olarak, bunun içinde iki yeni klasör ( “_rels” ve “Data“ ) bulunmaktadır. “Data” klasöründe, BACPAC dosyasını dışa aktarırken seçtiğiniz tüm tablolar için bir dizinin oluşturulduğunu görebilirsiniz.
Resim 12 – BACPAC Data dizini
Ayrıca tablo klasörülerinin içlerini de açarsanız, her birisinin içerisinde BCP dosyasını görebilirsiniz.
Resim 13 – BACPAC DATA dosya içeriği
SQL Server Management Studio’da Data-Tier uygulamaları nasıl import edilir?
Dışarıya aktarımıın gerçekleştirdiğimiz BACPAC dosyasını veritabanı sunucusuna olduğu gibi geri yükleyebiliriz. Bir BACPAC dosyasını geri döndüğümüzde veritabanı şeması ve verileri olduğu gibi geri gelecektir. SQL Server’da bir data-tier uygulamasını import edebilmek için aşağıdaki adımları uygulamamız gerekmektedir.
Veritabanlarına sağ tıklayın ve içerik menüsünden “Import Data-Tier Application…” seçeneğini seçin.
Resim 14 – SSMS ile import Data-Tier
Bilgilendirme ekranın geçiyoruz ve karşımıza “import settings” ekranı geliyor. Bu ekranda BACPAC dosyamızı seçiyoruz. Bu dosya lokal diskte olabileceği gibi Azure üzerinde de konumlanıyor olabilir. Bizim örneğimizde D diski içerisindeydi.
Resim 15 – BACPAC Dosya Yolu
Next ile devam ettiğimizde karşımıza gelen “Database Settings” ekranınıda ise bu BACPAC dosyasını nereye import edeceğimize dair bilgiler istenmektedir. Bizim örneğimizde Azure SQL Veritabanı kullandığımız için oraya ait bilgiler gelmektedir.
Resim 16 – Database Settings
Sihirbaz, işlem başarıyla tamamlandığında bir veritabanı oluşturulacaktır. Bu işlem veritabanı büyüklüğüne göre uzun sürebilir.
Resim 17 – Import Tamamlandı
Aktarım işlemi tamamladığını birde SSMS üzerinden kontrol edelim.
Resim 18 – SSMS Kontrol
Yukarıdaki resimde gördüğünüz üzere BACPAC dosyasını sunumuza başarılı bir şekilde import edebildik.
Neler öğrendiğimiz konusunda bir özetleme yaparsak, DACPAC ve BACPAC dosyalarının nasıl oluşturulduğunu, neler barındırdıklarını ve bu dosyaları kullanarak tekrar veritabanımızı nasıl restore edebileceğimizi öğrenmiş olduk. Şimdi ise konuyu bir adım ileriye taşıyarak Visual Studio ile bu süreci nasıl devam ettirebileceğimizi öğrenmeye devam edelim.
Visual Studio ile Data-Tier Uygulamalar Nasıl geliştirilir?
Bu kısımda sizlere birçok geliştircinin bildiği Visual Studio ile nasıl Data-Tier uygulamalar geliştirilir bundan bahsediyor olacağım. DACPAC, BACPAC gibi kavramların neler olduğunu da öğrenmiştik zaten. Visual Studio 2019 versiyonun kullanıyor olacağım. Ancak diğer versiyonlarda da benzer süreçler gerçekleşecektir.
Visual Studio ile Uygulamayı Oluşturma
Eğer bilgisayarınızda Visual Studio kurulu değil ise resmi web sitesinden indirip kurmanızı tavsiye ederim. Visual Studio Data-Tier uygulamalarını sadece “Windows” da oluşturabilirsiniz.
Visual Studio 2019’u açıp yeni bir proje oluştur’u seçelim.
Resim 1 – VS ile yeni proje oluşturma
Yeni projeye uygun bir proje şablonu seçmemiz gerekiyor. Bunun için “search templates” kısımına “sql server database” yazıyoruz ve aşağıdaki resimdeki gibi “SQL Server Database Project” i seçip next ile ilerliyoruz.
Resim 2 – SQL Database Project Template Seçimi
Şablonu seçtikten sonra proje detaylarını yapılandırmanız gerekir. Bunun için geliştireceğiniz projenin adını dizin konumu ile birlikte belirtmeniz gerekir. Bittiğinde “Create” e tıklayın.
Resim 3 – Yeni proje ayarları
Bu, makinenizin hızına bağlı olarak biraz zaman alabilir. Proje oluşturulduktan sonra onu yeni bir Visual Studio penceresinde görebilirsiniz. Project Explorer bölmesinde projenin adını ve çözümü görebilirsiniz. Buna ek olarak, belirli proje için Özellikler ve Referansları da görebilirsiniz.
Resim 4 – Visual Studio Solution Explorer ve Properties Bölümü
Bir Veritabanı Projesinin Özelliklerini Keşfetmek
Yazının bir önceki bölümünde Visual Studio’da sıfırdan bir veritabanı projesinin nasıl oluşturulacağını görmüştük. Şimdi veritabanı projesinin özelliklerini detaylı olarak inceleyelim. Solution Explorer’dan Properties’e çift tıklayın. Özellikler penceresi görünür.
Resim 5 – Visual Studio Database Project özellikleri penceresi
Yukarıda da görebileceğiniz gibi, Target Platform (Hedef Platformu) seçmek için seçenekler var. Bu, veri katmanı uygulamamızı hangi veritabanı platformuna dağıtacağımızı tanımlar. Hedeflemek istediğimiz minimum sürümü seçmeliyiz. Örneğin SQL Server 2014 ve üzeri tüm sürümleri hedeflemek istiyorsak açılır menüden SQL Server 2014’ü seçmemiz gerekiyor.
Resim 6 – Target Platform seçimi
Hedef platformu seçtikten sonra, sonraki kısım Data-Tier Application özelliklerinin olduğu ekrandır. Bu ekranda uygulamaya bir isim, sürüm bilgisi ve açıklama girebilirsiniz.
Resim 7 – Data-Tier Application Properties ekranı
Projenizi oluşturduğunuzda, derlemeyi yaptığınızda DACPAC dosyası en son hali ile değişecektir. İsterseniz burada bir .sql dosyası oluşturarak (Create script(.sql file) işaretlenirse) DBA ekibine derleme çıktısını bir DACPAC dosyası haricinde de iletebilirsiniz yada kendinizde barındırabilirsiniz.
Eğer ki varsayılan şema adını değiştirmek isterseniz de aşağıdaki resimde gördüğünzü “default schema” kısımını da değiştirebilirsiniz.
Resim 8 – Default Schema Selection
Ayrıca “Database Settings” kısmına tıkladığınız da karşınıza “Common” ekranı gelecektir ve burada veritabanı ayarları ile ilgili bazı özellikleri aktifleştirebilir yada kapatabilirsiniz. Ayrıca Veritabanının Collaction bilgisini de değiştirebilirsiniz.
Resim 9 – Database Settings
Operational sekmesinde ise, veritabanın operasyonel işlemleri ile ilgili ayarlamaları yapabilirsiniz. Veritabanın filegroup bilgisi, recovery model bilgisi gibi özellik değişimlerini bu ekrandan yapılmaktadır.
Resim 10 – Database Settings / Operational Sekmesi
Ayrıca Miscellaneous sekmesinde ise veritabanı projesinin diğer birkaç özelliğini ayarlayabilirsiniz. Eğer ki bu sekme içerisindeki yer alan özellikler ile ilgili yeterli bilginiz yok ise bunları değiştirmeyiniz ve varsayılan olarak bırakınız.
Geliştirmeye başlamadan önce gözden geçirebileceğiniz Build, Debug ve SQLCMD Değişkenleri gibi başka özellikler de vardır. Build özelliğinde, derleme çıktı dizininin yolunu ayarlarsınız. Bu, projeyi oluşturduğunuzda tüm komut dosyalarının ve DACPAC dosyalarının depolanacağı yoldur.
Debug özelliğinde, varsa bir başlatma eylemi ayarlayabilirsiniz. Varsayılan, hiçbiri olarak ayarlanmıştır. Target Connection String tanımlayarak çıktı veritabanının nasıl dağıtılacağını da ayarlayabilirsiniz. Veritabanını yerel bir db veya geçerli bir SQL Server veritabanı bağlantısı olarak tanımlayabilirsiniz. Projenizi dağıttığınızda, motor hedef veritabanına bağlanacak ve değiştirilmiş komut dosyasını buna göre oluşturacaktır.
Resim 11 – Target Connection String
Diğer bir önemli özellik, data-tier uygulamaları için SQLCMD değişkenini ayarlamaktır. Bu değişkenler, çalışma zamanında ayarlanabilen veritabanındaki değerleri tanımlamak için kullanılır.
Resim 12 – SQLCMD Variables
Proje yapısını Best Practices’e göre Oluşturma
Resim 13 – Yeni Klasör Ekle Oluşturduğunuz yeni klasörlere projenize uygun olarak aşağıdaki gibi bir yapı uygulayabilirsiniz.
Resim 14 – Proje yapısı
Veritabanı Projeleriyle Çalışmak
Veritabanı projemiz için ihtiyacımız olan proje yapısını da hazırladığımıza göre artık sıra bir bu proje ile nasıl çalışacağımızı öğrenmeye geldi. Sırası ile geliştirdiğimiz proje de ihtiyacımız olan veritabanı nesnelerini oluşturalım.
Veritabanı Nesneleri Nasıl oluştururuz?
Önce dbo schema altında bir tablo oluşturalım, bunun için proje dizininde tables üzerine sağ tıklayıp “add” ve oradan “Table…” seçelim.
Resim 15 – Table ekleme
Karşımıza gelen “Add New Item” penceresinde “Table” seçili gelecektir, istediğimiz table adını girip “Add” diyerek oluşturalım.
Resim 16 – Tablo isimlendirmesi
Yukarıdaki işlemi gerçekleştirdikten sonra karşımız Visual Studio içerisindeki Tablo Düzenleme – Table Designer – penceresi gelecektir. Burada ki tasarım panosunu kullanarak herhangi bir T-SQL Kodu yazmadan tablo yapınızı oluşturabilirsiniz. Bu adım tıpkı SQL Server Management Studio’da tablo oluşturmaya benzemektedir. Kolon adını yazıp, veri türünü seçmeniz gerekecektir. Aşağıda da oluşturduğunuz tablonun T-SQL Kodunu görebilirsiniz. Bu çok işlevsel bir özelliktir, böylece T-SQL Kodunu yazmadan hızlıca ihtiyacınız olan tabloları oluşturabilirsiniz.
Resim 17 – Table Designer Penceresi ile tablo oluşturma
Benzere şekilde diğer şemaların altına tablolar, stored procedureler yada farklı nesneler oluşturabilirsiniz. Bu projeyi Git gibi bir kaynak kontrolü de ekleyebilirsiniz. Geliştirmeye devam ederken veritabanın sürümünü korumanıza yardımcı olacaktır.Kodunuzu her güncellediğinizde DACPAC dosyasının sürüm numarasını güncellenediğinizden emin olun. Böylece, kodunuzun yeni bir sürümünü her zaman yeni bir veritabanı sunucusuna dağıtabilirsiniz.
Derleme ve Dağıtım Süreçleri
Veritabanı nesnelerimizi projeye eklediğimize göre, projeyi oluşturmaya ve veritabanı sunucusuna dağıtmaya başlayabiliriz. Bundan önce, aşağıdaki iki öğeden emin olmamız gerekecek.
- Build Directory
- Target Connection String
Projenin Özelliklerini görüntüleyerek Build dizinini görüntüleyebilirsiniz. Varsayılan olarak, “bin\Debug\” altında olmalıdır.
Resim 18 – Build Path
Projenin özelliklerini görüntüleyerek Debug dizini görüntüleyebilir ve ardından Target Connection String’i görüntüleyebilir / değiştirebilirsiniz. Doğru veritabanı sunucusunu gösterdiğinizden emin olun, aksi takdirde veritabanı projesi amaçlanmayan başka bir sunucuya dağıtılacaktır.
Resim 19 – Target Connection String
Connection string üzerindeki veritabanı adına dikkat edin, dağıtım gerçekleştiğinde bu veritabanı adıyla bir veritabanı gerçekleşecektir.
Son kontrollerimizi de gerçekleştirdikten sonra projemizi Build edebiliriz. Build -> Build Solutions yada hızlıyolu Ctrl + Shift + B ile yapabiliriz. Kısa bir süre içerisinde “Output“ penceresinde proje durumu ile ilgili bilgiyi görebilirsiniz.
Resim 20 – Build Output
Ayrıca, yukarıdaki adımlarda doğruladığımız derleme dizinine giderek derleme dosyalarını da doğrulayabilirsiniz.
Resim 21 – Build Dizini
Build dizini içerisinde 3 adet dosya göreceksiniz.
- DACPAC dosyası : Veritabanı projesi derleme dosyası
- DLL dosyası : Uygulama uzantısını içerir
- PDB dosyası : program hata ayıklama veritabanını içerir
Şimdi bu veritabanı projesini Target Database konumuna dağıtımını yapalım. Projeye sağ tıklayın ve Publish’i seçin. Target Data Connection’ı tekrar kontrol edin, unutmayın burada hangi veritabanının seçili ise ona dağıtımı yaparsınız. Ayrıca, “Register as a Data-Tier Application” işaretli olması gerekmektedir.
Resim 22 – Publish Database
Ayrıntıları doğruladıktan sonra Publsih düğmesine basabilirsiniz. Data Tools Operation bölmesinin açıldığını ve ilerlemenin görüntülendiğini fark edeceksiniz. Dağıtım, veritabanı projesindeki nesne sayısına bağlı olarak biraz zaman alacaktır.
Resim 23 – Publish Durumu
Yukarıda ki resimde Dağıtım başarılı bir şekilde tamamlandığı bilgisini gördükten sonra SSMS ile dağıtımı doğruluğunu teyit edelim.
Resim 24 – SSMS ile Publish doğrulaması
Gördüğünüz gibi Visual Studio aracılığı bir Data-Tier uygulaması da deploy ettik. Artık tıpkı web yada windows uygulaması geliştirir gibi veritabanı uygulaması geliştirip dağıtımını visual studio üzerinden yapabiliriz. Bu dağıtım işlemlerini DevOps süreçleri ile otonom hale de getirebilirsiniz.
Çağlar Özenç
DMC Bilgi Teknolojileri