Bu konu hakkında çok düşündüm ve okudum. Bu, geniş kapsamlı bir yapılandırma kontrolü ve değişim yönetimi stratejisi konusudur. CMMI'nin bu konuda bir alanı var. CMMI 3-5 onayına sahip şirketlerde bile bazen veritabanlarını kontrol etmiyorlar.
Bu soru akılda tutulurken kısıtlamalar izlenerek cevaplanmalıdır .
- Bir kaleci var ve her DDL bu kaleci tarafından yürütülür.
- Diğer Kişiler DDL ifadelerini yürütme yeteneğine sahiptir.
- Yalnızca hangi değişikliklerin yapıldığını kaydetmeniz gerekir, ancak çok büyük farkları karşılaştırmanız gerekmez.
- Veritabanı tasarımınız harici bir araçla yapılır ve daha sonra veritabanına yayınlanır. Bu harici araç, kaynak kontrolünde bile DDL komut dosyaları olabilir. Fakat kilit nokta, kaynak kontrolü sizde, sonra veritabanında yayınlamanızdır.
- Anlık değişiklikleri bilmek zorunda değilsiniz, zaman zaman: yani saatlik, günlük.
- Tanımlanmış bir sunucu yapınız var: Geliştirme, Test, Üretim. Ve iyi bir test stratejisi.
cevap 1
- 1, 4,6 doğruysa, harici bir kaynak kontrolü kullanabilirsiniz. Örneğin
- Embercadero bir veritabanı değişim yönetimi aracına sahiptir ( http://www.embarcadero.com/products/db-change-manager-xe ). Bir veritabanını (Oracle) tersine çevirme ve kaynak kontrolünde kullanma becerisine sahip. Daha sonra herhangi bir sayıda geliştirici, dba bu şemaya ulaşabilir ve üzerinde değişiklik yapabilir.
- Oracle SQL Designer bu yaklaşıma benzer.
- Sizi kaynak kontrolüne (svn, mercurial etc) dönüştürmek için tablo komut dosyaları oluşturmak ve bunları da aynı şeyi sağlamak.
- http://www.liquibase.org yukarıdakilerin otomatik bir yaklaşımıdır.
- DAL (Veri Erişim Katmanı), DDL (Tablo Oluştur) cümleleri üreten kod üretecini yazdım. Onlara kaynak kontrolü koyduk ve orada tutulduk. Liquibase gibi özel çözümlerin daha iyi çalışabileceğini düşünüyorum.
Bu yaklaşım 6 da olsa işe yarar. 6 Aynı zamanda kod olan DDL ifadelerini kaynak kontrolüne koyar ve sürdürürsünüz. Hiç kimse Test ve Üretim Sunucularını gereğinden fazla değiştiremez.
Dezavantajları, herhangi bir nedenden ötürü üretim veya test sunucularında herhangi bir değişiklik yapmanız, hızlı bir hata düzeltmesi, birincil anahtar değişimi vb. Aslında Geliştirme sunucusu sizin ZEMİN GERÇEĞİNİZ olduğundan. Etrafta başka yol değil.
Bu çok geliştirici odaklı bir yaklaşımdır. Ancak, yeni bir modül ilk geliştirdiğinizde oldukça iyi çalışıyor.
Cevap 2
- eğer 1 ve 6 doğruysa:
Cevap 1'e benzer bir yaklaşım, bir geliştirme sunucusunun bakımıdır. Herkes kullanır onu değiştirir. Zaman güncelleme zamanı geldiğinde. Bir veritabanı karşılaştırma aracı kullanıyorsunuz. Bunları script olarak alın, kaynak kontrolüne alın.
- Red Gate Schema Compare supports Oracle
- Embercadero has similar tool
- https://github.com/carbonfive/db-migration
- http://www.sumsoftsolutions.com/svco/ (I have not used this product but I believe it belongs to this category.)
- Rails Active Migration (http://www.oracle.com/technetwork/articles/kern-rails-migrations-100756.html)
Cevap 1 ve Cevap 2 arasındaki fark, cevap 1’de, tüm veritabanı için DDL ifadeleri toplar ve saklarsınız. Cevap 2'de değişimin her versiyonunu kaydetmeniz gerekir.
- başla
- V1
- V2
- V3
- ...
Bir tabloya bir sütun koyarsanız ve daha sonra kaldırmaya karar verirseniz. Senaryolar bunu answer2 de gösterirken, answer1 de sadece son sürümü göreceksin. Ve farklılıkları görmek için V2 ve V1'i karşılaştırmanız gerekir. Şahsen cevap 1'i daha çok seviyorum çünkü Başlat ve V3, V1 ve V3'ü kolayca karşılaştırabilirim. Cevap2'de tüm değişiklikleri aramam gerekiyor. Ayrıca cevap 2 kaynak kontrolünde komut dosyası, büyük bir patlama, karmaşık komut dosyası olma eğilimindedir. Bilgi bulmak zor.
Cevap 3
Eğer 3 doğru ise. Bu durumda sınırlama 6'ya sahip olmadığınızı unutmayın, yani: Geliştirme, Test, Ürün sunucularına sahip değilsiniz. Sadece üretim sunucusu. Hangi değişikliklerin yapıldığını kaydetmek için DDL tetikleyicilerini kullanabilirsiniz. Bu daha çok insanların DDL bağışlarını kötüye kullanmalarını engellemek için kullanılır. Herhangi bir sorun olursa, sorumlu bulabilirsiniz. Bunun çalışması için herkes kendi hesabına bağlanmalı ve Uygulama hesabında DDL hibesi olmamalıdır. Çünkü her geliştirici Uygulama hesabını bilir ve kullanabilir.
Cevap 4
3 ve 5'iniz varsa, bu durumda 6 sınırınız olmadığını, yani: Geliştirme, Test, Ürün sunucularına sahip olmadığınızı unutmayın. Sadece üretim sunucusu. Değişiklikleri saklamak için tetikleyici yerine. Harici bir araç kullanarak değişiklikleri bulun ve DDL komut dosyalarını kaynak kontrolünde saklayın.
Bu aracın değişiklikleri kimin yaptığını kaydetme kabiliyeti varsa, faydalı olacaktır. Bu çözümde aralıklarla yapılan ekstra DDL'yi kaybettiğinize dikkat edin.