Yeniden Koşu Veritabanı Geliştirme Scripts

oy
2

Mevcut veritabanı geliştirme atıkların çevre biz inşa Süreçlere veritabanı komut dosyaları oluşturmak ve çeşitli gelişim / qa veritabanlarına bunları uygulamak svn dışında tüm sql kodunu kontrol otomatik var.

Bu, tüm iyi ve güzel ve biz geçmişte ne yaptığını üzerinde tremdous gelişme olmakla birlikte, biz rerunning komut ile ilgili bir sorun var. Eğer olumsuz yönde sistemini etkilemeden defalarca onları çalıştırmak çünkü Açıkçası bu, değiştirme prosedürleri gibi bazı komut ile ilgili bir sorun değildir. Şu anda meta verileri eklemek ve biz kontrol etmek ve nesneler olup olmadığını görmek için kodu ekleyin değiştirmek oluşturmak / masa ekstreler gibi ifadeleri çalıştırın ve onlar yoksa, onları tüketmemek için.

Bizim sorunumuz, gerçekten sadece komut çalıştırıldıktan sonra, nesneler ortamında oldukları için, komut dosyasını çalıştırmak için tek bir şansım var ve sistem tekrar komut çalışmaz olmasıdır. şey dağıtımın işlemi tamamlandıktan sonra değiştirmek gerekiyorsa, biz diyelim, güncelleme komut agaist güncelleme komut dosyalarını çalıştıran ve her şeyi doğru sırayla düşer ve PK üzerindeki tüm veritabanları (ortamları arasında hizaya umuduyla zor bir süreç var ,) özel.

(Son en güncel salıverilmesini) veritabanını bırakarak ve sürecin en baştan başlamak Kısa, herkes buna daha şık bir çözüm var mı?

Oluştur 08/09/2008 saat 11:34
kullanıcı
Diğer dillerde...                            


6 cevaplar

oy
2

Ben en iyi özel ortamda sorunu yaklaşım nasıl emin değilim, ama ben başlamak için bazı ilham özelliği Rail göçler üzerinde okuma öneririm.

http://wiki.rubyonrails.org/rails/pages/UnderstandingMigrations

Cevap 08/09/2008 saat 11:38
kaynak kullanıcı

oy
1

Eğer veritabanında mevcut verilerinizi tutuyor musunuz? Değilse, Matt NET denilen için belirtilen ne benzer bir şeye bakmak isteyebilirsiniz RikMigrations

http://www.rikware.com/RikMigrations.html

revizyonlar takip ederken, anında benim veritabanını güncellemek için benim projelerde kullanırsın. Ayrıca, vb farklı sunucular, veritabanı şemasını taşımak için çok basit hale getirir

Cevap 08/09/2008 saat 11:45
kaynak kullanıcı

oy
0

Eğer komut yeniden binderlerimiz yapmak istiyorsanız tanımları ... ne bu demek değişikliğin komut odaklanmak yerine burada benim Tablo script gerektiğini olduğu gibi, o zaman onlara sahip olamaz.

Diyelim ki bir tablo Müşteriler var diyelim:

create table Customers (
   id int identity(1,1) primary key,
   first_name varchar(255) not null,
   last_name varchar(255) not null
)

ve daha sonra bir durum sütununu eklemek istiyorum. Orijinal tablo komut değişiklik yapmayın, o biri zaten tükendi (ve yine koşarken neden hataları önlemek için (! varsa) sözdizimi olabilir).

Bunun yerine, yeni bir senaryo olarak adlandırılan add_customer_status.sql var

Bu komut bir şey gibi olur:

alter table Customers
add column status varchar(50) null

update Customers set status = 'Silver' where status is null

alter table Customers
alter column status varchar(50) not null

(! Mevcutsa) eğer Yine yeniden çalışmasını sağlamak üzere bir ile blok sar, ama burada biz bu değişikliği komut olduğu düşüncesini kaldıraçlı ettik ve buna göre veritabanı uyarlar. veri müşteriler tablosunda zaten var ise o zaman biz sütun ekleyin beri, o zaman boş kısıtlama ekleme, verilerle tohum, hala iyiler.

Yukarıda belirtilen göç çerçeveler Hem ben de mükemmel bir deneyim yaşadım, iyi MigratorDotNet .

Cevap 08/09/2008 saat 13:45
kaynak kullanıcı

oy
0

Scott diğer bir çift adında bir SQL araçları değişim yönetimi sorunu çözmek. Ama yine de kendi haddeleme ediyorum.

Ben ikinci bu soru ister ve hala bu sorun için hiç boş, toplum temelli bir araç olduğunu benim şaşkınlıkla eklersiniz. Açıkçası, komut dosyaları bir veritabanı şemasını korumak için tatmin edici bir yol değildir; ne örnekleridir. Peki, neden (platform-neutral ve biz de yaparken) biçiminde bir ayrı Meta verileri tutmuyorum?

