Bagaimana perubahan skema basis data grup trek?

67

Metodologi kontrol versi apa yang membantu tim orang melacak perubahan skema basis data?

Toby
sumber
Apa yang ingin Anda capai di sini? Apakah Anda mencoba mengingatkan orang tentang perubahan atau membuat jejak audit tentang siapa yang mengubah apa dan kapan? Sesuatu yang lain sama sekali?
ScottCher
@Scott - Pada dasarnya untuk dapat membuat hampir seperti jejak audit untuk dev lainnya - jadi kami tahu kami memiliki skema dev terbaru dan bahwa situs tes dan live dapat dengan mudah diperiksa untuk melihat skema apa yang mereka jalankan.
Toby
1
Ini serupa dengan pertanyaan yang baru saja saya posting, tetapi saya pikir mereka cukup berbeda untuk menjawab keduanya. Dba.stackexchange.com/questions/64/…
Beth Whitezel
1
@ BitOff - Saya setuju dan saya pikir jawaban saya untuk pertanyaan yang Anda referensikan juga ada di sini. Menggunakan alat seperti PowerDesigner atau ERWin dapat membantu versi mengontrol desain database - jika database dimodelkan secara eksternal, dan semua perubahan direncanakan melalui model, Anda dapat lebih mengontrol dan menyebarkan perubahan tersebut untuk ditinjau.
ScottCher
1
Lihatlah Liquibase atau Flyway
a_horse_with_no_name

Jawaban:

44

hanya beberapa menit yang lalu saya memeriksa ini: Sebuah tabel yang seharusnya ada di semua proyek dengan database , tampaknya cukup sederhana untuk dipraktekkan, periksa:

Ini disebut schema_version (atau migrasi, atau apa pun yang cocok untuk Anda) dan tujuannya adalah untuk melacak perubahan struktural atau data ke database. Struktur yang mungkin (contoh dalam MySQL) adalah:

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

masukkan ke nilai schema_version ( key, extra) ('001', 'versi skema');

Apakah Anda menambahkan tabel ini sejak awal proyek atau hanya setelah Anda menyebarkan versi pertama ke server pementasan atau produksi terserah Anda.

Setiap kali Anda perlu menjalankan skrip SQL untuk mengubah struktur database atau melakukan migrasi data, Anda harus menambahkan baris dalam tabel itu juga. Dan lakukan itu melalui pernyataan insert di awal atau akhir skrip itu (yang dikomit ke repositori kode proyek).

...

eiefai
sumber
1
@ David - Ini hampir merupakan pertanyaan sendiri, tetapi bisakah Anda menjelaskan dengan sangat cepat bagaimana tabel dapat memberi umpan balik kepada VCS Anda? Hanya dengan dump manual?
Toby
@Toby - dengan penyebaran, skrip dimasukkan ke dalam SVN dan pengembang menyediakan SVN rev atau bug # JIRA - kami (dbas) memasukkan catatan cepat dan rev # ke dalam tabel ini. Untuk menyatukannya, kami membuat halaman web untuk menunjuk ke tabel ini dengan hyperlink ke JIRA.
David Hall
Iya. Pada dasarnya OP memilikinya mundur - Anda menggunakan skrip penyebaran yang versi Anda, Anda tidak bekerja dari delta database. Mereka hanya bekerja dalam kasus degenerasi (disederhanakan) - Anda mungkin harus melakukan transformasi multi langkah untuk memperbarui skema, yang alat tidak dapat menghasilkan mundur. Tetapi skrip penerapan dapat menangani hal ini.
TomTom
23

Saya pikir metode terbaik adalah memiliki database yang dihasilkan sebagai bagian dari proses build Anda . Simpan semua skrip di kontrol sumber dengan sisa kode, dan semua orang bertanggung jawab untuk lingkungan mereka sendiri.

