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ımlayabilmeniz 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 sonraki sürümü ve Web Yayımlama İşlem Hattı (WPP) 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.

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ı (bu örnekte ContactManager.Database.dbproj ) ile birlikte, 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ışı vb. gibi veritabanı oluşturulurken kullanılacak veritabanı düzeyi özellikleri 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 tanımak biraz zaman alabilir.

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:

Yukarıdaki kaynaklar arasındaki ilişki

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 NEDEN VSDBCMD Kullanmalısınız?

Veritabanı projelerini dağıtmak için farklı yaklaşımlar vardır. Ancak, bunların tümü bir veritabanı projesini kurumsal ortamdaki 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 büyük olasılıkla şunları istersiniz:

  • Veritabanı projesini uzak bir konumdan dağıtma özelliği.
  • Mevcut bir veritabanında artımlı güncelleştirmeler yapma özelliği.
  • 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 yoksa veritabanını oluşturur veya zaten varsa 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ı dizelerini 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ı paket veritabanı projesi dağıtılan SQL dosyasına genişletme.
  • Veritabanı şemasını veya dağıtım bildirimini kullanarak veritabanını dağıtmak için VSDBCMD yardımcı programını kullanabilirsiniz. Veritabanlarını daha büyük, betikli bir dağıtım işleminin parçası olarak yayımlamanıza olanak tanıyan bir MSBuild hedefinden VSDBCMD.exe çağırabilirsiniz. VsDBCMD komutundan .sqlcmdvars dosyanızdaki değişkenleri ve diğer birçok veritabanı özelliğini 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 ayrıca dağıtım işlemi üzerinde ayrıntılı denetim sağlayan çok çeşitli komut satırı seçenekleri 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:

Destekleyen Visual Studio 2010 Web Deploy 2.0 VSDBCMD.exe
Uzaktan dağıtımı destekler mi? Yes Yes Yes
Artımlı güncelleştirmeleri destekliyor mu? Yes Hayır Yes
Dağıtım öncesi/sonrası betikleri destekliyor mu? Yes Yes Yes
Çok ortamlı dağıtımı destekler mi? Sınırlı Sınırlı Yes
Betikli dağıtımı destekler mi? 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 sürecini 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 belirlemenize olanak sağladığından, neredeyse her zaman dağıtım bildirimini kullanırsı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 yapmasını 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ı dizesini 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 oluşturmak istediğiniz yeri 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.EXEKullanarak Bir Veritabanını Komut İsteminden Dağıtıma Hazırlama .

MSBuild proje dosyasından VSDBCMD'yi nasıl kullanabileceğinize ilişkin bir örnek için bkz. Derleme sürecini 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- belirtirseniz 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ılmayacağı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 eyleminiDağıtım betiği oluştur (.sql) olarak ayarlarsanız, değer False olur. Dağıtım eyleminiDağı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.

Ö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ği 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ğı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 pratikte 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 Üyelikleri 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: