Saya sering mengalami masalah berikut.
Saya mengerjakan beberapa perubahan pada proyek yang membutuhkan tabel atau kolom baru dalam database. Saya membuat modifikasi database dan melanjutkan pekerjaan saya. Biasanya, saya ingat untuk menuliskan perubahan sehingga dapat direplikasi di sistem langsung. Namun, saya tidak selalu ingat apa yang telah saya ubah dan saya tidak selalu ingat untuk menuliskannya.
Jadi, saya melakukan push ke sistem live dan mendapatkan error yang besar dan jelas bahwa tidak ada NewColumnX
, ugh.
Terlepas dari kenyataan bahwa ini mungkin bukan praktik terbaik untuk situasi ini, apakah ada sistem kontrol versi untuk database? Saya tidak peduli dengan teknologi database tertentu. Saya hanya ingin tahu apakah ada. Jika kebetulan bekerja dengan MS SQL Server, maka bagus.
sumber
Jawaban:
Di Ruby on Rails, ada konsep migrasi - skrip cepat untuk mengubah database.
Anda membuat file migrasi, yang memiliki aturan untuk meningkatkan versi db (seperti menambahkan kolom) dan aturan untuk menurunkan versi (seperti menghapus kolom). Setiap migrasi diberi nomor, dan sebuah tabel melacak versi db Anda saat ini.
Untuk bermigrasi , Anda menjalankan perintah bernama "db: migrate" yang melihat versi Anda dan menerapkan skrip yang diperlukan. Anda dapat bermigrasi ke bawah dengan cara yang sama.
Skrip migrasi itu sendiri disimpan dalam sistem kontrol versi - setiap kali Anda mengubah database, Anda memeriksa skrip baru, dan setiap pengembang dapat menerapkannya untuk membawa db lokal mereka ke versi terbaru.
sumber
Saya agak jadul, karena saya menggunakan file sumber untuk membuat database. Sebenarnya ada 2 file - project-database.sql dan project-update.sql - yang pertama untuk skema dan data persisten, dan yang kedua untuk modifikasi. Tentu saja, keduanya berada di bawah kendali sumber.
Ketika database berubah, pertama-tama saya memperbarui skema utama di project-database.sql, lalu salin info yang relevan ke project-update.sql, misalnya pernyataan ALTER TABLE. Saya kemudian dapat menerapkan pembaruan ke database pengembangan, menguji, mengulang hingga selesai dengan baik. Kemudian, periksa file, uji lagi, dan terapkan ke produksi.
Juga, saya biasanya memiliki tabel di db - Config - seperti:
SQL
Kemudian, saya menambahkan yang berikut ini ke bagian pembaruan:
Satu-
db_version
satunya akan berubah ketika database dibuat ulang, dandb_revision
memberi saya indikasi seberapa jauh db dari baseline.Saya dapat menyimpan pembaruan di file terpisah mereka sendiri, tetapi saya memilih untuk menggabungkan semuanya dan menggunakan potong & tempel untuk mengekstrak bagian yang relevan. Sedikit lebih banyak pekerjaan rumah beres, yaitu, hapus ':' dari $ Revisi 1.1 $ untuk membekukannya.
sumber
MyBatis (sebelumnya iBatis ) memiliki migrasi skema , alat untuk digunakan pada baris perintah. Itu ditulis dalam java meskipun dapat digunakan dengan proyek apa pun.
sumber
Redgate memiliki produk yang disebut Kontrol Sumber SQL . Ini terintegrasi dengan TFS, SVN, SourceGear Vault, Vault Pro, Mercurial, Perforce, dan Git.
sumber
Saya sangat merekomendasikan SQL delta . Saya hanya menggunakannya untuk menghasilkan skrip diff ketika saya selesai mengkodekan fitur saya dan memeriksa skrip tersebut ke alat kontrol sumber saya (Mercurial :))
Mereka memiliki versi SQL server & Oracle.
sumber
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 rails, ia menggunakan xml sebagai gantinya ruby untuk melakukan perubahan skema. Meskipun saya tidak suka xml untuk bahasa khusus domain, keuntungan yang sangat keren dari xml adalah bahwa liquibase tahu cara mengembalikan operasi tertentu seperti
Jadi, Anda tidak perlu menangani ini sendiri
Pernyataan sql murni atau impor data juga didukung.
sumber
Kebanyakan mesin database harus mendukung dumping database Anda ke dalam sebuah file. Saya tahu MySQL melakukannya. Ini hanya akan menjadi file teks, jadi Anda bisa mengirimkannya ke Subversion, atau apapun yang Anda gunakan. Ini akan mudah untuk menjalankan diff pada file juga.
sumber
Jika Anda menggunakan SQL Server, akan sulit untuk mengalahkan Data Dude (alias Edisi Database Visual Studio). Setelah Anda memahaminya, melakukan perbandingan skema antara versi database yang dikontrol sumber dan versi dalam produksi sangatlah mudah. Dan dengan satu klik Anda dapat menghasilkan DDL diff Anda.
Ada video instruksional di MSDN yang sangat membantu.
Saya tahu tentang DBMS_METADATA dan Toad, tetapi jika seseorang dapat menemukan Data Dude untuk Oracle maka hidup akan sangat menyenangkan.
sumber
Minta pernyataan awal buat tabel di pengontrol versi, lalu tambahkan pernyataan alter tabel, tetapi jangan pernah mengedit file, cukup ubah file yang dinamai secara ideal secara berurutan, atau bahkan sebagai "set perubahan", sehingga Anda dapat menemukan semua perubahan untuk penerapan tertentu.
Bagian tersulit yang dapat saya lihat, adalah melacak dependensi, misalnya, untuk tabel penerapan tertentu B mungkin perlu diperbarui sebelum tabel A.
sumber
Untuk Oracle, saya menggunakan Toad , yang dapat membuang skema ke sejumlah file diskrit (misalnya, satu file per tabel). Saya memiliki beberapa skrip yang mengelola koleksi ini di Perforce, tetapi menurut saya itu semestinya dapat dengan mudah dilakukan di hampir semua sistem kontrol revisi.
sumber
Lihatlah paket oracle DBMS_METADATA.
Secara khusus, metode berikut sangat berguna:
DBMS_METADATA.GET_DDL
DBMS_METADATA.SET_TRANSFORM_PARAM
DBMS_METADATA.GET_GRANTED_DDL
Setelah Anda terbiasa dengan cara kerjanya (cukup jelas), Anda dapat menulis skrip sederhana untuk membuang hasil metode tersebut ke dalam file teks yang dapat diletakkan di bawah kendali sumber. Semoga berhasil!
Tidak yakin apakah ada sesuatu yang sesederhana ini untuk MSSQL.
sumber
Saya menulis skrip rilis db saya secara paralel dengan pengkodean, dan menyimpan skrip rilis di bagian khusus proyek di SS. Jika saya membuat perubahan pada kode yang membutuhkan perubahan db, maka saya memperbarui skrip rilis pada saat yang bersamaan. Sebelum rilis, saya menjalankan skrip rilis pada dev db bersih (struktur disalin bijaksana dari produksi) dan melakukan pengujian akhir saya di atasnya.
sumber
Saya telah melakukan ini selama bertahun-tahun - mengelola (atau mencoba mengelola) versi skema. Pendekatan terbaik bergantung pada alat yang Anda miliki. Jika Anda bisa mendapatkan alat Quest Software "Manajer Skema", Anda akan dalam kondisi yang baik. Oracle memiliki alatnya sendiri yang lebih rendah yang juga disebut "Schema Manager" (membingungkan banyak?) Yang tidak saya rekomendasikan.
Tanpa alat otomatis (lihat komentar lain di sini tentang Data Dude) maka Anda akan menggunakan skrip dan file DDL secara langsung. Pilih pendekatan, dokumentasikan, dan ikuti dengan cermat. Saya suka memiliki kemampuan untuk membuat ulang database pada saat tertentu, jadi saya lebih suka memiliki ekspor DDL penuh dari seluruh database (jika saya DBA), atau skema pengembang (jika saya menggunakan produk -development mode).
sumber
Pengembang PLSQL, alat dari All Arround Automations, memiliki plugin untuk repositori yang berfungsi OK (tapi tidak hebat) dengan Visual Source Safe.
http://www.allroundautomations.com/plsvcs.html
sumber
ER Studio memungkinkan Anda untuk membalik skema database Anda menjadi alat dan Anda kemudian dapat membandingkannya dengan database langsung.
Contoh: Balik skema pengembangan Anda menjadi ER Studio - bandingkan dengan produksi dan semua perbedaannya akan tercantum. Itu dapat membuat skrip perubahan atau hanya mendorongnya secara otomatis.
Setelah Anda memiliki skema di ER Studio, Anda dapat menyimpan skrip pembuatan atau menyimpannya sebagai biner berpemilik dan menyimpannya di kontrol versi. Jika Anda ingin kembali ke versi skema sebelumnya, cukup periksa dan dorong ke platform db Anda.
sumber
Ada "kerangka migrasi database" PHP5 yang disebut Ruckusing. Saya belum pernah menggunakannya, tetapi contoh menunjukkan idenya, jika Anda menggunakan bahasa untuk membuat database saat dan saat diperlukan, Anda hanya perlu melacak file sumber.
sumber
Anda dapat menggunakan Alat Data Microsoft SQL Server di studio visual untuk membuat skrip untuk objek database sebagai bagian dari Proyek SQL Server. Anda kemudian dapat menambahkan skrip ke kontrol sumber menggunakan integrasi kontrol sumber yang dibangun ke dalam studio visual. Selain itu, Proyek SQL Server memungkinkan Anda memverifikasi objek database menggunakan kompiler dan membuat skrip penerapan untuk memperbarui database yang ada atau membuat yang baru.
sumber
Kami telah menggunakan MS Team System Database Edition dengan kesuksesan yang cukup baik. Ini terintegrasi dengan kontrol versi TFS dan Visual Studio lebih atau kurang mulus dan memungkinkan kita untuk mengelola procs yang disimpan, tampilan, dll, dengan mudah. Resolusi konflik bisa menyebalkan, tetapi riwayat versi selesai setelah selesai. Setelah itu, migrasi ke QA dan produksi sangat sederhana.
Cukup adil untuk mengatakan bahwa ini adalah produk versi 1.0, dan bukan tanpa beberapa masalah.
sumber
Perbandingan Skema untuk Oracle adalah alat yang dirancang khusus untuk memigrasi perubahan dari database Oracle ke database lain. Silakan kunjungi URL di bawah ini untuk tautan unduhan, di mana Anda akan dapat menggunakan perangkat lunak untuk uji coba yang berfungsi penuh.
http://www.red-gate.com/Products/schema_compare_for_oracle/index.htm
sumber
Dengan tidak adanya VCS untuk perubahan tabel, saya telah memasukkannya ke dalam wiki. Setidaknya saya bisa melihat kapan dan mengapa itu diubah. Ini jauh dari sempurna karena tidak semua orang melakukannya dan kami memiliki beberapa versi produk yang digunakan, tetapi lebih baik daripada tidak sama sekali.
sumber
Saya akan merekomendasikan salah satu dari dua pendekatan. Pertama, berinvestasi di PowerDesigner dari Sybase. Edisi Perusahaan. Ini memungkinkan Anda untuk merancang model data Fisik, dan banyak lagi lainnya. Tapi itu datang dengan repositori yang memungkinkan Anda untuk memeriksa model Anda. Setiap check in baru bisa menjadi versi baru, itu bisa membandingkan versi apa pun dengan versi lain dan bahkan dengan apa yang ada di database Anda pada saat itu. Ini kemudian akan menampilkan daftar setiap perbedaan dan menanyakan mana yang harus dimigrasi… dan kemudian membangun skrip untuk melakukannya. Itu tidak murah tapi itu murah dengan harga dua kali lipat dan ROI-nya sekitar 6 bulan.
Ide lainnya adalah mengaktifkan audit DDL (bekerja di Oracle). Ini akan membuat tabel dengan setiap perubahan yang Anda buat. Jika Anda menanyakan perubahan dari stempel waktu terakhir kali Anda memindahkan perubahan database Anda ke prod sekarang, Anda akan memiliki daftar urutan semua yang telah Anda lakukan. Beberapa klausa di mana untuk menghilangkan perubahan jumlah-nol seperti create table foo; diikuti oleh drop table foo; dan Anda dengan MUDAH dapat membuat skrip mod. Mengapa menyimpan perubahan di wiki, itu menggandakan pekerjaan. Biarkan database melacaknya untuk Anda.
sumber
Rekomendasi dua buku: "Refactoring Database" oleh Ambler dan Sadalage dan "Agile Database Techniques" oleh Ambler.
Seseorang menyebutkan Migrasi Rails. Saya pikir mereka bekerja dengan baik, bahkan di luar aplikasi Rails. Saya menggunakannya pada aplikasi ASP dengan SQL Server yang kami sedang dalam proses pindah ke Rails. Anda memeriksa sendiri skrip migrasi ke VCS. Berikut adalah posting oleh Dave Thomas Pragmatis tentang masalah ini.
sumber