Gagal itu, RedGate memiliki alat untuk mengintegrasikan kontrol sumber ke dalam SSMS dan SQL Compare berguna untuk membandingkan / menyinkronkan skema MS SQL Server. Visual Studio Database Edition juga memiliki alat perbandingan skema bawaan .

Satu lagi pertanyaan SO menuntun saya ke Migrator Dot Net yang akan saya mulai selidiki selama waktu luang saya yang berlimpah. Ini terlihat seperti metode yang baik, tetapi mungkin lebih merupakan investasi waktu / overhead daripada yang bersedia Anda lakukan.

Larry Smithmier
sumber
"Edisi database" dari Visual Studio digunakan untuk menjadi produk terpisah tetapi sekarang termasuk dalam edisi termasuk Server Tim. Secara pribadi saya lebih suka alat RedGate (SQL Bandingkan) untuk menjaga mereka tetap sinkron.
Tangurena
12

eiefai sudah menyebutkan tabel yang harus ada di semua proyek dengan database . Ini adalah posting blog yang bagus, tetapi IMO hanya menjadi bagian dari solusi solusi untuk kontrol revisi database. Saya pikir setiap upaya untuk "menjawab" pertanyaan ini di dunia nyata perlu mempertimbangkan beberapa informasi lain tentang VCS dan basis data:

TML
sumber
8

Ada beberapa sudut berbeda untuk mendekati pertanyaan ini, saya pikir. Sudut "alat-pertama", saya percaya, akan bervariasi berdasarkan pada platform dan preferensi pribadi. Contoh kasus: Saya menggunakan Proyek Database di MS Visual Studio, tapi saya tidak yakin bahwa ini adalah solusi yang bagus untuk MySQL. Saya juga tahu orang-orang yang cukup dijual dengan alat favorit mereka dari Redgate, Erwin, Embarcadero, dll.

Ada juga sudut "proses-pertama" untuk pertanyaan ini, yang (semoga) akan ditinjau kembali di situs ini pada pertanyaan berikutnya. Kunci dalam proses ini adalah membuat skema Anda di bawah kendali sumber dan mengelola perubahan sedemikian rupa sehingga Anda dapat menerapkan perubahan skema dari versi "x" ke versi "y" cukup banyak sesuai permintaan.

Sebuah jawaban pasti untuk topik ini akan berakhir seperti buku, jadi mungkin layak memulai dengan merujuknya: Redgate baru-baru ini menerbitkan ebook gratis yang disebut " Panduan Gerbang Merah untuk Pengembangan Berbasis Tim SQL Server ", dan sementara ada banyak di sana untuk diperdebatkan, itu adalah tempat yang cukup bagus untuk mulai berdebat, IMO. Berlawanan dengan namanya, banyak materi dalam buku ini cukup umum untuk diterapkan pada DB apa pun (bukan hanya SQL Server) dan seperangkat alat apa pun (bukan hanya Redgate). Jika Anda belum pernah melihat ini, setidaknya patut dilihat sekilas.

Akhirnya, mungkin perlu menautkan "jawaban warisan" dari stackoverflow .

D. Lambert
sumber
5

SchemaCrawler adalah alat saya untuk menghasilkan file teks dengan semua objek skema database. Saya merancang output teks ini agar dapat dibaca oleh manusia, serta mampu melawan keluaran serupa dari server lain.

Dalam praktiknya, apa yang saya temukan adalah bahwa menghasilkan file teks dari skema basis data berguna, ketika dilakukan sebagai bagian dari build. Dengan cara ini, Anda dapat memeriksa file teks ke dalam sistem kontrol kode sumber Anda, dan memiliki riwayat versi tentang bagaimana skema Anda telah berkembang dari waktu ke waktu. SchemaCrawler dirancang untuk mengotomatisasi ini juga, dari baris perintah.

Sualeh Fatehi
sumber
Untuk oracle, lihat code.google.com/p/oracle-ddl2svn
popalka