
Oracle SQLcl ve Liquibase ile Veritabanı Süreçlerinde CI/CD ve Versiyon Kontrolü
Geleneksel veritabanı dağıtımlarını geride bırakın! Oracle SQLcl ve Liquibase entegrasyonu sayesinde veritabanı şema değişikliklerini nasıl kod gibi yönetebileceğinizi, CI/CD süreçlerinize nasıl dahil edeceğinizi örnek komutlarla inceliyoruz.
Veritabanı Uçtan Uca Nasıl Yönetilir?
Modern yazılım geliştirme süreçlerinde uygulama kodlarının versiyonlanması (Git) ve otomatik dağıtımı (CI/CD) artık standart bir uygulamadır. Ancak iş veritabanı şemalarına geldiğinde birçok ekip hala manuel script çalıştırmalar, "Acaba bu script test ortamında çalıştı mı?" şüpheleri ve e-posta ile gönderilen SQL dosyalarıyla boğuşuyor.
İşte tam bu noktada Oracle SQLcl ve Liquibase entegrasyonu devreye giriyor. Liquibase, açık kaynak kodlu, veritabanından bağımsız bir şema değişim ve versiyon kontrol aracıdır. Oracle, güçlü komut satırı aracı SQLcl içerisine Liquibase'i yerel (native) olarak entegre ederek veritabanı geliştiricileri için muazzam bir kolaylık sunmuştur.
Neden SQLcl ve Liquibase Kullanmalıyız?
- Geçmişi Takip Edin: Hangi DDL/DML script'inin ne zaman, kim tarafından ve hangi sırada çalıştırıldığını tam olarak görebilirsiniz.
- Tekrarlanabilir Dağıtımlar (Repeatability): Geliştirme, Test ve Canlı ortamlarınız arasındaki senkronizasyonu %100 doğrulukla sağlarsınız. Bir script bir ortamda başarıyla çalıştıysa, diğerinde de çalışacağından emin olursunuz.
- Güvenli Geri Alma (Rollback): Uygulanan bir değişimi geri almak (rollback) gerektiğinde, sistemin bunu otomatik yönetmesi hayat kurtarır.
- CI/CD Entegrasyonu: Jenkins, GitLab CI veya GitHub Actions gibi araçlarla SQLcl üzerinden otomasyon kurabilirsiniz.
Temel Deneyim: "lb" Komutları
SQLcl içerisinde Liquibase komutlarını kullanmak çok kolaydır. Sadece liquibase veya kısaca lb ön ekini kullanarak komutları çağırabilirsiniz. İşte geliştirme yaşam döngünüzde sıkça kullanacağınız bazı temel komutlar ve örnek kullanımları!
1. Mevcut Şemayı Dışa Aktar (Snapshot)
Mevcut bir veritabanı projesine sonradan Liquibase entegre ediyorsanız, ilk adım mevcut yapıyı dışa aktarmaktır.
-- Bağlandığınız şemadaki tüm nesneleri Liquibase XML formatında dışa aktarır
lb genschema
Bu komutu çalıştırdığınızda dizinde master bir controller.xml ve tablolar, view'ler, dizinler vb. için ayrı XML (changelog) dosyaları oluşur.
2. Tek Bir Nesneyi Dışa Aktarmak
Sadece belirli bir tabloda değişiklik yaptıysanız ve bunun changelog'unu oluşturmak istiyorsanız:
-- Sadece EMPLOYEES tablosunun yapısını dışarı aktar
lb genobject -type TABLE -name EMPLOYEES
3. Değişiklikleri İnşa Etmek (Preview)
Veritabanına hiçbir şey yazmadan, hedef ortamda hangi SQL komutlarının çalıştırılacağını görmek harika bir güvenlik adımıdır.
-- Değişiklik uygulanırsa hangi SQL kodlarının çalışacağını gösterir
lb updatesql -changelog controller.xml
4. Değişiklikleri Uygulamak (Deploy)
Her şey hazırsa (örneğin Test ortamına geçiş yapıyorsanız) değişiklikleri veritabanına uygulayın:
-- ChangeLog'ları hedefe uygular
lb update -changelog controller.xml
Liquibase bu aşamada hedef veritabanında DATABASECHANGELOG tablosunu kontrol eder. Daha önce uygulanmış script'leri (changeset) akıllıca pas geçer, sadece yeni eklenenleri çalıştırır.
5. Hatalı Paketi Geri Alma (Rollback)
Diyelim ki son çalıştırdığınız script'ler veritabanında problemlere yol açtı. Hemen bir önceki duruma geri dönmek için rollback kullanabilirsiniz:
-- Son uygulanan 1 changeset adımını (örneğin son tablo güncellemesini) geri al
lb rollback -changelog controller.xml -count 1
Liquibase Arka Planda Nasıl Çalışıyor?
Siz lb update komutunu verdiğinizde Liquibase veritabanınızda iki adet gizli yönetim tablosu oluşturur:
- DATABASECHANGELOGLOCK: Komutun eşzamanlı olarak birden fazla CI aracı veya kişi tarafından aynı anda çalıştırılmasını (çakışmayı) önler.
- DATABASECHANGELOG: Uygulanan her script'in bir satır olarak kaydedildiği yerdir. MD5 Hash (Checksum) kontrolü sayesinde, bir script değiştirilmişse Liquibase bunu anlar ve sizi uyarır.
Kısa Bir Özet
SQLcl'in ücretsiz Liquibase desteği, Oracle veritabanı geliştiricileri için "DevOps" bariyerlerini yıkan muazzam bir güçtür. Kodunuzu git'e push'ladığınız anda, Jenkins üzerinde çalışan basit bir sql -s user/pass@db @deploy_script.sql satırının içinde yazan lb update komutuyla tüm şirketinizin veritabanı release süreçlerini saniyeler içinde problemsiz yönetebilirsiniz.
Oracle projelerinizde veritabanı CI/CD mimarisi kurmak veya SQLcl & Liquibase geçiş eğitimleri almak isterseniz, Sardunya Yazılım uzman ekibine iletişim sayfamızdan ulaşabilirsiniz!