Saya sering mengalami masalah berikut.
Saya bekerja di beberapa perubahan untuk proyek yang memerlukan tabel baru atau kolom dalam database. Saya membuat database modifikasi dan melanjutkan pekerjaan saya. Biasanya, saya ingat untuk menuliskan perubahan sehingga mereka dapat direplikasi pada sistem hidup. Namun, saya don't selalu ingat apa yang saya've berubah dan saya don't selalu ingat untuk menuliskannya.
Jadi, saya membuat dorongan untuk hidup sistem dan mendapatkan besar, kesalahan yang jelas bahwa tidak ada NewColumnX
, ugh.
Terlepas dari fakta bahwa hal ini mungkin tidak menjadi praktek terbaik untuk situasi ini, apakah ada sistem kontrol versi untuk database? Saya don't peduli tentang database tertentu teknologi. Aku hanya ingin tahu jika ada. Jika hal itu terjadi untuk bekerja dengan MS SQL Server, kemudian besar.
Di Ruby on Rails, ada's sebuah konsep migrasi -- cepat script untuk mengubah database.
Anda menghasilkan file migrasi, yang memiliki aturan untuk meningkatkan db versi (seperti menambahkan kolom) dan aturan-aturan untuk downgrade versi (seperti menghapus kolom). Setiap migrasi adalah nomor, dan meja melacak anda saat ini db versi.
Untuk migrate up, anda menjalankan perintah yang disebut "db:migrate" yang terlihat di versi anda dan berlaku yang dibutuhkan script. Anda dapat bermigrasi ke dalam cara yang sama.
Migrasi script sendiri disimpan dalam sistem kontrol versi-setiap kali anda mengubah database anda check-in script baru, dan setiap pengembang dapat menerapkan ini untuk membawa mereka db lokal untuk versi terbaru.
I'm sedikit old-school, saya menggunakan file sumber untuk menciptakan database. Sebenarnya ada 2 file - proyek-database.sql dan proyek-update.sql pertama untuk skema dan gigih data, dan yang kedua untuk modifikasi. Tentu saja, keduanya berada di bawah kontrol sumber.
Ketika perubahan database, pertama kali saya update utama skema dalam proyek-database.sql, kemudian salin info yang relevan untuk proyek-update.sql, misalnya ALTER TABLE pernyataan. Saya kemudian menerapkan pembaruan untuk pengembangan database, tes, iterate sampai selesai dengan baik. Kemudian, cek di berkas, tes lagi, dan berlaku untuk produksi.
Juga, saya biasanya memiliki tabel di db - Config - seperti:
SQL
CREATE TABLE Config
(
cfg_tag VARCHAR(50),
cfg_value VARCHAR(100)
);
INSERT INTO Config(cfg_tag, cfg_value) VALUES
( 'db_version', '$Revision: $'),
( 'db_revision', '$Revision: $');
Kemudian, saya menambahkan baris berikut ke bagian update:
UPDATE Config SET cfg_value='$Revision: $' WHERE cfg_tag='db_revision';
The db_version
hanya akan berubah ketika database diciptakan, dan db_revision
memberi saya sebuah indikasi seberapa jauh db lebih dari baseline.
Aku bisa tetap update di file terpisah sendiri, tapi aku memilih untuk hancurkan mereka semua bersama-sama dan menggunakan potong&paste untuk mengekstrak bagian yang relevan. Sedikit lebih kebersihan adalah dalam rangka, yaitu, menghapus ':' dari $Revisi 1.1 $ untuk membekukan mereka.
MyBatis (sebelumnya iBatis) memiliki skema migrasi, alat untuk digunakan pada command line. Hal ini ditulis di jawa, meskipun dapat digunakan dengan setiap proyek.
Untuk mencapai sebuah database manajemen perubahan praktek, kita perlu mengidentifikasi beberapa tujuan kunci. dengan Demikian, MyBatis Skema Migrasi Sistem (atau MyBatis Migrasi untuk pendek) bertujuan untuk:
Redgate memiliki produk yang disebut SQL Kontrol Sumber. Hal tersebut terintegrasi dengan TFS, SVN, SourceGear lemari Besi, lemari Besi Pro, Mercurial, Terpaksa, dan Git.
Saya heran bahwa tidak ada yang menyebutkan alat open source liquibase yang berbasis Java dan harus bekerja untuk hampir setiap database yang mendukung jdbc. Dibandingkan dengan rel menggunakan xml sebagai gantinya ruby untuk melakukan perubahan skema. Meskipun saya tidak suka xml untuk domain bahasa tertentu yang sangat keren keuntungan dari xml adalah bahwa liquibase tahu bagaimana untuk memutar kembali operasi tertentu seperti
<createTable tableName="USER">
<column name="firstname" type="varchar(255)"/>
</createTable>
Sehingga anda don't perlu untuk menangani hal ini tentu anda sendiri
Murni pernyataan sql atau impor data juga didukung.
Saya sangat merekomendasikan SQL delta. Saya hanya menggunakannya untuk menghasilkan diff script ketika saya'm dilakukan coding fitur saya dan check script tersebut ke sumber alat kontrol (Mercurial :))
Mereka memiliki sebuah SQL server & Oracle versi.
Paling database engine harus mendukung dumping database anda ke dalam sebuah file. Aku tahu MySQL tidak, sih. Ini hanya akan menjadi sebuah file teks, sehingga anda bisa menyampaikan bahwa untuk Subversion, atau apapun yang anda gunakan. It'a akan mudah untuk menjalankan diff pada file juga.
Jika anda're menggunakan SQL Server itu akan sulit untuk mengalahkan Data Dude (alias Database Edisi Visual Studio). Setelah anda mendapatkan menguasainya, melakukan skema membandingkan antara sumber dikontrol versi database dan versi yang di produksi adalah angin. Dan dengan satu klik anda dapat menghasilkan diff DDL.
Ada's instruksional video pada MSDN yang's sangat membantu.
Aku tahu tentang DBMS_METADATA dan Katak, tetapi jika seseorang bisa datang dengan Data-Data Sobat untuk Oracle maka hidup akan benar-benar manis.
Lihatlah oracle paket DBMS_METADATA.
Secara khusus, berikut ini metode yang sangat berguna:
DBMS_METADATA.GET_DDL
DBMS_METADATA.SET_TRANSFORM_PARAM
DBMS_METADATA.GET_GRANTED_DDL
Setelah anda sudah familiar dengan cara kerja mereka (cukup jelas) anda dapat menulis sebuah script sederhana untuk membuang hasil dari metode-metode tersebut ke file teks yang dapat diletakkan di bawah kontrol sumber. Good luck!
Tidak yakin jika ada sesuatu yang sederhana ini untuk MSSQL.
Memiliki awal anda membuat tabel laporan dalam versi controller, kemudian tambahkan alter table pernyataan, tetapi tidak pernah mengedit file, hanya lebih mengubah file idealnya bernama berurutan, atau bahkan sebagai "mengubah set", sehingga anda dapat menemukan semua perubahan tertentu penyebaran.
Tabah bagian yang dapat saya lihat, adalah pelacakan ketergantungan, misalnya, untuk suatu penggunaan tabel B mungkin perlu diperbarui sebelum tabel A.
Untuk Oracle, saya menggunakan Toad, yang dapat membuang skema untuk suatu jumlah diskrit file (misalnya, satu file per tabel). Saya punya beberapa script yang mengelola koleksi ini secara Terpaksa, tapi saya pikir itu harus bisa dilakukan dengan mudah di hampir semua sistem kontrol revisi.
ER Studio memungkinkan anda untuk membalikkan skema database anda ke alat ini dan kemudian anda dapat membandingkannya dengan database.
Contoh: Reverse pengembangan skema ke ER Studio -- bandingkan dengan produksi dan akan daftar semua perbedaan. Hal ini dapat script perubahan atau hanya mendorong mereka melalui secara otomatis.
Setelah anda memiliki skema dalam ER Studio, anda bisa menyimpan penciptaan script atau menyimpannya sebagai milik biner dan menyimpannya dalam kontrol versi. Jika anda pernah ingin kembali ke masa lalu versi skema, hanya check it out dan mendorongnya ke db platform.
Saya menulis db saya rilis script di paralel dengan coding, dan menjaga melepaskan script dalam sebuah proyek bagian tertentu di SS. Jika saya membuat perubahan ke kode yang membutuhkan db perubahan, kemudian saya update rilis script pada waktu yang sama. Sebelum rilis, saya menjalankan rilis script pada bersih dev db (disalin struktur bijaksana dari produksi) dan melakukan pengujian akhir di atasnya.
I've melakukan ini dan selama bertahun-tahun -- mengelola (atau mencoba untuk mengelola) skema versi. Pendekatan terbaik tergantung pada alat yang anda miliki. Jika anda bisa mendapatkan Quest Software alat "Skema Manager" anda'll berada dalam kondisi yang baik. Oracle sendiri, kalah alat yang juga disebut "Skema Manager" (membingungkan banyak?) bahwa aku don't merekomendasikan.
Tanpa alat otomatis (lihat komentar lain di sini tentang Data Dude) maka anda'akan menggunakan script DDL dan file secara langsung. Memilih pendekatan, dokumen, dan mengikuti secara ketat. Saya suka memiliki kemampuan untuk membuat ulang database pada saat tertentu, jadi saya lebih memilih untuk memiliki penuh DDL ekspor dari seluruh database (jika saya'm DBA), atau dari pengembang skema (jika saya'm dalam pengembangan produk mode).
PLSQL Developer, alat dari Diseluruh Otomatisasi, memiliki plugin untuk repositori yang bekerja OK ( tapi tidak besar) dengan Visual Source Safe.
Dari web:
Kontrol Versi Plug-In menyediakan integrasi yang erat antara PL/SQL Developer IDE >>dan setiap Versi Sistem Kontrol yang mendukung Microsoft SCC Spesifikasi Antarmuka. >>Ini termasuk yang paling populer Version Control System seperti Microsoft Visual SourceSafe, >>Merant PVCS dan MKS Sumber Integritas.
Ada's PHP5 "migrasi database kerangka" yang disebut Ruckusing. Aku ingin't digunakan itu, tapi contoh menunjukkan satu ide, jika anda menggunakan bahasa untuk membuat database sebagai dan bila diperlukan, anda hanya memiliki untuk melacak file sumber.
Anda dapat menggunakan Microsoft SQL Server Data Tools di visual studio untuk menghasilkan script untuk objek database sebagai bagian dari SQL Server Project. Anda kemudian dapat menambahkan script untuk sumber kontrol menggunakan kontrol sumber integrasi yang dibangun ke dalam visual studio. Juga, SQL Server proyek-Proyek yang memungkinkan anda memverifikasi objek database menggunakan compiler dan menghasilkan penyebaran script untuk update database yang sudah ada atau membuat yang baru.
Skema Bandingkan untuk Oracle adalah alat yang dirancang khusus untuk bermigrasi perubahan dari Oracle database ke yang lain. Silahkan kunjungi URL berikut untuk link download, di mana anda akan dapat menggunakan perangkat lunak untuk trial yang berfungsi penuh.
http://www.red-gate.com/Products/schema_compare_for_oracle/index.htm
Kami've digunakan MS Tim Sistem Database Edition dengan keberhasilan yang cukup baik. Hal tersebut terintegrasi dengan TFS kontrol versi dan Visual Studio lebih-atau-kurang mulus dan memungkinkan kita untuk berhasil disimpan procs, pemandangan, dll., dengan mudah. Resolusi konflik dapat menjadi sakit, tapi versi sejarah yang lengkap setelah itu's dilakukan. Setelah itu, migrasi ke QA dan produksi yang sangat sederhana.
It's adil untuk mengatakan bahwa itu's versi 1.0 produk, meskipun, dan tidak tanpa beberapa masalah.
I'd merekomendasikan salah satu dari dua pendekatan. Pertama, berinvestasi di PowerDesigner dari Sybase. Enterprise Edition. Hal ini memungkinkan anda untuk desain Fisik datamodels, dan banyak lagi. Tetapi ia datang dengan repositori yang memungkinkan anda untuk check-in model anda. Setiap check-in bisa menjadi versi baru, dapat membandingkan semua versi ke versi lainnya dan bahkan apa yang ada di database anda pada waktu itu. Hal ini kemudian akan menyajikan daftar dari setiap perbedaan dan meminta yang harus bermigrasi... dan kemudian membangun script untuk melakukan hal itu. Itu tidak murah, tapi itu adalah tawar-menawar di harga dua kali dan itu ROI adalah sekitar 6 bulan.
Ide lain adalah untuk mengaktifkan DDL audit (bekerja di Oracle). Ini akan membuat sebuah tabel dengan setiap perubahan yang anda buat. Jika anda permintaan perubahan dari timestamp anda lalu pindah database anda perubahan prod untuk sekarang, anda akan memiliki daftar dari segala sesuatu yang anda lakukan. Beberapa di mana klausul untuk menghilangkan zero-sum perubahan seperti membuat tabel foo; diikuti dengan drop table foo; dan anda dapat dengan MUDAH membangun sebuah mod script. Mengapa menyimpan perubahan di wiki, itu pekerjaan ganda. Biarkan database melacak mereka untuk anda.