Oracle veritabanı değişikliklerinizi nasıl sürümlendiriyorsunuz?


32

Tablo tanımı değişiklikleri, yeni nesneler, paket değişiklikleri vb. Dahil olmak üzere veritabanında yapılan değişiklikleri izlemek için diğer kişilerin hangi yöntemleri kullandığını bilmekle ilgileniyorum. Harici sürüm kontrol sistemine sahip düz dosyalar kullanıyor musunuz? Tetikleyiciler? Diğer yazılım?


1
Bu gerçekten dba.stackexchange.com/questions/2/… ile benzer - bu konuda Oracle'a özgü bazı fikirler edinebilirsiniz!
Gaurav

@Gaurav Bunu gördüm, ancak bazı Oracle özel cevaplar istedim.
Leigh Riffel

İstediğin şey değil ama ilgili: edition based redefinition
Jack Douglas

Yanıtlar:


22

Çalıştığım sitelerde, üretim örneklerinde yapılması gereken her türlü değişiklik, SQL * Plus'ta çalışacak değişiklik komut dosyaları olarak yazılmalıdır; Ayrıca, tüm şema nesnelerini sıfırdan yeniden oluşturmak için gereken komut dosyaları güncel tutulmalıdır. Tüm bu scriptler değişim kontrolünde kontrol edilir ve oradan taşınır.

DDL değişikliklerini denetleyebilir veya değişiklikleri almak için DDL tetikleyicilerini kullanabilir veya iki örneği karşılaştırmak için diff yazılımını kullanabilirsiniz, ancak bu yöntemler ayrım gözetmez; Genellikle bir geliştirici, tam olarak neyin değiştirilmesi gerektiğine karar vermeden önce bir şemada (örneğin, küçük test değişiklikleri, konseptleri test etmek için kukla tablolar yaratma gibi) çeşitli değişiklikler yapıp geri alır.


1
İş
yerimde

10

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 .

  1. Bir kaleci var ve her DDL bu kaleci tarafından yürütülür.
  2. Diğer Kişiler DDL ifadelerini yürütme yeteneğine sahiptir.
  3. Yalnızca hangi değişikliklerin yapıldığını kaydetmeniz gerekir, ancak çok büyük farkları karşılaştırmanız gerekmez.
  4. 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.
  5. Anlık değişiklikleri bilmek zorunda değilsiniz, zaman zaman: yani saatlik, günlük.
  6. 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.

  1. başla
  2. V1
  3. V2
  4. V3
  5. ...

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.



4

Bazı veritabanlarımızda, değişiklikleri yakalamak ve bunları bir tabloya kaydetmek için DDL tetikleyicilerini kullanıyoruz. Daha sonra bu önceki sürümleri çekmek için bir web arayüzümüz var. Ciddi dezavantajları var, bu yüzden alternatifler arıyorum, ancak kolay ve sürüm kontrolü yapmadan daha iyidir.


4

11g veritabanlarımız için Schema Version Control'ü kullandık , ancak 11.2'deki yazılımla ilgili bazı sorunlar yaşadık. Hala üzerinde çalıştığımız sorunlar olmasaydı harika bir ürün olurdu.





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.