Yani ben şimdi yapıyorum. Ustam veritabanı şeması basit web hizmetinden başlangıçta oluşturulan bir sürüm kontrollü bir XML dosyasıdır. Basit bir JavaScript programı buna karşı örnekleri karşılaştırır ve basit bir XSL getirili veya alter ifadeleri dönüşümü. Bu gibi sınırları vardır RikMigrations ; Örneğin, her zaman doğru bir şekilde arası depdendent nesneler sırası değildir. - (ne yok Ama ne olduğunu tahmin Microsoft'un SQL Server Veritabanı Yayın aracı Gerçekten, çok basit.). Ben sadece kullanmıyordum nesneleri (roller, kullanıcıları, vs.) içermiyordu.

Yani, bence bu sorun gerçekten yetersiz ele olduğunu ve er ya da geç biraraya gelip şeytani ayrıntıları mücadele gerekecek olmasıdır.

Cevap 08/09/2008 saat 14:23
kaynak kullanıcı

oy
2

Bu adres - ya buna benzer sorun en azından - aşağıdaki gibi:

  1. Bu, aynı zamanda sürüm numarası, bulunduğu haliyle ortaya çıktı zaman için bir tarih / zaman damgası gibi sıkıcı şeyler taşıyan sürümü başına bir satır olan bir tabloya ile temsil edilir - şema sürüm numarası vardır.
  2. sahip olarak şema / oluşturmak bizim için değişiklik yapar kod sarılmış DDL değiştirin.

inşa sürecinin bir parçası olarak şema değişikliği kodunu kuracağına birinde yukarıdaki bağlamda sonra çalıştırın ve sadece zaten uygulanmış değil şema değişiklikleri uygulamak olacaktır.

(Temsilcisi olarak değil bağlı olduğu) Deneyimlerimize göre şema değişiklikleri güvenle biz geri alma almak ve başarısız olursa db "güvenli" anlamına gelen bir işlemde çalıştırılabilir kadar hızlı / yeterince küçüktür çoğu durumda - hep uygulanabilir ise şema güncelleştirmeleri uygulamadan önce yedeklerini alarak öneriyoruz rağmen.

Ben kötü acı deneyimden bu gelişti. Onun değil mükemmel sistemi (veya orijinal bir fikir) ama biz güven yüksek derecede sahip bu şekilde çalışma sonucunda bizim veritabanlarından birine iki örneği aynı sürümüyle varsa o zaman bu iki veritabanları için şema olacak o neredeyse her bakımdan aynı olması ve güvenle kötü sonuçlarla bu uygulama için geçerli şemaya herhangi db kadar getirebildiği. (Bu son maalesef% 100 doğru değildir - bir istisna her zaman vardır - ama değil gerçekten çok da uzak!)

Cevap 08/09/2008 saat 14:56
kaynak kullanıcı

oy
0

Biz 'damla ve şema yeniden' gitti rota. Biz komut kodu çalıştırırken geliştirici için şemada tüm nesneleri oluşturmak için parametreli bizim JUnit test paketindeki bazı sınıfları vardı. Bu, tüm geliştiriciler bir test veritabanı paylaşmak ve herkes aynı anda / / test oluşturmak çatışmalar olmadan testi tabloları düşebilir izin verdi.

o çalıştırmak için uzun zaman aldı mı? Evet. İlk başta her test için oluşturulan tablolar düştü demek bu kurulum yöntemini / kullanılan ve bu şekilde çok uzun sürdü. Sonra bir sınıf için tüm testlerde önce bir kez çalıştırmak ve sonra tüm sınıf testleri tamamlandıktan geldiğimizde temizlenmiş olabilir bir Testsuite yarattı. Bu hala hepimizin paketlerinde tüm testleri dahil bizim 'alltests' sınıfı çalıştırdığınızda db kurulumu defalarca koştu anlamına geliyordu. Bunun ilk test bu yapacağını daha sonra hiçbir çağrı sadece sayacını artırmak olacağını kurulum olmaya veritabanını talep yüzden zaman OracleTestSuite koduna bir semafor katıyordu çözüldü nasıl. Her tearDown () yöntemi çağrıldı gibi, 0 ulaşana kadar sayaç sayaç azaltma olacağını ve OracleTestSuite kod herşeyi düşeceği. Bu yapraklar bir konu testleri veritabanı boş olduğunu varsayalım olup olmadığıdır. Veritabanı testleri onlar DB kurulum tekrarını azaltabilir çünkü onlar veritabanının devletin yararlanabilmek için çalışacak sırayı bildirmek için elverişli olabilir.

Bu test amacıyla karmaşık alan nesneleri oluşturmak benzer bir sorunu çözmek için ObjectMothers kavramı kullanılır. Sahte nesneler daha iyi bir cevap olabilir ama biz zaman onlar hakkında duymamıştım. Bu kadar zaman sonra, ben tipik senaryolar için standartlaştırılmış veri setlerini oluşturabilir Test yardımcı calışmalarımız öneriyoruz. Artı bir veri perspektifinden belgeyi önemli sınır durumları yardımcı olacaktır.

Cevap 08/07/2009 saat 17:56
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more