SORU
13 Mart 2013, ÇARŞAMBA


Nasıl düzgün SSDT ve Visual Studio 2012 ile veritabanı dağıtım Veritabanı Projeleri yönetmek için?

Araştırma aşamasında varolan küçük bir proje üzerinde 2012 Veritabanı Projeleri kabul etmeye çalışıyorum. Ben bir C# geliştirici, DBA, en iyi uygulamalarla, özellikle akıcı değilim. Bir kaç saat google ve stackoverflow şimdi aradım ama hala bazı temel dağıtım senaryoları işlemek için ne kadar doğru bilmiyorum.

1) birkaç geliştirme döngüleri Boyunca nasıl benim veritabanı birden çok sürümü yönetmek? Benim veritabanı v3 üzerinde bir müşterim var ve v8, Peki bunu nasıl kontrol edeceğiz? onları yükseltmek istersem Şu anda el yapımı şema ve veri taşıma komut ürünün her sürümü için yönetmek. Hala yapması gereken bu ayrı ayrı ya da bu destekler yerine yeni paradigmada bir şey var mı?

2) Eğer şema veri dolaştı olmayı gerektiren şekilde değişirse, ne bu işlemek için en iyi yolu nedir? Bazı çalışmalar Pre-Dağıtım komut dosyası verileri korumak için gider sanırım ve Sonrası Dağıtma komut dosyası doğru yere koyar. Bu şekilde her şey daha iyi olur.

3) Bu yeni teknolojiler ile çalışmak nasıl diğer tavsiye ve rehberlik de greately takdir!

GÜNCELLEME:Sorun benim anlayış aslında bu soru sorduktan sonra biraz büyüdü ve uygulanabilir bir çözüm buldum sırasında bekliyordum Tam Çözüm değildi. İşte benim sorunum bir uygun sözcükler kullanmak:

Yaşıyorum sorun sadece data ile ilgili. Benim uygulama Sürüm 1 Bir müşterim var ve benim uygulama sürüm 5 için onları yükseltmek istiyorum, eğer kendi veritabanında veri olsaydı, hiçbir sorun bunu yaparken olurdu. Sadece SSDT akıllıca şemaları karşılaştırmak ve tek seferde veritabanı göç izin verirdim. Ne yazık ki müşteriler o kadar basit değil çok veri var. Sürüm 2 sürüm 3 için benim uygulama Sürüm 1 şema değişiklikleri (vb) tüm etki veri. Verileri yönetme için geçerli stratejimi her sürüm yükseltme (2, 2 3, vs için 1) için bir senaryo korumak gerektirir. Bu düz oraya gitmek için hiçbir veri taşıma diye bir senaryo var çünkü sürüm 5 için benim uygulama Sürüm 1 düz gitmesini engelliyor beni. Umudu her müşteri için özel bir yükseltme komut dosyaları oluşturmak veya yükseltme komut dosyalarını her büyük sürümü her sürümü gitmek yönetme katlanarak yönetilemez. Umduğum şey, her şey daha kolay hatta çok kolay şeyler şema yan veri yan yönetme yapan strateji SSDT sağlayan bir çeşit oldu. SSDT ile benim son deneyim bana böyle bir strateji mevcut herhangi bir umut vermedi ama farklı bir şekilde öğrenmek isterim.

CEVAP
30 NİSAN 2013, Salı


Bunu kendim üzerinde çalışıyorum, ve kolay olmadığını söyleyebilirim.

İlk olarak, JT ile yanıtla "sürüm", hatta bildirim güncelleme mekaniği ile SSDT. iptal edilemez adresi SSDT bir "oldukça iyi" bir iş (sağlanan bildiğiniz tüm anahtarları ve frikiklerinden) hareket eden herhangi bir kaynak şema için herhangi bir hedef şema ve doğru olan bu değil gerektirir verioning başına, ama hiçbir fikri nasıl yönetmek "veri hareket" (en azından bunu görebiliyorum!). Yani, sadece DBProj gibi, Ön/kendi cihazları için Yazılan komut bıraktın. Veri hareket komut bilinen bir başlangıç bağımlı ve şema durumu sona erdirmek için, DB sürüm kaçınamaz. "Veri hareket" komut dosyaları, bu nedenle, uygulanmalıdır için bir sürüm bilgisi anlık bir şema, yani sen keyfi olarak update DB v1 v8 ve beklediğiniz verileri hareket scriptleri v2 v8 için işe (muhtemelen, hiç gerek kalmayacaktı v1 veri hareket komut).

Ne yazık ki, bana entegre bir şekilde bu senaryo işlemek için SSDT yayıncılık alanında herhangi bir mekanizma göremiyorum. Kendi scafolding eklemek gerekir anlamına gelir.

İlk numara veritabanı içinde sürümleri (ve SSDT projesi) izlemek için. DBProj bir numara kullanmaya başladım, ve SSDT getirdi, ve biraz araştırma yaptıktan sonra, diğerleri bu çok kullandığınız ortaya çıkıyor. Bir DB veritabanı için Genişletilmiş Özellik (çağrı "ya da" AppVersion "veya benzer bir şey), ve bu sürüm için değer geçerlidir. BuildVersion uygulayabilirsiniz Sonra SSDT projede bu genişletilmiş özellik kendisi yakalayabilir ve SSDT bir script (daha sonra genişletilmiş özellikler içeren yayınlama seçeneği kontrol edebilirsiniz) olarak ekleyecektir. Ben o zaman E değişkenleri kaynağını belirlemek ve sürümleri geçerli geçişte uygulanan hedef için kullanın. Kaynak (proje anlık) ve hedef (hedef db güncelleştirilmesi hakkında) arasındaki versiyonlar delta belirledikten sonra uygulanması gereken tüm görüntüleri bulabilirsiniz. Ne yazık ki, bunu yapmak zorduriçindeSSDT dağıtım ve muhtemelen inşa veya dağıtım boru hattı taşımak için elinize sağlık otomatik dağıtımları kullanıyoruz ve bunu yapmak için özel eylemler var).

Bir sonraki yarış ilişkili verileri ile şema anlık hareket komut dosyalarını tutmak. Bu durumda, komut mümkün olduğunca idempotent (yani, herhangi bir kötü yan etkileri olmadan komut dosyalarını çalıştırabilirsiniz) yapmak için yardımcı olur. Güvenli bir şekilde sadece bir kez çalıştırılan komut dosyalarını çalıştırabilirsiniz komut dosyaları bölmek için yardımcı olur. Biz yapıyoruz, aynı şeyi statik referans verileri (sözlük ya da arama tabloları) - yani, biz bir kütüphane BİRLEŞTİRME komut dosyaları (tek başına masa) tut başvuru veri eşitleme, ve bu komut dosyaları dahil dağıtım sonrası komut () AKTARMAK :r komutu). Burada dikkat edilmesi gereken önemli şey bugerekirbu başvuru masalarının birbirine FK başvuruları halinde doğru sırayla onları çalıştırmak. Sipariş sonrası dağıtmak ana senaryo içinde vardır, ve bizim için bu komut dosyaları oluşturan bir araç yarattığımız yardımcı olur - o da bağımlılık sipariş giderir. Bir "" statik referans veri. mevcut durumu yakalamak için sürüm sonunda bu nesil aracı çalıştırmak Tüm diğer veri hareket komut temelde sadece tek kullanımlık olacak özel bir durum ve büyük ihtimalle olacak. Bu durumda, yapabileceğiniz iki şey: kullanabilirsiniz bir ifade karşı db oluşturma/uygulama sürüm, veya silip 1 saat sonra komut dosyaları oluşturmak her anlık paket.

Dağıtım sonrası komut dosyalarını çalıştırmak sonra devre dışı FK kısıtlamaları kontrol edecek ve yeniden etkinleştirmek SSDT onları hatırlamak yardımcı olur. Bu size bir şans doldurmak için yeni olmayan boş alanlar, örneğin (bu arada, senin için Etkinleştir seçeneğini oluşturmak için geçici bir "akıllı" varsayılan için boş olmayan sütunları bu işi yapmak için). Ancak, FK check kısıtlamaları SSDT şema değişikliği nedeniyle yeniden oluşturuyor tablolar için sadece devre dışı bırakılır. Diğer durumlarda, veri hareket komut dosyalarını doğru sırayla çalıştırmak sağlamaktan sorumlu kısıtlamaları şikayetler (veya el ile yeniden etkinleştirmek/komut onları devre dışı bırakmak zorunda) kontrol önlemek için vardır.

DACPAC DACPAC aslında bir anlık çünkü size yardımcı olabilir. Birkaç XML dosyaları şeması (projenin yapı çıktı benzer) açıklayan, ama oluşturduğunuz anda donmuş içerir. Sonra sqlpackage.exe ya da dağıtmak sağlayıcı paket anlık yayımlamak için kullanabilirsiniz. Hiç bir fikrim yok anladım nasıl kullanılır DACPAC sürüm, çünkü daha fazla bağlı "kayıtlı" veri uygulamalar, yani mecburuz bizim kendi sürüm düzeni, ama bizim kendi sürümü bilgi içine DACPAC dosya adı.

Sağlamak için daha kesin ve exhasutive bir örnek olmasını isterdim, ama hala sorunlar burada da çözüyoruz.

Gerçekten SSDT hakkında kötü bir şey DBProj aksine, şu anda genişletilebilir değil. Ancak yaptığı bir çok iyi iş daha DBProj bir sürü farklı şey yapamazsın geçersiz kılma varsayılan davranış, sürece sen-ebilmek bulmak bazı yöntem içinde pre/post komut dolaşmakta bir sorun. Şu an çözmeye çalıştığımız konulardan biri de güncellemeleri (CCDR) için bir tablo yeniden varsayılan yöntemi kayıtları on milyonlarca sahip zaman gerçekten berbat.

-GÜNCELLEME: görmedim bu yazı bir süre, ama görünüşe göre bir süredir aktif son zamanlarda çok düşündüm ekleyin birkaç önemli notlar: kullanıyorsanız VS2012, Haziran 2013 serbest SSDT şimdi bir Veri Karşılaştırma aracı built-in ve aynı zamanda sağlar kullanildigini puan - bunu nasıl söyleyeceğimi bilmiyorum, artık İnşa Katkıda bulunur ve Dağıtım Planı Değiştiriciler için proje.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ben Vivona

    Ben Vivona

    24 Ocak 2010
  • George McCarron

    George McCar

    29 Mayıs 2013
  • mliskIT

    mliskIT

    29 Mart 2012