TB
← Tüm yazılar

Migration disiplini

Veritabanı migration süreci, kontrol altina alinmadigi takdirde production ortaminda geri donusu zor sorunlara yol acar.

Veritabanı migration, şema ve veri yapisindaki degisiklikleri versiyonlanmis script'lerle uygulama pratigidir. Kontrolsuz migration production'da kilitlenme, veri kaybi ve geri donusu imkansiz durumlar üretir. Flyway, Liquibase, EF Core Migrations veya Sqitch farklı araclar ayni disiplini hedefler: tek yonlu, tekrarlanabilir, gozden gecirilmis değişiklik. Bu yazida migration tasarımı, expand-contract, CI entegrasyonu ve production güvenliği incelenir.

Migration kulturu

Her şema degisikligi kod review'den gecer. Migration dosyasi uygulama degisikligi ile ayni pull request'te olmalidir. Manuel SQL production'da calistirilmaz; pipeline uygular. Migration gecmisi audit trail'dir.

Forward-only vs rollback

Rollback script her zaman mümkün degildir; veri dönüşümü geri alinamaz olabilir. Forward-only kulturde geri alma yeni migration ile yapilir. Down migration geliştirme ortaminda test edilir.

Expand-contract pattern

  1. Expand: Yeni kolon/tablo ekle; geriye uyumlu.
  2. Dual write: Uygulama hem eski hem yeni yapıya yazar.
  3. Backfill: Batch job eski veriyi donusturur.
  4. Switch: Okuma yeni yapıya kayar.
  5. Contract: Eski kolon/tablo kaldirilir.

Bu pattern zero-downtime deploy ile uyumludur.

EF Core migration pratikleri

dotnet ef migrations add AddOrderStatusIndex
dotnet ef database update --connection "$CONN"

Model snapshot tutarlılığı korunmalidir. Büyük migration'lar bolunmeli: once şema, sonra indeks, sonra veri. HasData seed migration'dan ayri tutulur.

Lock ve sure yönetimi

ALTER TABLE ACCESS EXCLUSIVE lock yazar. PostgreSQL ADD COLUMN nullable hızlıdır. SQL Server ONLINE index ve schema change secenekleri kullanılır. Migration suresi olculur; esik asimi onay gerektirir.

CI pipeline entegrasyonu

PR'da migration bos DB ve snapshot'a uygulanir. Başarısız migration merge engellenir. Staging deploy migration'i production oncesi son test sağlar.

Veri migration

Milyon satir update tek transaction'da lock üretir. Chunked update ve key range tercih edilir. Veri migration tamamlanmadan kod switch yapilmaz.

Semantik versioning

Migration adlari anlamli olmali: 20250725_AddCustomerTierIndex. Timestamp prefix cakismayi onler. Squash eski migration'lari birlestirir; yalnizca greenfield veya major release'te.

Ortam parity

Development, staging ve production ayni motor ve major versiyonda olmali. SQLite geliştirme PostgreSQL production farki migration surprizi üretir. Testcontainers production motoru ile test sağlar.

Güvenlik

Migration hesabi DDL yetkisi tasir; uygulama hesabi DML ile sinirli olmalidir. Migration credential CI secret store'da tutulur.

Anti-pattern'ler

  • Production'da manuel hotfix şema
  • Migration'siz entity degisikligi
  • Veri kaybi riski tasiyan DROP COLUMN acelesi
  • Test edilmemis down script

Özet

Migration versiyonlanmis, review edilmis ve otomatik uygulanmis olmali. Expand-contract büyük degisikliklerde standart. Ölçüm, CI ve ortam parity production güvenliğini sağlar.

Zero-downtime şema degisikligi kalıplari

Büyük tabloda kolon ekleme: nullable kolon ekle, backfill job çalıştır, NOT NULL ve default uygula (PostgreSQL 11+ optimize edilmis ADD COLUMN). Kolon rename icin yeni kolon + cift yazim + backfill + eski kolon kaldirma expand-contract dongusu kullanılır. Tablo rename yerine view alias veya synonym geçiş donemi sağlar.

Migration test ve CI

Her migration pull request'te bos veritabanına ve production-benzeri hacimli snapshot'a uygulanir. Up ve down (veya forward-only rollback script) test edilir. Migration suresi olculur; esik degeri asan script production onay gerektirir. Idempotent migration (IF NOT EXISTS) tekrar calistirmaya dayaniklidir.

Veri migration vs şema migration

Veri dönüşümü ayri batch job olabilir; tek transaction icinde milyon satir update lock üretir. Chunked update (LIMIT/OFFSET veya key range) tercih edilir. Veri migration tamamlanmadan uygulama yeni semaya gecmemelidir; feature flag ile kod yolu ayrilir.

Rollback ve felaket senaryolari

Forward-only migration kulturu rollback script'i zorunlu kilmaz ancak acil durum proseduru olmalidir. Yedekten restore penceresi ve RPO/RTO hedefleri migration planina yazilir. Başarısız migration'da otomatik alert ve deploy durdurma pipeline'da tanimlanir.