SQL Server ile Sürüm Kontrolü


14

Yeni bir projeye başlıyorum ve Sürüm Kontrol Sistemim olarak SVN (Tortoise ile) kullanıyorum. Ben de aynı sistemi kullanarak bir SQL Server veritabanı korumak mümkün olup olmadığını merak ediyordum.

Tablolarımı / fonksiyonları / görünümleri / procs / tetikleyiciler / vb. ama yine de test verisi olacağı için verilerim değil. Bunu nasıl kuracağımdan gerçekten emin değilim. Birkaç seçeneğe rastladım, ancak eksik olduğum herhangi bir şey olup olmadığını ve onunla çalışmama yardımcı olacak bir rehber veya bir şey olup olmadığını bilmek istiyorum.

Red Gate'i gördüm ve duydum, ancak ücretsiz bir şey arıyorum (veya en azından çok düşük maliyet). Her zaman kendim bir şeyler yazabileceğimi biliyorum, ama bunun için gerçekten zaman harcamaya çalışmıyorum.

Karşılaştığım bir şey, ScriptDB4Svn adlı bir araya getirilmiş açık kaynaklı bir paketti . Bunu daha önce kullanan var mı? İyi mi? Yapmam gereken şeyleri yapabilir mi ve kurulum yapmak oldukça basit mi?


1
Has anyone used this before? Is it good? Can it do the things I need it to do and is it pretty simple to get setup?Neden kendiniz denemekten korkuyorsunuz? Sadece yakala ve oyna.
yannis

@YannisRizos - Kesinlikle bundan çok fazla yanıt alamazsam, temelde sadece biraz zaman kazanmak ve kimsenin onunla daha önce çalışıp çalışmadığını ya da herhangi birinin yarasadan test edilip test edilip edilmediğini görmek istedim deneylerimden tasarruf edebilmem için ihtiyaçlarıma uygun.

Burada ne kadar yeni olduğunu fark ettim. Programcılar SE sadece biraz zaman kazanmak için soru sormak için iyi bir yer değil, gerçekten kendiniz için böyle şeyler yapmanızı bekliyoruz, yani sormadan önce kendi araştırmanızı yapın . Ya da alternatif olarak sohbette isteyin (ancak sağlam cevaplar beklemeyin). Bunu söyledikten sonra, gerçekten önemli değil, çünkü bu son cümle sizin asıl sorunuz değil, ki bu aslında çok iyi bir soru (ve düzgün bir şekilde etiketlenmiş, bu yeni kullanıcılar için nadir, kudos!).
yannis

@YannisRizos - teşekkürler. ScriptDB4Svn için geri bildirim alıp alamayacağımı görmek için sohbete atlayacağım ve temel soru için herhangi bir güncelleme olup olmadığını tekrar kontrol edeceğim. Edit: Görünüşe göre 20 temsilcisi oluncaya kadar sohbet edemem. Ah, sanırım sabır.

Yanıtlar:


2

Teknik olarak bir araca bile ihtiyacınız yoktur, nesneleri doğrudan komut dosyası haline getirebilir ve kaynak kontrolüne kontrol edebilirsiniz. Alet olmadan biraz daha fazla iş, ama kesinlikle uygulanabilir.

BTW: RedGate aracını kullandım ve oldukça kaygan ve paraya değer.


Yani temelde Management Studio'da işimi yapardım ve daha sonra komut dosyalarını SVN dizinine dışa aktarırım ve temelde bunu her çalıştığımda (eskilerini her ihracat yerine) yapardım? Sanırım bu işe yarar. Geri dönmek ve bir şeyler yapmak için SVN işlevselliğini koruyacaktı, ama evet, bir tür güçlük olurdu. Belki RedGate fiyatlandırmasını kontrol edip benim için buna değip değmeyeceğine bakarım.

@Scott - Manuel yol çalışabilir, sadece SQL geliştirme hakkında farklı düşünmeniz gerekir. Nesnelerin kodlanmış versiyonları "resmi" olanlardır ve SQL'deki versiyon sadece onun derlenmiş bir versiyonudur. Tıpkı kaynak kodunuz gibi.
JohnFx

Manuel olarak bir şeyler yapmaya karar verdim ve muhtemelen Mike Nakis'in sağladığı bağlantıları kullanarak bir komut dosyası uygulamaya karar verdim, ancak şimdilik sadece yönetim stüdyosu içindeki yerleşik GUI'yi, yaptığım zaman DB oluşturma komut dosyalarını vermek için kullanacağım bunları kontrol edin ve SVN'nin bu şekilde sürümlerini saklamasına izin verin. Ben el şeyler yapmaya karar beri ben gerçekten bu şeyleri :) yapmak için bir araç gerekmez gitti, sen işaret için cevap almak

1

Çoğunlukla Microsoft kurulumuna sahip olduğunuz anlaşılıyor. Sen içine bir göz olabilir Veritabanı Projeleri (daha önce DataDude olarak bilinir). Temel olarak T-SQL'i Visual Studio'da birinci sınıf bir dile çevirirler; yapabilirsin:

  • Projeleri derleyin - yalnızca son bir komut dosyası oluşturmaz, nesne adlarının vb. Var olmasını sağlar.
  • Statik kod analizi yapın - örneğin, [dbo]% 30 performans artışı için nesnelere şemalarını ekleyerek (örneğin çoğu durumda) her zaman başvurduğunuzdan emin olun .
  • Projenin farklı sürümlerini karşılaştırmasını sağlayarak diff komut dosyaları oluşturun.
  • Projenizi bir veritabanı veya komut dosyasından güncelleyin (ters mühendislik).
  • İyileştirmek.
  • Diyagramlama araçları yok.

Kodunuzu ve veritabanı kodunuzu da kaynak kontrolü altında birleştiriyorlar. Eğer varsa adam-up güzel - ve komut veritabanı nesneleri (yerine SSMS Davinci Araçlar kullanmanın) ayrıca bir IDE kullanarak kadar kara.


0

Rayları kullanabilirsiniz. Rails, uygulayabileceğiniz veya geri alabileceğiniz bir veritabanı geçişi kavramına sahiptir. Benim durumumda bu bir veritabanı sürüm için en iyi yoldur. Bu geçiş dosyalarını SVN olarak kontrol edersiniz.

Mevcut projemde, uygulamayı Ruby'de geliştirmiyoruz, ancak yine de veritabanını yönetmek için Rails'i kullanıyoruz. Başka türlü yapmam.


Bunu biraz daha açıklamak ve böyle bir şey ayarlamak için herhangi bir kılavuz var mı?

Aslında, Rails'i .NET teknolojileriyle birlikte kullanmak çok iyi bir fikir değil.
alternatif

Rayların taşınması hakkında Bölüm ( guides.rubyonrails.org/migrations.html ). Bu, başlamanıza ve bunun neden iyi bir fikir olduğuna dair ihtiyacınız olan tüm arka planı vermeniz için yeterli olmalıdır. @altern - veritabanını işlemek ve versiyonlamak için sadece Rails kullandığınızdan, bunun ve .NET teknolojileri üzerinde herhangi bir etkisi olmalıdır. DB'ye, ray kullanmıyormuş gibi erişebilir ve kullanabilirsiniz. Endişelerinize bazı atıflar görmekten sakıncası olmaz. IronRuby, Ruby ve Rails'in bir .Net uygulaması değil mi?
Vinnie

> IronRuby, Ruby ve Rails'in .Net uygulaması değil mi? IronRuby, Ruby'nin .NET uygulamasıdır . Rails'in IronRuby üzerinde düzgün çalıştığından emin değilim. Rails'i db versiyonlaması için kullanmaya karşı genel argümanım Ruby ve ilgili teknolojilerin (RoR, migratinos) özellikle db versiyonlaması gibi basit bir görev için oldukça dik öğrenme eğrisine sahip olmasıdır. Sadece göçler için değil, başka amaçlar için kullanmakta fayda var. Aksi takdirde, çok olumlu bir etki yaratmadan projenin karmaşıklığını artıracaktır.
alternatif

0

Bu daha önce stackoverflow üzerinde tartışıldı: /programming/2750278/sql-server-2008-create-database-script-schema-data-with-command-line

Ayrıca bu dış makale, Windows Uygulaması biçimindeki örnek kodla birlikte http://www.sqlteam.com/article/scripting-database-objects-using-smo-updated bazı ek bilgiler sağlar .

Yapmak istediğiniz şey, MS Access için kendim tarafından yaptığım bir şey olduğundan, size bazı fikirler vermesi durumunda ne yaptığımı anlatacağım: AD2'nin şemasını ve verilerini dönüştüren Ado2Xml adlı bir modül yazdım - xml ve geri erişilebilen veritabanı. Sadece tablolar ve görünümler hakkında olsa da bilir; saklı yordam yok, tetikleyici yok, hiçbir şey yok. Her neyse, sizin durumunuzda bu modülün yerini muhtemelen MS-SQL ile ne istediğinizi bulacağınız bir araç alır. Uygulamam her başlatıldığında, veritabanının zaman damgasını kaydedilen xml dosyasının zaman damgasıyla karşılaştırır; xml dosyası daha yeniyse, veritabanını yok eder ve x2 dosyasından yeniden oluşturmak için Ado2Xml'i çağırır. Uygulamam sona erdiğinde, bunun tersini yapar: Ado2Xml'i veritabanını xml dosyasına vermek üzere çağırır. Aslında, veritabanı şemasını ayıklayan ADO nesneleri nedense çok yavaştır ve dışa aktarma işleminin biraz zaman almasına neden olur. Bu nedenle, uygulamamın her seferinde sonlandırılmasını ve görsel stüdyonun hata ayıklama düzeninden düzenleme düzenine geçmesini beklemek zorunda kalmamak için, uygulamam sona erdirilmeden hemen önce uygulamamı dışa aktarmak için harici bir uygulama başlatır, böylece sonlandırılabilir hemen.


Sağladığınız iki bağlantı, muhtemelen kendim kurulum yapmakla ilgilendiğim bir şey, bu yüzden şu anda yaptığım manuel adımları otomatik olarak yapabilirim. Onlar için teşekkürler!

0

Evet, önceki bir projede benzer bir araç (şirket içi geliştirdim) kullandım. Tüm tabloları, görünümleri, sprocs'ları, tetikleyicileri, vb. Ayrı ayrı .sql dosyalarına kodlar. Sonra, "geliştirme" veritabanımızdaki her şeyin kaynak kontrolüne yansıtıldığını "doğrulamak" için her gece çalışan bir senaryomuz vardı.

Normal iş akışı, kodunuzu değiştirmeniz, geliştirme veritabanındaki karşılık gelen tabloları ve sprocs'ları gerektiği gibi değiştirmeniz, daha sonra komut dosyasında bulunan tüm .sql dosyalarını yenileyecek olan aracı çalıştırmanızdır. Daha sonra her şeyi bir kerede teslim edersiniz.

Sorun, aracı çalıştırmayı unuttuysanız, veritabanı "doğru" olduğu için kod "çalışacak" (ve birim testleri geçecek), ancak yeni sprocs / tables kaynak kontrolü olmayacaktı.

Bu yüzden her gece, kaynak kodunu kontrol eden bir senaryomuz var, daha sonra tüm komut dosyalarını yenilemek için aracı kullanıyoruz. Herhangi bir fark varsa, birisi değişikliklerini kontrol etmeyi unuttuğu ve bir e-posta bildirimi oluşturulduğu anlamına gelir. Temel olarak, kaynak kontrolünü güncel tutmayı unutmadığımızdan emin olmanın bir yoluydu.

Biraz can sıkıcıydı çünkü birkaç güne yayılan değişiklikler üzerinde çalışmayı zorlaştırdı, ancak hiçbir şeye sahip olmaktan daha iyiydi ...


Üzerinde durulabilir misin Then, we had a script that ran every night to "validate" that everything in our "development" database was reflected in source control.? Yanıtınız için teşekkürler.

@Scott: Cevabı biraz daha detay içerecek şekilde düzenledim.
Dean Harding
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.