Bölüm 6: Şema Karşılaştırma ve Senkronizasyon
Bilgi: Bu bölüm; iki veritabanı arasındaki şema farklılıklarını bulmayı, bunları görsel olarak görüntülemeyi ve senkronizasyon sırasında devreye giren policy güdümlü yedekleme/rollback güvenlik mekanizmalarını açıklar.
Bu bölümde:
6.1 Şema Farklılıklarını Bulma
Geliştirme ve production veritabanları zaman içinde birbirinden ayrışır (Schema Drift). SQLOZ iki veritabanı arasındaki farkları tespit eder ve senkronizasyon sürecini güvenli hale getirir.
- Üst menüden Araçlar → Şemaları Karşılaştır… seçeneğini açın.
- Kaynak: Referans veritabanı (örn.
local_dev). - Hedef: Güncellenecek veritabanı (örn.
production_db). - Karşılaştır’a basın.
6.2 Görsel Diff Matrisi
Farklılıklar renk kodlu bir matris olarak gösterilir.
| Renk | Anlamı | Üretilen işlem |
|---|---|---|
| 🟢 Yeşil | Kaynakta var, hedefte yok | CREATE TABLE / ADD COLUMN |
| 🟡 Sarı | Her ikisinde de var ama farklı tür/index | ALTER TABLE |
| 🔴 Kırmızı | Kaynakta silindi ama hedefte hâlâ var | DROP |
Örnek:
KAYNAK (local_dev) | HEDEF (prod_db) | UYGULANABİLİR EYLEM
payments | ❌ (yok) | ➕ CREATE TABLE payments
users.phone_verified (BOOLEAN) | users.phone_verified (TINYINT) | 🔄 MODIFY COLUMN
6.3 Güvenlik Mekanizmaları
Senkronizasyonu Uygula’ya bastığınızda SQLOZ, yürütmeden önce değişiklik riskini ve yapılandırılmış policy’yi değerlendirir. Aşağıdaki korumalar, ön koşulları karşılandığında devreye girer.
- Otomatik veri yedekleme (
_sqloz_bak_...): Bu seçenek yalnızca MySQL/MariaDB hedefleri için mevcuttur. Pencere, onay kutusunu varsayılan olarak etkinleştirir. Yıkıcı DDL işlemleri (DROP TABLE,DROP COLUMN,MODIFY COLUMN) çalışmadan önce, etkilenen hedef tabloların verileri canlı sunucuda üretilmiş zaman damgalı tablo adı altında yedeklenir. PostgreSQL veya SQLite hedeflerinde otomatik tablo yedekleme ve yedek tabanlı rollback verisi desteklenmez; Otomatik Yedekleme etkinken yürütme ve betik dışa aktarma eylemleri açıklayıcı bir durumla devre dışı kalır:CREATE TABLE IF NOT EXISTS `_sqloz_bak_<üretilmiş-zaman-damgası>_users` AS SELECT * FROM `users`; - Rollback ve veri kurtarma betiği (MySQL/MariaDB): Otomatik yedekleme gerçekten tamamlandığında SQLOZ, geri döndürülebilir şema değişiklikleri için çalıştırılabilir rollback SQL üretir. Aynı dosya, şema geri yüklendikten sonra doğrulanmış yedek tablodan satırları manuel olarak kopyalamak için yorumlanmış bir veri geri yükleme tarifi içerebilir; dosya çalıştırıldığında bu satırları otomatik olarak geri yüklemez. PostgreSQL/SQLite için otomatik yedek varlığını ima eden bir geri yükleme tarifi üretmez:
-- INSERT IGNORE INTO `users` SELECT * FROM `_sqloz_bak_<üretilmiş-zaman-damgası>_users`; - Yıkıcı silme koruması: Hedefte bir tablo/sütun silinmesi gerekiyorsa silme komutu, kullanıcı onaylamadan canlı sunucuya gönderilmez.
Önemli:
_sqloz_bak_...yedekleme seçeneğinin kapatılması, o yedekleme güvencesini ortadan kaldırır. Yıkıcı işlemler hâlâ açık onay gerektirir, ancak önce bağımsız bir yedek almanız ve doğrulamanız gerekir.
Uyarı: PostgreSQL veya SQLite’a şema değişiklikleri uygulamadan önce kendi doğrulanmış yedeğinizi alın. SQLOZ bu veritabanı aileleri için otomatik güvenlik yedeği oluşturmaz; penceredeki devre dışı durum bu kısıtlamayı açıklar.
