Veritabanı Projeleri Dağıtma
tarafından Jason Lee
Not
Birçok kurumsal dağıtım senaryosunda, dağıtılmış bir veritabanına artımlı güncelleştirmeler yayımlama olanağına sahip olmanız gerekir. Bunun alternatifi, veritabanını her dağıtımda yeniden oluşturmaktır; bu da mevcut veritabanındaki tüm verileri kaybedeceğiniz anlamına gelir. Visual Studio 2010 ile çalışırken, artımlı veritabanı yayımlama için önerilen yaklaşım VSDBCMD kullanmaktır. Ancak, Visual Studio'nun ve Web Yayımlama İşlem Hattı'nın (WPP) sonraki sürümü, doğrudan artımlı yayımlamayı destekleyen araçlar içerir.
Contact Manager örnek çözümünü Visual Studio 2010'da açarsanız, veritabanı projesinin dört dosya içeren bir Özellikler klasörü içerdiğini görürsünüz.
Proje dosyasıyla birlikte (bu örnekte ContactManager.Database.dbproj ), bu dosyalar derleme ve dağıtım işleminin çeşitli yönlerini denetler:
- Database.sqlcmdvars dosyası, projeyi dağıtırken kullandığınız tüm SQLCMD değişkenleri için değerler sağlar. Her çözüm yapılandırması (örneğin, hata ayıklama ve sürüm) farklı bir .sqlcmdvars dosyası belirtebilir.
- Database.sqldeployment dosyası, projenizde tanımlanan harmanlamanın mı yoksa hedef sunucunun harmanlamasının mı kullanılacağı, hedef veritabanının her seferinde yeniden oluşturulması mı yoksa mevcut veritabanının güncel olması için değiştirilmesi gibi dağıtıma özgü ayarlar sağlar. Her çözüm yapılandırması farklı bir .sqldeployment dosyası belirtebilir.
- Database.sqlpermissions dosyası, hedef veritabanına eklemek istediğiniz izinleri tanımlamak için kullanabileceğiniz bir XML belgesidir. Tüm çözüm yapılandırmaları aynı .sqlpermissions dosyasını paylaşır.
- Database.sqlsettings dosyası, kullanılacak harmanlama, karşılaştırma işleçlerinin davranışı gibi veritabanı oluştururken kullanılacak veritabanı düzeyi özelliklerini belirtir. Tüm çözüm yapılandırmaları aynı .sqlsettings dosyasını paylaşır.
Bu dosyaları Visual Studio'da açmak ve içeriği öğrenmek için biraz zaman ayırmaya değer.
Bir veritabanı projesi oluşturduğunuzda, derleme işlemi iki dosya oluşturur:
- Veritabanı şeması (.dbschema dosyası). Bu, XML biçiminde oluşturmak istediğiniz veritabanının şemasını açıklar.
- Dağıtım bildirimi (.deploymanifest dosyası). Bu, veritabanınızı oluşturmak ve dağıtmak için gereken tüm bilgileri içerir. Dağıtım yönergeleri (.sqldeployment dosyası) ve dağıtım öncesi veya dağıtım sonrası SQL betikleri gibi diğer kaynaklarla birlikte .dbschema dosyasına başvurur.
Bu, şu kaynaklar arasındaki ilişkiyi gösterir:
Gördüğünüz gibi,.sqlsettings dosyası ve .sqlpermissions dosyası derleme işlemine girişlerdir. Veritabanı proje dosyasıyla birlikte, bu dosyalar veritabanı şema dosyasını oluşturmak için kullanılır. .sqldeployment dosyası ve .sqlcmdvars dosyası, derleme işleminden değişmeden geçer. Dağıtım bildirimi, veritabanı şemasının konumunu, .sqldeployment dosyasını, .sqlcmdvars dosyasını ve dağıtım öncesi veya dağıtım sonrası SQL betiklerini gösterir.
Veritabanı Projesi Dağıtmak için VSDBCMD Neden Kullanılır?
Veritabanı projelerini dağıtmaya yönelik çeşitli yaklaşımlar vardır. Ancak, bunların tümü bir veritabanı projesini kuruluş ortamındaki uzak sunuculara dağıtmak için uygun değildir. Veritabanı projesi dağıtımından ne istediğinizi göz önünde bulundurun. Kurumsal dağıtım senaryolarında şunları isteyebilirsiniz:
- Veritabanı projesini uzak bir konumdan dağıtma özelliği.
- Var olan bir veritabanında artımlı güncelleştirmeler yapma olanağı.
- Dağıtım öncesi betikleri veya dağıtım sonrası betikleri dahil etme özelliği.
- Dağıtımı birden çok hedef ortamına uyarlama özelliği.
- Veritabanı projesini daha büyük, genellikle betikli, tek adımlı bir çözüm dağıtımının parçası olarak dağıtma özelliği.
Veritabanı projesini dağıtmak için kullanabileceğiniz üç ana yaklaşım vardır:
- Visual Studio 2010'da veritabanı proje türüyle dağıtım işlevini kullanabilirsiniz. Visual Studio 2010'da bir veritabanı projesi derleyip dağıttığınızda dağıtım işlemi, derleme yapılandırmasına özgü SQL tabanlı bir dağıtım dosyası oluşturmak için dağıtım bildirimini kullanır. Bu, henüz mevcut değilse veritabanını oluşturur veya zaten mevcutsa veritabanında gerekli değişiklikleri yapar. Bu dosyayı hedef sunucunuzda çalıştırmak için SQLCMD.exe kullanabilir veya Visual Studio'yu dosyayı oluşturup çalıştıracak şekilde ayarlayabilirsiniz. Bu yaklaşımın dezavantajı, dağıtım ayarları üzerinde yalnızca sınırlı denetime sahip olmanızdır. Ayrıca, ortama özgü değişken değerleri sağlamak için SQL dağıtım dosyasını da değiştirmeniz gerekebilir. Bu yaklaşımı yalnızca Visual Studio 2010 yüklü bir bilgisayardan kullanabilirsiniz ve geliştiricinin tüm hedef ortamlar için bağlantı dizesi ve kimlik bilgilerini bilmesi ve sağlaması gerekir.
- Bir veritabanını bir web uygulaması projesinin parçası olarak dağıtmak için Internet Information Services (IIS) Web Dağıtım Aracı'nı (Web Dağıtımı) kullanabilirsiniz. Ancak, var olan bir yerel veritabanını hedef sunucuda çoğaltmak yerine bir veritabanı projesi dağıtmak istiyorsanız bu yaklaşım çok daha karmaşıktır. Web Dağıtımı'nı, veritabanı projesinin oluşturduğu SQL dağıtım betiğini çalıştıracak şekilde yapılandırabilirsiniz, ancak bunu yapmak için web uygulaması projeniz için özel bir WPP hedefleri dosyası oluşturmanız gerekir. Bu, dağıtım işlemine önemli miktarda karmaşıklık ekler. Ayrıca, Web Dağıtımı mevcut veritabanlarına yönelik artımlı güncelleştirmeleri doğrudan desteklemez. Bu yaklaşım hakkında daha fazla bilgi için bkz . Web Yayımlama İşlem Hattı'nı veritabanı projesi dağıtılan SQL dosyasını paketlemek için genişletme.
- Veritabanını dağıtmak için VSDBCMD yardımcı programını, veritabanı şemasını veya dağıtım bildirimini kullanarak kullanabilirsiniz. Daha büyük, betikli bir dağıtım işleminin parçası olarak veritabanlarını yayımlamanıza olanak tanıyan bir MSBuild hedefinden VSDBCMD.exe çağırabilirsiniz. .sqlcmdvars dosyanızdaki değişkenleri ve birçok diğer veritabanı özelliğini vsDBCMD komutuyla geçersiz kılabilirsiniz. Bu komut, birden çok derleme yapılandırması oluşturmadan dağıtımınızı farklı ortamlar için özelleştirmenizi sağlar. VSDBCMD, bir hedef veritabanını veritabanı şemanızla hizalamak için yalnızca gerekli değişiklikleri yapacağı anlamına gelen farklılaştırma işlevselliği sağlar. VSDBCMD, dağıtım işlemi üzerinde ayrıntılı denetim sağlayan çok çeşitli komut satırı seçenekleri de sunar.
Bu genel bakışta, VSDBCMD'yi MSBuild ile kullanmanın tipik bir kurumsal dağıtım senaryosuna en uygun yaklaşım olduğunu görebilirsiniz:
Destekle -yen | Visual Studio 2010 | Web Deploy 2.0 | VSDBCMD.exe |
---|---|---|---|
Uzaktan dağıtımı destekliyor mu? | Yes | Evet | Yes |
Artımlı güncelleştirmeleri destekliyor mu? | Yes | Hayı | Evet |
Dağıtım öncesi/sonrası betikleri destekliyor mu? | Yes | Evet | Yes |
Çok ortamlı dağıtımı destekliyor mu? | Sınırlı | Sınırlı | Yes |
Betikli dağıtımı destekliyor mu? | Sınırlı | Yes | Yes |
Bu konunun geri kalanında, veritabanı projelerini dağıtmak için MSBuild ile VSDBCMD kullanımı açıklanmaktadır.
Dağıtım İşlemini Anlama
VSDBCMD yardımcı programı, veritabanı şemasını (.dbschema dosyası) veya dağıtım bildirimini (.deploymanifest dosyası) kullanarak veritabanı dağıtmanıza olanak tanır. Uygulamada, dağıtım bildirimi çeşitli dağıtım özellikleri için varsayılan değerler sağlamanıza ve çalıştırmak istediğiniz dağıtım öncesi veya dağıtım sonrası SQL betiklerini tanımlamanıza olanak sağladığından, dağıtım bildirimini neredeyse her zaman kullanacaksınız. Örneğin, bu VSDBCMD komutu ContactManager veritabanını test ortamındaki bir veritabanı sunucusuna dağıtmak için kullanılır:
vsdbcmd.exe /a:Deploy
/manifest:"…\ContactManager.Database.deploymanifest"
/cs:"Data Source=TESTDB1;Integrated Security=true"
/p:TargetDatabase=ContactManager
/dd+
/script:"…\Publish-ContactManager-Db.sql"
Bu durumda:
- /a (veya /Action) anahtarı, VSDBCMD'nin ne yapmak istediğinizi belirtir. Bunu İçeri Aktar veya Dağıt olarak ayarlayabilirsiniz. İçeri Aktar seçeneği var olan bir veritabanından .dbschema dosyası oluşturmak için kullanılır ve Dağıt seçeneği bir .dbschema dosyasını hedef veritabanına dağıtmak için kullanılır.
- /manifest (veya /ManifestFile) anahtarı, dağıtmak istediğiniz .deploymanifest dosyasını tanımlar. Bunun yerine .dbschema dosyasını kullanmak istiyorsanız , /model (veya /ModelFile) anahtarını kullanırsınız.
- /cs (veya /ConnectionString) anahtarı, hedef veritabanı sunucusu için bağlantı dizesi sağlar. Bunun veritabanının adını içermediğini unutmayın; VSDBCMD'nin veritabanını oluşturmak için sunucuya bağlanması gerekir; tek bir veritabanına bağlanması gerekmez. .deploymanifest dosyanız bir bağlantı dizesi içeriyorsa, bu anahtarı atlayabilirsiniz. Anahtarı yine de kullanırsanız, anahtar değeri .deploymanifest değerini geçersiz kılar.
- /p:TargetDatabase özelliği, oluşturma işleminde hedef veritabanına atamak istediğiniz adı sağlar. Bu, .deploymanifest dosyasındaki TargetDatabase özelliğinin değerini geçersiz kılar. Çok çeşitli dağıtım özellikleri ayarlamak ve .sqlcmdvars dosyanızda bildirilen tüm SQLCMD değişkenlerini geçersiz kılmak için /p: [özellik adı]söz dizimini kullanabilirsiniz.
- /dd+ (veya /DeployToDatabase+) anahtarı, bir dağıtım oluşturmak ve bunu hedef ortama dağıtmak istediğinizi gösterir. /dd-belirtirseniz veya anahtarı atlarsanız, VSDBCMD bir dağıtım betiği oluşturur ancak bunu hedef ortama dağıtmaz. Bu anahtar genellikle karışıklığın kaynağıdır ve sonraki bölümde daha ayrıntılı olarak açıklanmıştır.
- /script (veya /DeploymentScriptFile) anahtarı, dağıtım betiğini nerede oluşturmak istediğinizi belirtir. Bu değer dağıtım işlemini etkilemez.
VSDBCMD hakkında daha fazla bilgi için bkz . VSDBCMD.EXE için Komut Satırı Başvurusu (Dağıtım ve Şema İçeri Aktarma) ve Nasıl yapılır: VSDBCMD.EXE Kullanarak Komut İsteminden Dağıtım için Veritabanı Hazırlama.
MSBuild proje dosyasından VSDBCMD'yi nasıl kullanabileceğinize ilişkin bir örnek için bkz . Derleme İşlemi'ni anlama. Birden çok ortam için veritabanı dağıtım ayarlarını yapılandırma örnekleri için bkz . Birden Çok Ortam için Veritabanı Dağıtımlarını Özelleştirme.
DeployToDatabase Anahtarını Anlama
/dd veya /DeployToDatabase anahtarının davranışı, VSDBCMD'yi .dbschema dosyasıyla mı yoksa .deploymanifest dosyasıyla mı kullandığınıza bağlıdır. .dbschema dosyası kullanıyorsanız davranış oldukça basittir:
- /dd+ veya /dd belirtirseniz, VSDBCMD bir dağıtım betiği oluşturur ve veritabanını dağıtır.
- /dd- belirtir veya anahtarı atlarsanız, VSDBCMD yalnızca bir dağıtım betiği oluşturur.
.deploymanifest dosyası kullanıyorsanız davranış çok daha karmaşıktır. Bunun nedeni.deploymanifest dosyasının, veritabanının dağıtılıp dağıtılmadığını da belirleyen DeployToDatabase özellik adını içermesidir.
<DeployToDatabase>False</DeployToDatabase>
Bu özelliğin değeri veritabanı projesinin özelliklerine göre ayarlanır. Dağıtım eylemini Dağıtım betiği oluştur (.sql) olarak ayarlarsanız, değer False olur. Dağıtım eylemini Dağıtım betiği oluştur (.sql) olarak ayarlar ve veritabanına dağıtırsanız, değer True olur.
Not
Bu ayarlar belirli bir derleme yapılandırması ve platformuyla ilişkilendirilir. Örneğin, Hata ayıklama yapılandırması ayarlarını yapılandırıp Yayın yapılandırmasını kullanarak yayımlarsanız, ayarlarınız kullanılmaz.
Not
Bu senaryoda, Visual Studio 2010'un veritabanınızı dağıtmasını istemediğiniz için Dağıt eylemi her zaman Dağıtım betiği (.sql) oluştur olarak ayarlanmalıdır. Başka bir deyişle DeployToDatabase özelliği her zaman False olmalıdır.
DeployToDatabase özelliği belirtildiğinde, /dd anahtarı yalnızca özellik değeri false olduğunda özelliğini geçersiz kılar:
- DeployToDatabase özelliği False ise ve /dd+ veya /dd belirtirseniz, VSDBCMD DeployToDatabase özelliğini geçersiz kılar ve veritabanını dağıtır.
- DeployToDatabase özelliği False ise ve /dd- belirtirseniz veya anahtarı atlarsanız, VSDBCMD veritabanını dağıtmaz.
- DeployToDatabase özelliği True ise, VSDBCMD anahtarı yoksayar ve veritabanını dağıtır.
- Veritabanını da dağıtıp dağıtmadığınıza bakılmaksızın her durumda bir dağıtım betiği oluşturulur.
Sonuç
Bu konu başlığında Visual Studio 2010'daki veritabanı projeleri için derleme ve dağıtım işlemine genel bir bakış sağlanmıştır. Ayrıca, kurumsal ölçekli veritabanı dağıtımlarını desteklemek için MSBuild ile VSDBCMD.exe nasıl kullanabileceğiniz açıklanmıştır.
Bunun uygulamada nasıl çalıştığı hakkında daha fazla bilgi için bkz . Birden Çok Ortam için Veritabanı Dağıtımlarını Özelleştirme.
Daha Fazla Bilgi
Her ortam için ayrı bir dağıtım yapılandırma dosyası oluşturarak veritabanı dağıtımlarını özelleştirme hakkında bilgi için bkz . Birden Çok Ortam için Veritabanı Dağıtımlarını Özelleştirme. Dağıtım sonrası betiği çalıştırarak veritabanı rolü üyeliklerini yapılandırma yönergeleri için bkz . Test Ortamlarına Veritabanı Rolü Üyeliklerini Dağıtma. Üyelik veritabanlarının getirdiği bazı benzersiz zorlukları yönetme konusunda rehberlik için bkz . Üyelik Veritabanlarını Kurumsal Ortamlara Dağıtma.
MSDN'de yer alan bu konular, Visual Studio veritabanı projeleri ve veritabanı dağıtım süreci hakkında daha kapsamlı rehberlik ve arka plan bilgileri sağlar: