Bir grup veritabanı şeması değişikliklerini nasıl izleyebilir?


67

Hangi sürüm kontrol metodolojileri, insan ekiplerinin veritabanı şeması değişikliklerini izlemelerine yardımcı olur?


Burada ne yapmaya çalışıyorsun? İnsanları neyin ne zaman ne zaman değiştirdiğini değiştirmeleri veya bir denetim izi oluşturmaları konusunda uyarmaya çalışıyorsunuz? Tamamen başka bir şey?
ScottCher

@Scott - Esasen diğer aygıtlar için neredeyse bir denetim izi oluşturabilmek için - bu nedenle en güncel yazılım şemasına sahip olduğumuzu ve test ve canlı sitelerin hangi şemayı çalıştırdıklarını görmek için kolayca kontrol edilebileceğini biliyoruz.
Toby

1
Bu henüz gönderdiğim soruya benziyor
Beth Whitezel

1
@BitOff - Katılıyorum ve referansta bulunduğunuz soruya verdiğim cevabın burada da durduğunu düşünüyorum. PowerDesigner veya ERWin gibi bir araç kullanmak sürümün bir veritabanı tasarımını kontrol etmesine yardımcı olabilir - veritabanı harici olarak modellenirse ve tüm değişiklikler modelde planlanırsa, bu değişiklikleri inceleme için daha iyi kontrol edebilir ve dağıtabilirsiniz.
ScottCher

1
Liquibase veya Flyway'i ziyaret edin
a_horse_with_no_name

Yanıtlar:


44

sadece birkaç dakika önce şunu kontrol ediyordum: Tüm projelerde yer alması gereken bir veri tabanı olan bir masa, uygulamaya koymak, kontrol etmek için yeterince basit görünüyor:

Buna schema_version (veya geçişler veya size ne uygunsa) denir ve amacı veritabanındaki yapısal veya veri değişikliklerini takip etmektir. Olası bir yapı (MySQL'deki örnek):

create table schema_version (
     `when` timestamp not null default CURRENT_TIMESTAMP,
     `key` varchar(256) not null,
     `extra` varchar(256),
     primary key (`key`)
) ENGINE=InnoDB;

schema_version ( key, extra) değerlerine yerleştirin ('001', 'şema sürümü');

Bu tabloyu projenin başlangıcından veya ilk sürümü bir aşamalandırma veya üretim sunucusuna dağıttıktan hemen sonra ekleyip eklemeyeceğiniz size kalmış.

Ne zaman veritabanı yapısını değiştirmek ya da veri taşıma işlemini gerçekleştirmek için bir SQL betiğini çalıştırmanız gerektiğinde, o tabloya da bir satır eklemelisiniz. Ve bunu projenin başında veya sonunda (projenin kod deposuna bağlıdır) insert ifadesiyle yapın.

...


1
@David - Bu neredeyse kendi başına bir soru, ancak tablonun VCS'nize nasıl geri bildirim verebileceğini çok hızlı açıklayabilir misiniz? Sadece manuel bir dökümü ile?
Toby

@Toby - bir konuşlandırma ile, komut dosyaları SVN'ye yerleştirildi ve geliştirici, SVN rev veya JIRA bug # 'ı sağladı - biz (dbas) hızlı notlarını ve rev # bu tabloya ekledik. Bununla birlikte, onu bir araya getirmek için, bu tabloya JIRA'ya köprü olan bir web sayfasını oluşturduk.
David Hall,

Evet. Temel olarak OP'de geriye doğru bir değer var - sürümlerini uyguladığınız dağıtım komut dosyalarını kullanıyorsunuz, veritabanı deltalarından çalışmıyorsunuz. Bunlar sadece dejenere (basitleştirilmiş) durumlarda çalışır - bir takımın geriye doğru üretemeyeceği bir şemayı güncellemek için çoklu adım dönüşümleri yapmanız gerekebilir. Ancak dağıtım komut dosyaları bununla baş edebilir.
TomTom

23

Bence en iyi yöntem, derleme işleminizin bir parçası olarak oluşturulan veritabanına sahip olmaktır . Tüm komut dosyalarını kodun geri kalanıyla birlikte kaynak kontrolünde tutun; herkes kendi ortamından sorumludur.

Bunun başarısız olması durumunda RedGate, kaynak kontrolünü SSMS'ye entegre etmek için bir araca sahiptir ve SQL Karşılaştırma , MS SQL Server şemalarını karşılaştırmak / senkronize etmek için kullanışlıdır. Visual Studio Database Edition ayrıca yerleşik bir şema karşılaştırma aracına sahiptir .

Başka SO soru bana yol Yükseltici Dot Net benim bol boş zamanlarında araştırılmaya başlanması için gidiyorum. İyi bir yönteme benziyor, ancak yapmak istediğinizden daha fazla zaman / genel yatırım olabilir.


Visual Studio'nun "veritabanı sürümü" ayrı bir üründü, ancak şimdi Team Server dahil sürümlere dahil edildi. Şahsen ben senkronize tutmak için RedGate aracını (SQL Compare) tercih ediyorum.
Tangurena

12

eiefai zaten bahsetti Bir veritabanında tüm projelerde bulunması gereken bir tablo . Bu harika bir blog yazısıdır, ancak IMO sadece veritabanı revizyon kontrolü için çalışan bir çözüme giden yolun bir parçası. Bence gerçek dünyada bu soruyu "cevaplama" girişimi, VCS ve veri tabanları hakkındaki diğer bazı bilgileri göz önünde bulundurmalı:


8

Sanırım bu soruya yaklaşmak için birkaç farklı açı var. "İlk araç" açısı, platform ve kişisel tercihlere göre değişeceğine inanıyorum. Örnek olarak: MS Visual Studio'da bir Veritabanı Projesi kullanıyorum, ancak bunun MySQL için mükemmel bir çözüm olduğundan emin değilim. Ayrıca Redgate, Erwin, Embarcadero, vb. Favori araçlarında oldukça satılan insanları tanıyorum.

Ayrıca, bu soru için "ilk önce" bir açı da vardır, ki bu soruya daha sonraki sorularda (bu konuda) tekrar incelenecektir. Bu süreçteki kilit noktalar şemanızı kaynak kontrolü altına almak ve şema değişikliklerini "x" sürümünden "y" sürümüne kadar talep üzerine uygulayabileceğiniz şekilde yönetmektir.

Bu konuya Kesin bir yanıt bir kitap benzeyen sonunda gidiyor, bu yüzden bir tane başvurarak başlayan değer demektir: Redgate geçenlerde "adlı ücretsiz e-kitap yayınladı SQL Server Takım tabanlı Geliştirme Kırmızı Kapısı Kılavuzu varken" ve tartışılacak çok şey var, tartışmaya başlamak için güzel bir yer, IMO. İsmin aksine, bu kitaptaki materyallerin çoğu herhangi bir DB'ye (sadece SQL Server'a değil) ve herhangi bir araç setine (sadece Redgate'e değil) uygulanacak kadar geneldir. Bunu daha önce görmediyseniz, kesinlikle en azından bir yağsıza değer.

Son olarak, muhtemelen stackoverflow'tan gelen "eski cevaba" bağlanmaya değer .


5

SchemaCrawler , tüm veritabanı şema nesnelerini içeren bir metin dosyası oluşturma aracımdır . Bu metin çıktısının hem insan tarafından okunabilir hem de başka bir sunucudan benzer çıktılara karşı farklı olacak şekilde tasarladım.

Uygulamada, bulduğum şey, veritabanı şemasının bir metin dosyasının çıktısının, derlemenin bir parçası olarak yapılması yararlı olduğu yönünde. Bu şekilde, metin dosyasını kaynak kod kontrol sisteminize göre kontrol edebilir ve şemanızın zaman içinde nasıl geliştiğine dair bir sürüm geçmişi olabilir. SchemaCrawler, bunu komut satırından da otomatikleştirmek için tasarlanmıştır.


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.