Bagaimana Anda mempersiapkan delta SQL Anda? apakah Anda secara manual menyimpan setiap skema yang mengubah SQL ke folder delta, atau apakah Anda memiliki semacam proses pembedaan otomatis?
Saya tertarik pada konvensi untuk versi skema database bersama dengan kode sumber. Mungkin kait pra-komit yang membedakan skema?
Juga, opsi apa untuk delta berbeda yang ada selain DbDeploy ?
EDIT: melihat jawaban yang ingin saya klarifikasi bahwa saya terbiasa dengan skema standar untuk menjalankan migrasi database menggunakan delta. Pertanyaan saya adalah tentang bagaimana membuat delta sendiri, lebih disukai secara otomatis.
Juga, versi untuk PHP dan MySQL jika ada bedanya. (Tolong, tidak ada solusi Ruby).
sql
mysql
schema
versioning
Eran Galperin
sumber
sumber
Jawaban:
Lihat
Apakah ada sistem kontrol versi untuk perubahan struktur basis data?
Bagaimana cara versi database MS SQL saya di SVN?
dan artikel Jeff
Dapatkan Database Anda Di Bawah Kontrol Versi
Saya merasakan sakit Anda, dan saya berharap ada jawaban yang lebih baik. Ini mungkin lebih dekat dengan apa yang Anda cari.
Mekanisme untuk melacak perubahan skema DB
Secara umum, saya merasa tidak ada solusi yang memadai dan diterima untuk ini, dan saya menggulirkan solusi saya sendiri di area ini.
sumber
Anda mungkin melihat thread lain yang serupa: Bagaimana cara versi MS SQL database saya di SVN? .
sumber
Jika Anda masih mencari opsi: lihat desainer neXtep. Ini adalah lingkungan pengembangan basis data GPL gratis berdasarkan konsep kontrol versi. Di lingkungan Anda selalu bekerja dengan entitas berversi dan dapat fokus pada pengembangan model data. Setelah rilis selesai, mesin pembangkitan SQL yang terpasang pada sistem kontrol versi dapat menghasilkan delta yang Anda perlukan di antara 2 versi, dan akan menawarkan Anda beberapa mekanisme pengiriman jika Anda membutuhkannya.
Antara lain, Anda dapat menyinkronkan dan membalikkan sinkronisasi database Anda selama pengembangan, membuat diagram model data, query database Anda menggunakan klien SQL terintegrasi, dll.
Lihat wiki untuk informasi lebih lanjut: http://www.nextep-softwares.com/wiki
Saat ini mendukung Oracle, MySql dan PostgreSql dan berada di java sehingga produk berjalan di windows, linux dan mac.
sumber
Saya memastikan bahwa perubahan skema selalu aditif. Jadi saya tidak menjatuhkan kolom dan tabel, karena itu akan zap data dan tidak dapat digulirkan kembali nanti. Dengan cara ini kode yang menggunakan database dapat diputar kembali tanpa kehilangan data atau fungsionalitas.
Saya memiliki skrip migrasi yang berisi pernyataan yang membuat tabel dan kolom jika belum ada dan mengisinya dengan data.
Skrip migrasi berjalan setiap kali kode produksi diperbarui dan setelah pemasangan baru.
Ketika saya ingin menjatuhkan sesuatu, saya melakukannya dengan menghapusnya dari skrip instalasi basis data dan skrip migrasi sehingga elemen skema yang usang ini akan secara bertahap dihapus dalam pemasangan baru. Dengan kelemahannya, pemasangan baru tidak dapat menurunkan versi ke versi yang lebih lama sebelum pemasangan.
Dan tentu saja saya menjalankan DDL melalui skrip-skrip ini dan tidak pernah secara langsung pada database untuk menjaga semuanya tetap sinkron.
sumber
Saya tidak mengelola delta. Saya membuat perubahan pada database master dan memiliki alat yang membuat skrip build berbasis XML berdasarkan pada database master.
Ketika tiba saatnya untuk memutakhirkan database yang ada, saya memiliki program yang menggunakan skrip build berbasis XML untuk membuat database baru dan tabel kosong. Saya kemudian menyalin data dari database lama menggunakan INSERT INTO x SELECT FROM y dan kemudian menerapkan semua indeks, kendala dan pemicu.
Tabel baru, kolom baru, kolom yang dihapus semuanya ditangani secara otomatis dan dengan beberapa trik kecil untuk menyesuaikan rutinitas penyalinan, saya dapat menangani penggantian nama kolom, perubahan jenis kolom, dan perbaikan dasar lainnya.
Saya tidak akan merekomendasikan solusi ini pada database dengan jumlah data yang besar tetapi saya secara teratur memperbarui database yang lebih dari 1GB dengan 400 tabel.
sumber
Anda tidak menyebutkan RDBMS mana yang Anda gunakan, tetapi jika itu MS SQL Server, Red-Gate's SQL Compare telah sangat diperlukan bagi kami dalam membuat delta antara skrip pembuatan objek.
sumber
Saya bukan orang yang suka berteriak, tetapi saya telah mengembangkan aplikasi web internal untuk melacak perubahan skema database dan membuat skrip pembaruan berversi.
Alat ini disebut Brasil dan sekarang open source di bawah lisensi MIT. Brasil adalah ruby / ruby berbasis rel dan mendukung perubahan penempatan ke basis data apa pun yang didukung Ruby DBI (MySQL, ODBC, Oracle, Postgres, SQLite).
Dukungan untuk menempatkan skrip pembaruan di kontrol versi direncanakan.
sumber
http://bitbucket.org/idler/mmp - alat versi skema untuk mysql, ditulis dalam PHP
sumber
Kami mengekspor data ke format portabel (menggunakan toolchain kami), lalu mengimpornya ke skema baru. tidak perlu untuk delta SQL. Sangat dianjurkan.
sumber
Saya menggunakan basis data Firebird untuk sebagian besar pengembangan dan saya menggunakan alat administrasi FlameRobin untuk itu. Ini memiliki opsi yang bagus untuk mencatat semua perubahan. Itu bisa mencatat semuanya ke satu file besar, atau satu file per perubahan basis data. Saya menggunakan opsi kedua ini, dan kemudian saya menyimpan setiap skrip dalam perangkat lunak kontrol versi - sebelumnya saya menggunakan Subversion, sekarang saya menggunakan Git.
Saya berasumsi Anda dapat menemukan beberapa alat MySQL yang memiliki fitur logging yang sama seperti FlameRobin untuk Firebird.
Di salah satu tabel basis data, saya menyimpan nomor versi dari struktur basis data, sehingga saya dapat memutakhirkan basis data dengan mudah. Saya juga menulis skrip PHP sederhana yang mengeksekusi skrip SQL tersebut satu per satu pada basis data target apa pun (jalur basis data dan nama pengguna / kata sandi disediakan pada baris perintah).
Ada juga opsi untuk mencatat semua pernyataan DML (masukkan, perbarui hapus), dan saya mengaktifkannya sambil memodifikasi beberapa data 'default' yang berisi setiap database.
Saya menulis kertas putih yang bagus tentang bagaimana saya melakukan semua ini secara rinci. Anda dapat mengunduh makalah dalam format .pdf bersama dengan skrip PHP demo dari sini .
sumber
Saya juga mengembangkan satu set skrip PHP di mana pengembang dapat mengirimkan skrip deltasql mereka ke repositori pusat.
Di salah satu tabel basis data (disebut TBSYNCHRONIZE), saya menyimpan nomor versi skrip yang dieksekusi terakhir, jadi saya dapat memutakhirkan basis data dengan mudah dengan menggunakan antarmuka web atau klien yang dikembangkan dengan tujuan Eclipse.
Antarmuka web memungkinkan untuk mengelola beberapa proyek. Ini mendukung juga basis data "cabang".
Anda dapat menguji aplikasi di http://www.gpu-grid.net/deltasql (jika Anda login sebagai admin dengan kata sandi testdbsync). Aplikasi ini open source dan dapat diunduh di sini: http://sourceforge.net/projects/deltasql
deltasql digunakan secara produktif di Swiss dan India, dan populer di Jepang.
sumber
Beberapa bulan yang lalu saya mencari alat untuk versi skema MySQL. Saya menemukan banyak alat yang berguna, seperti migrasi Doktrin, migrasi RoR, beberapa alat yang ditulis dalam Java dan Python.
Tapi tidak ada satu pun dari mereka yang memenuhi persyaratan saya.
Persyaratan saya:
Saya mulai menulis alat migrasi saya, dan hari ini saya memiliki versi beta.
Silakan, coba, jika Anda tertarik pada topik ini. Kirimkan saya permintaan dan laporan bug di masa mendatang.
Kode sumber: bitbucket.org/idler/mmp/src Gambaran Umum dalam bahasa Inggris: bitbucket.org/idler/mmp/wiki/Ringkasan Rumah di Rusia: antonoff.info/development/mysql-migration-with-php-project
sumber
Saya menggunakan http://code.google.com/p/oracle-ddl2svn/
sumber
Saya tertarik dengan topik ini juga.
Ada beberapa diskusi tentang topik ini di wiki Django .
Menariknya, sepertinya CakePHP memiliki skema versi bawaan menggunakan
cake schema generate
perintah just .sumber
Untuk MySQL
Ketika saya mendarat di DB baru:
Pertama, saya memeriksa struktur:
Pada langkah kedua, saya memeriksa data, tabel dengan tabel dengan
mysqldiff
. Agak kuno tapi loop PHP berdasarkaninformation_schema
data membuat pekerjaan pastiUntuk versi, saya menggunakan cara yang sama tetapi saya memformat skrip pembaruan SQL (untuk memutakhirkan atau mengembalikan) dengan hasil yang berbeda dan saya menggunakan konvensi nomor versi (dengan beberapa modifikasi, nomor versi terlihat seperti alamat ip) .
sumber
Saya menggunakan versi ketat dari skema basis data (dilacak dalam tabel terpisah). Skrip disimpan dalam kontrol versi, tetapi semuanya memverifikasi versi skema saat ini sebelum melakukan perubahan apa pun.
Berikut ini adalah implementasi penuh untuk SQL Server (solusi yang sama dapat dikembangkan untuk MySQL jika diperlukan): Cara Mempertahankan Versi Skema Basis Data SQL Server
sumber
Setelah penyelidikan panjang, saya menemukan bahwa ada beberapa alat pihak ke-3 atau jenis proyek Visual Studio yang tidak memuaskan saya, atau hanya blog tentang teori tetapi tidak ada implementasi. Jadi saya menerapkan sistem kerja, yang digunakan hampir setahun, dan dijelaskan di sini:
http://nalgorithm.com/2015/11/09/database-versioning-part-1/
tergantung pada minat, akan terus menulis lebih banyak.
sumber