izleme DB şema değişiklikleri için mekanizmalar

oy
128

izleme ve / veya DB şema değişiklikleri otomatik en iyi yöntemler nelerdir? Ekibimiz sürüm kontrolü için Subversion kullanır ve biz (iterek bir üretim sunucusuna test kodu dağıtma Bir hazırlama sunucusuna kurar) bizim görevlerden bazıları bu şekilde otomatik hale ama biz yine de el veritabanı güncellemelerini yapıyoruz ettik. Ben bulmak veya devam eden kod ve DB güncellemeler çeşitli sunuculara itip edildiği bir arka uç olarak Subversion kullanmak için ise bizi farklı ortamlara sahip sunucular arasında verimli çalışmasını sağlayan bir çözüm oluşturmak istiyoruz.

Birçok popüler yazılım paketi DB sürümünü algılar ve gerekli değişiklikleri uygulamak otomatik güncelleme komut dosyalarını içerir. Bu bile (çoklu projeler ve bazen birden ortamlar ve dillerde) daha büyük ölçekli bunu yapmanın en iyi yolu mu? Eğer öyleyse, mevcut herhangi bir kod sürecini kolaylaştırır ya da iyi sadece kendi çözümünü rulo olduğunu orada var mı? Herkes önce benzer bir şey hayata ve Subversion içine entegre kanca post-commit veya bu kötü bir fikir Has?

Birden platformlarını destekleyen bir çözüm tercih olacağını da, biz kesinlikle çalışmalarımız çoğunluğu bu platformda olduğu gibi Linux / Apache / MySQL / PHP yığını desteklemesi gerekir.

Oluştur 04/08/2008 saat 22:31
kaynak kullanıcı
Diğer dillerde...                            


20 cevaplar

oy
54

Raylar dünyada, daha doğrusu SQL veritabanına özgü lezzet daha Ruby yapılır veritabanına değiştirir komut hangi göçler, kavramı var. Kişisel Yakut göç kodu mevcut veritabanına DDL özgü çevrilerek biter; Bu veritabanı platformları çok kolay geçiş yapar.

Eğer veritabanına yaptığımız her değişiklik için, yeni bir göç yazın. değişiklikler uygulandığı bir "yukarı" yöntemi ve değişiklikler geri olduğu bir "aşağı" yöntemi: Taşıma, tipik olarak iki yöntem vardır. Tek bir komut güncel veri tabanını getirir ve aynı zamanda şemanın spesifik bir sürümüne veritabanını getirmek için kullanılabilir. Raylar olarak, göçler proje dizininde kendi dizininde tutulur ve sadece herhangi bir diğer proje kodu gibi sürüm kontrolü kontrol olsun.

Raylar göçler Bu Oracle kılavuzu oldukça iyi göçler kapsar.

Diğer dilleri kullanan geliştiriciler göçler baktım ve kendi dile özgü versiyonlarını hayata geçirdik. Bildiğim Ruckusing , Rails'in göçler sonra modellenmiştir bir PHP göçler sistemde; o aradığınız şey olabilir.

Cevap 04/08/2008 saat 23:45
kaynak kullanıcı

oy
48

Biz 5 farklı kurulumlar (üretim, evreleme ve birkaç gelişme kurulumları) arasında senkronize eden veritabanı schemata tutmaya bcwoord benzer bir şey kullanın ve sürüm kontrolü yedeklenmiş ve oldukça iyi çalışıyor. Ben biraz ayrıntılı edeceğiz:


Veritabanı yapısını senkronize etmek için, bir tek komut, update.php ve dosyalar sayılı komut geçerli sürüm numarasını saklamak için fazladan bir tablosu kullanır vb 1.SQL, 2.sql, 3.sql, bir dizi var veri tabanı. N.sql dosyaları (N-1) veritabanının versiyonu N sürümden gitmek, elle hazırlanmış bulunmaktadır.

Daha sonra, sütun bırakın böyle bir kullanıcı tipleri, vb Temelde,, her şeyi yapabilir olarak ve uygun verilerle "ana" veri satırlarını eklemek yeni bir sütun biçimine eski verileri, tablo eklemek sütunlar ekleyin göç için kullanılabilir göç komut veri kaybedebilirsiniz asla.

Güncelleştirme komut dosyası aşağıdaki gibi çalışır:

  • veritabanına bağlanın.
  • Geçerli veritabanında (malzeme nedeniyle bir yedeğini alın edecek yanlış) [Mysqldump].
  • o yoksa defter tutma tablosunu (denilen _meta) oluşturun.
  • _meta tablosundan mevcut VERSION okuyun. Bulunan Yoksa 0 varsayalım.
  • Tüm .sql dosyalar için sırayla çalıştırmak, VERSİYONU daha yüksek numaralı
  • dosyalardan biri bir hata oluşturdu edin: yedekleme geri almak
  • Aksi takdirde, idam yüksek .sql dosyasına defter tutma tablosundaki sürümünü güncellemek.

Her şey Kaynak denetime gider ve her montaj (doğru veritabanı parolası vb ile update.php çağırarak) tek bir komut dosyası ile son sürüme güncellemek için bir komut dosyası vardır. Biz bir kod güncelleme gerekli veritabanı güncellemeleri ile birlikte gelir, böylece otomatik olarak, veritabanı güncelleme komut çağıran bir komut dosyası aracılığıyla güncelleme evreleme ve üretim ortamları svn.

Biz de sıfırdan tüm veritabanını yeniden oluşturmak için aynı komut dosyasını kullanabilirsiniz; Biz sadece o zaman tamamen veritabanını yeniden oluşturulacaktır olacak komut dosyasını çalıştırın, açılan ve veritabanı yeniden. Ayrıca otomatikleştirilmiş test için boş bir veritabanı doldurmak için komut dosyasını kullanabilirsiniz.


O kavramsal basit ve herkes sürümü numaralandırma düzeni alır ve değişiklikleri yürütmek elle iletişim veya gerek kalmadan, ileriye taşımak yeteneğine sahip ve veritabanı tasarımını gelişen çok değerli olmuştur bu sistemi kurmak için sadece birkaç saat sürdü tüm veritabanları üzerinde.

Gerçi phpMyAdmin sorguları yapıştırırken dikkat! Bu oluşmaya sorguları genellikle sizin komut kıracak çünkü kesinlikle istemiyoruz veritabanı adını içerir! Bir şey gibi TABLO OLUŞTURMA mydb. newtableSistem üzerinde veritabanı mydb denilen değilse (...) başarısız olur. Biz içeren dosyaları .sql izin vermez bir ön açıklama SVN kanca oluşturulan mydbbir işaretidir dize, doğru kontrol olmadan phpMyAdmin yapıştırılan birisi kopyalama /.

Cevap 22/08/2008 saat 15:44
kaynak kullanıcı

oy
11

Ekibim tüm veritabanı değişiklikleri dışarı komut ve uygulamanın her sürümü ile birlikte SVN için bu komut dosyalarını kaydeder. Bu, herhangi bir veri kaybetmeden, veritabanının artan değişikliklere izin verir.

Bir sürümden diğerine gitmek için, sadece değişim komut setini çalıştırmak gerekir ve veritabanı yukarı güncel olduğunu ve hala tüm veri var. Bu kolay yöntem olmayabilir, ama kesinlikle etkilidir.

Cevap 05/08/2008 saat 20:56
kaynak kullanıcı

oy
9

Eğer hala çözümler arıyoruz: Biz neXtep tasarımcı adında bir araç öneriyorlar. Bu sürüm kontrol altında tüm veritabanını koymak hangi bir veritabanı geliştirme ortamıdır. Her değişiklik izlenebilir bir versiyon kontrollü depo üzerinde çalışırlar.

Bir güncelleme yayınlayacak gerektiğinde, size bileşenleri işleyebilir ve ürün otomatik olarak önceki sürümden SQL yükseltme komut üretecektir. Tabii ki, herhangi 2 sürümlerinden bu SQL oluşturabilir.

Sonra birçok seçenek var: Eğer bu komut almak ve bu verileri mevcut mekanizması tarafından dağıtılan olacak şekilde uygulama koduyla SVN'de onları koyabilirsiniz. komut (SQL komut + XML açıklayıcısı) bir "teslim paketi" diye bir şeyin ihraç edilir ve bir yükleyici bu paketi anlamak ve strcutural tutarlılık sağlarken, bir hedef sunucuya bağımlılığı dağıtabilir: Başka bir seçenek neXtep teslim mekanizmasını kullanmaktır kontrol, yüklü sürümünü kaydederek, vb

Ürün GPL ve Linux, Mac ve pencerelerin üzerinde çalışan yüzden Eclipse dayanmaktadır. Aynı zamanda şu anda Oracle, MySQL ve PostgreSQL (DB2 destek yolda) destekler. : Daha detaylı bilgi bulacaksınız wiki göz at http://www.nextep-softwares.com/wiki

Cevap 25/10/2010 saat 06:46
kaynak kullanıcı

oy
9

Buradaki sorun gerçekten Kaynak denetime kendi yerel değişiklikler ekibi ile paylaşmak için komut geliştiriciler için kolay yapıyor. Yıllardır bu sorunla karşı karşıya ettik ve Veritabanı uzmanları için Visual Studio işlevselliğine esinlenmiş. Aynı özelliklere sahip bir açık kaynak aracı istiyorsanız, şunu deneyin: http://dbsourcetools.codeplex.com/ Eğlenin, - Nathan.

Cevap 07/07/2009 saat 14:26
kaynak kullanıcı

oy
6

Scott Ambler makalelerin büyük bir dizi üretir (ve bir birlikte kaleme kitabı ) aslında senin şema sürdürmeye TDD ilke ve uygulamalarını uygulamalıdır düşüncesiyle, veritabanı üstlenmeden üzerinde. Sen veritabanı için yapı ve tohum veri birimi bir dizi test kurdu. Sonra, bir şey değiştirmeden önce, bu değişikliği yansıtmak için testler yazma / değiştirme.

Bir süredir bunu yapıyor ve o iş gibi görünüyor. Biz bir birim test paketi temel sütun adı ve veri türü kontrolleri oluşturmak için kod yazdı. Biz uygulama aslında çalışıyorsa db SVN kasada veritabanı canlı eşleştiğini doğrulamak için bu testler her zaman tekrar çalıştırabilirsiniz.

Sonradan anlaşıldı ki, geliştiriciler bazen SVN'de şema dosyasını güncellemek için kendi sanal veritabanı ve ihmal çimdik. Kod, daha sonra hata O tür aşağı pin çıldırtırcasına zor olabilir. teslim edilmemiş bir db değişikliği bağlıdır, ancak test paketi hemen gelip alacak. Eğer daha büyük Sürekli Entegrasyon planına dahil ettiğimiz bu özellikle güzel.

Cevap 29/08/2008 saat 05:51
kaynak kullanıcı

oy
6

bir dosya halinde şema dökümü ve kaynak denetimi ekleyin. Sonra basit bir fark ne değiştirdi size gösterecektir.

Cevap 06/08/2008 saat 17:59
kaynak kullanıcı

oy
5

K. Scott Allen burada diğer cevaplar başvurulan artan güncelleme komut / göçler kavramını kullanır şema sürüm üzerinde iyi bir makale veya iki sahiptir; bkz http://odetocode.com/Blogs/scott/archive/2008/01/31/11710.aspx .

Cevap 29/08/2008 saat 06:11
kaynak kullanıcı

oy
5

C # kullanıyorsanız, ses altı, çok yararlı bir ORM aracı bir göz, aynı zamanda düzeni ve \ veya verileri yeniden sql komut dosyası oluşturur edilir. Bu komut dosyaları daha sonra kaynak denetimi içine konabilir.

http://subsonicproject.com/

Cevap 04/08/2008 saat 23:47
kaynak kullanıcı

oy
5

Bu tür düşük teknolojili, ve orada daha iyi bir çözüm olabilir, ama sadece veritabanı oluşturmak için çalıştırılabilir bir SQL komut şema depolayabilir. Sana bu senaryoyu oluşturmak için bir komut yürütebilirsiniz düşünüyorum, ama ne yazık ki komutunu bilmiyorum.

Sonra, üzerinde çalıştığı kodu ile birlikte Kaynak denetime senaryoyu işlemek. Eğer kodu ile birlikte şemasını değiştirmek gerektiğinde, senaryo değişmiş şema gerektirir kodu ile birlikte kontrol edilebilir. Sonra senaryo üzerinde diffs şema değişiklikleri diffs gösterecektir.

Bu komut ile, DBUnit veya yapı komut çeşit ile entegre olabilir, yüzden sizin zaten otomatik işlemler ile uygun olabilir gibi görünüyor.

Cevap 04/08/2008 saat 23:28
kaynak kullanıcı

oy
4

Birkaç projeler için Visual Studio aşağıdaki veritabanı projesi yapısını kullandım ve oldukça işe yaramış:

Veritabanı

Değişim Komut

0.PreDeploy.sql

1.SchemaChanges.sql

2.DataChanges.sql

3.Permissions.sql

Komut oluşturma

SPROCs

Fonksiyonlar

Görünümler

Bizim yapı sistemi daha sonra aşağıdaki sıraya göre komut dosyalarını yürüterek sonraki bir sürümden veritabanını günceller:

1.PreDeploy.sql

2.SchemaChanges.sql

Komut dosyaları klasör oluşturma İçeriği

2.DataChanges.sql

3.Permissions.sql

Her dosyanın sonuna üzerine kodlarını ekleyerek belirli bir hata / özellik için onların değişikliklerin her geliştirici denetler. Bir ana sürüm tam ve kaynak denetiminde kollara sonra, değiştirme komut dosyaları klasöründe .sql dosyaların içeriği silinir.

Cevap 08/08/2008 saat 19:31
kaynak kullanıcı

oy
4

Biz çok basit ama henüz etkili bir çözüm kullanın.

yeni yükler için, biz veritabanını oluşturmak için bu dosyayı kullanmak inşa sürecinde, daha sonra tüm DB şema tutan Depodaki bir metadata.sql dosya var.

güncellemeler için, kodlanmış yazılımda güncelleme ekleyin. Biz kodlanmış gerçekten bir sorun IS ve bu tür şeyler şu ana kadar bir sorun olarak kanıtlamak yoktu önce çözme sorunları sevmiyorum çünkü tutun.

Yani bizim yazılımda böyle bir şey var:

RegisterUpgrade(1, 'ALTER TABLE XX ADD XY CHAR(1) NOT NULL;');

Veritabanı (otomatik olarak oluşturulan bir tablo saklanır) sürüm 1'de ise bu kod, modası geçmiş, sonra komut yürütülür, kontrol edecektir.

depoda metadata.sql güncellemek için, bu yerel olarak yükseltir ve daha sonra tam veritabanı meta ayıklamak çalıştırın.

sık sık her olur tek şey, metadata.sql İşleyen, unutmak, ama onun kolay inşa sürecine test etmek ve aynı zamanda olabilirdi tek şey yeni bir ile yüklemek yapmaktır çünkü bu büyük bir sorun değil eski bir veritabanı ve ilk kullanımda onu yükseltti.

Ayrıca not indirimlerini desteklemez, ama bir şey bir güncelleme üzerinde kırılırsa o, tasarım gereğidir, biz önceki sürümü restore edilerek tekrar denemeden önce güncelleştirme düzeltin.

Cevap 08/08/2008 saat 19:21
kaynak kullanıcı

oy
3

Ben yapı sürümleri adını klasörler oluşturmak ve yükseltme ve orada komut dosyalarını eski sürüme koydu. Örneğin, aşağıdaki klasörleri olabilir: 1.0.0, 1.0.1 ve 1.0.2. Her biri yükseltmek veya sürümleri arasında veritabanı eski sürüme olanak komut dosyası içerir.

Bir istemci veya müşteri sürümü 1.0.1 ile sorun size arasak mı ve bir sorun olmayacak geri onun sürümüne veritabanını getirerek, 1.0.2 kullanıyor.

Veritabanınıza olarak, veritabanının geçerli sürümünde koymak "şema" adında bir tablo oluşturmak. Sonra kolaydır için yükseltme veya veritabanı eski sürüme bir program yazma.

Joey dediği gibi bir Raylar dünyada ise, Göçler kullanın. :)

Cevap 05/08/2008 saat 05:36
kaynak kullanıcı

oy
2

db dağıtmaya deneyin - ağırlıklı bir Java aracı değil, aynı zamanda php ile çalışır.

Cevap 19/01/2012 saat 02:52
kaynak kullanıcı

oy
2

Ben nasıl bir yol gibi Yii veritabanı göçler işler. Bir göç temelde uygulayan bir PHP script CDbMigration. CDbMigrationBir tanımlar upgöç mantığını içeren bir yöntem. Uygulanması da mümkündür downgöç ters desteklemek için bir yöntem. Alternatif olarak, safeUpya da safeDowngöç, bir işlem bağlamında yapılır emin olmak için kullanılabilir.

Yii komut satırı aracı yiicoluşturmak ve göçler yürütmek için destek içerir. Taşıma tek tek veya toplu olarak, ya da uygulanabilir ya da tersine çevrilebilir. Uygulayan bir PHP sınıfı için kodda bir geçiş sonuçlarını oluşturma CDbMigrationbenzersiz bir zaman damgası ve kullanıcı tarafından belirtilen bir göç adına göre adlandırılır. Daha önce veritabanına uygulanmış olan tüm göçler bir göç tablosunda saklanır.

Daha fazla bilgi için bkz: Veritabanı Göç manuel makale.

Cevap 25/06/2011 saat 14:18
kaynak kullanıcı

oy
2

IMHO göçler büyük bir sorun var mı:

İnce başka işler bir sürümden yükseltme, ancak tablolar yüzlerce ve değişikliklerin uzun bir geçmişe (bizim gibi) varsa taze sonsuza alabilir verilen bir versiyonun yüklemek yapıyor.

(Müşteriler veritabanları yüzlerce) geçerli sürüme bazal bu yana oluşan deltalar bütün tarihini Running çok uzun zaman alabilir.

Cevap 12/03/2011 saat 15:15
kaynak kullanıcı

oy
2

MySQL için Toad bu size 2 veritabanları senkronize etmenizi sağlar karşılaştırmak şema olarak adlandırılan bir işlevi vardır. Bu şimdiye kadar kullanılan en iyi araçtır.

Cevap 05/02/2011 saat 12:08
kaynak kullanıcı

oy
2

Ben kaynak deposunda için (pratikte jdbc aracılığıyla orada herhangi db konuşabilir beri) ve Subversion "betik" tarafı için Ant (çapraz platform) kullanarak öneriyoruz. Ant değişiklik yapmadan önce, yerel dosyalara senin db "yedeklemek" sizi alow. Varolan db şema Ant 3 yoluyla Subversion deposuna Ant 2. versiyonu kumandayla dosyaya 1. yedek Ant aracılığıyla db yeni sql ifadeleri göndermek

Cevap 17/09/2008 saat 17:54
kaynak kullanıcı

oy
2

Mevcut PHP proje için biz raylar göçler fikrini kullanmak ve biz dosyaları XX göç sayısıdır başlığı "migration_XX.sql" tutmak olduğu bir göçler dizin var. Şu anda bu dosyalar güncellemeler yapılır ancak onların yaratma kolayca modifiye edilebilir olarak elle oluşturulur.

Sonra biz öncesi alfa olduğu gibi, şu anda XX geçerli taşıma sürümüne göre daha büyük olan yeni migration_XX.sql dosyası olup olmadığını her sayfa yüklemesinden ve çekler üzerinde çalışan, "Migration_watcher" adlı bir senaryo var. Eğer öyleyse bu veritabanı ve voila karşı büyük sayıya kadar olan tüm migration_XX.sql dosyaları çalıştırır! şema değişiklikleri otomatik.

Eğer verdiği bir sürü gerektirecektir sistemini dönmek yeteneğini gerektirir, ancak çok basit ve bugüne kadar bizim oldukça küçük takım için çok iyi çalışıyor olmuşsa.

Cevap 23/08/2008 saat 13:58
kaynak kullanıcı

oy
0

Bir komut satırı yoktur mysql-diff şema diskte canlı veritabanı veya SQL komut olabilir veritabanı şemaları, karşılaştırır aracı. Çoğu şema göç görevler için iyidir.

Cevap 04/11/2009 saat 20:43
kaynak kullanıcı

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