Manajemen Perubahan Struktur Database Menggunakan Liquibase
Dalam pembuatan aplikasi perubahan struktur/schema database merupakan hal yang wajar, baik pada fase development maupun setelah masuk ke fase implementasi (production/live). Ada banyak alasan kenapa kita perlu melakukan perubahan struktur database, contoh:
- Penambahan fitur baru yang membutuhan penambahan attribut/field di tabel yang sudah ada atau malah menambahkan tabel yang baru.
- Perbaikan bug yang menyebabkan perubahan nama atau jenis data dalam database.
- Issue kinerja sistem yang memerlukan tambahan index dalam database.
Perubahan-perubahan ini tentunya wajib
kita catat baik secara manual maupun menggunakan tool khusus yang bisa dengan mudah membuat log perubahan struktur database dari waktu ke waktu, karena jika tidak bisa berpotensi menjadi bug di kemudian hari.
Beberapa tool database management seperti SQLyog versi Enterprise/Ultimate atau EMS SQL Manager versi berbayarnya memang menyediakan fitur untuk melakukan sinkronisasi struktur database dengan mudah, tapi bagi Anda yang mempunyai anggaran terbatas untuk membeli lisensinya ada alternatif tool gratis dan open source yang bisa kita gunakan salah satunya yaitu Liquibase.
Pernah kebayang nggak ngoding tanpa source/version control seperti Git atau SVN kalo dulu mungkin iya, kalo sekarang source/version control merupakan hal yang wajib
kita gunakan untuk memberikan rasa aman saat ber-coding ria . Source/version control ini digunakan untuk mencatat perubahan kode dari waktu ke waktu, apalagi kalo ngodingnya bareng-bareng, hanya orang-orang kreatif
saja yang bisa melakukannya tanpa source/version control . Dengan mengusung tema Source Control for Your Database
Liquibase juga bisa kita fungsikan sebagai source/version control untuk mencatat perubahan struktur/schema database.
Instalasi Liquibase
Liquibase tidak memerlukan instalasi khusus, kita tinggal download filenya di web site resmi Liquibase kemudian mengekstraknya.
Selain itu ada tool lain yang perlu kita siapkan yaitu:
- JRE atau JDK karena Liquibase ditulis menggunakan Java.
- JDBC driver disesuaikan dengan database yang digunakan, untuk contoh di sini saya menggunakan database PostgreSQL. Setelah didownload kita copykan ke folder lib
Membuat Changelog
Struktur database dalam Liquibase ditulis dalam format XML, disebut dengan istilah changelog
. Ada beberapa perintah yang bisa digunakan untuk menghasilkan changelog
, tentunya disesuaikan dengan kebutuhan.
generateChangelog
Perintah ini digunakan untuk membuat changelog
dari struktur database secara lengkap jadi mirip dengan perintah dump/export ke sql. Biasanya kita gunakan pada saat implementasi awal sistem untuk mengopykan struktur database kosongan dari server development ke server production/live. Misal di awal implementasi sistem kita mempunyai struktur database seperti berikut :
Dari gambar di atas kita baru mempunyai dua buah tabel yaitu m_customer
dan m_supplier
.
Kemudian kita jalankan perintah generateChangelog
:
Akan menghasilkan file changelog
seperti berikut:
Mungkin tidak perlu dijelaskan lagi ya, karena isi dari file db.changelog-1.0.xml di atas hanya menjelaskan struktur dari tabel m_customer
dan m_supplier
dalam format XML.
Setelah itu kita jalankan perintah update
agar changelog
yang dihasilkan dari perintah generateChangelog
di atas dieksekusi ke database target (db production/live).
Dari gambar di bawah ini terlihat kondisi database production sebelum (sebelah kiri) dan sesudah dijalankan perintah update
.
Pada saat pertama kali Liquibase dijalankan untuk database target, Liquibase akan membuat dua buah tabel sistem yaitu databasechangelog dan databasechangeloglock kedua tabel ini digunakan untuk mencatat hasil eksekusi changelog
dari waktu ke waktu. Jadi perlu diperhatikan kedua tabel ini jangan dihapus.
diffChangeLog
Selama fase development maupun setelah masuk ke fase implementasi (production/live) kadang-kadang terjadi perubahan struktur database, sehingga kita perlu mengetahui perbedaan dari struktur lama dan baru, untuk melakukan ini kita menggunakan perintah diffChangeLog
.
Misal seperti penjelasan gambar di bawah ini, yang sebelah kiri adalah struktur awal database yang hanya mempunyai dua buah tabel yaitu m_customer
dan m_supplier
, selama proses development berlangsung terjadi penambahan beberapa tabel baru yaitu m_golongan
, m_produk
dan tabel baru lainnya.
Nah untuk menghasilkan changelog
, yang isinya adalah perbedaan struktur lama dan baru kita gunakan perintah diffChangeLog
.
Contoh file changelog
yang dihasilkan:
Kemudian kita jalankan lagi perintah update
. Perintah update
ini melakukan patch
ke database target (database production/live).
Setelah itu kita cek lagi struktur database productionnya.
Gampang bukan , dengan menggunakan Liquibase proses migrasi struktur database pun menjadi lebih mudah.
File Liquibase Properties
Untuk menyingkat penulisan perintah Liquibase kita bisa memanfaatkan file liquibase properties. Di file ini kita mengeset semua nilai parameter yang dibutuhkan pada saat menjalankan perintah Liquibase. Secara default nama yang digunakan untuk file liquibase properties adalah liquibase.properties
, jika menggunakan nama default ini kita bisa langsung menjalankan perintah Liquibase seperti berikut :
dan jika menggunakan nama yang lain, misal untuk masing-masing perintah kita buatkan file liquibase properties tersendiri, pada saat menjalankan perintah Liquibase harus kita sebutkan secara explicit nama file liquibase properties-nya dengan menambahkan parameter defaultsFile=<nama_file_liquibase_properties>
. Contoh:
Dan untuk masing-masing file liquibase properties-nya kita isi seperti berikut:
Selamat mencoba
Comments