# Veritabanı Değişikliklerinde Çakışma Yönetimi: İki Geliştirici Aynı Nesneyi Değiştirdiğinde

İki geliştirici aynı stored procedure'ü aynı anda değiştiriyor. Biri önce production'a attı. Diğeri arkasından attı. Birincinin değişikliği ezildi. Kimsenin haberi yok.

Bu senaryo her gün yaşanıyor.

* * *

## Çakışma Nasıl Oluyor?

Versiyon kontrolü olmayan ya da değişiklik yönetimi olmayan ortamlarda çakışma kaçınılmaz.

Geliştirici A sabah stored procedure'ü indirdi, değiştirdi. Geliştirici B öğlen aynı procedure'ü indirdi, farklı bir şey değiştirdi. Geliştirici A öğleden sonra production'a attı. Geliştirici B akşam production'a attı. A'nın değişikliği kayboldu.

Her ikisi de "deployment yaptım, tamam" diye düşünüyor. Ama production'da olan B'nin son hali.

* * *

## Çakışmanın Sonuçları

**Sessiz kayıp:** A'nın değişikliği silinmez, ezilir. Hata mesajı yok. Sadece A'nın yaptığı iş yok oldu.

**Geç fark edilme:** Çakışma saatler, bazen günler sonra fark edilir. O ana kadar problem yaratmış olabilir.

**Kimin doğru olduğu bilinmez:** İki versiyondan hangisi doğru? Hangisi önce gitti? Kayıt yoksa bilinmez.

* * *

## Çakışmayı Önleme Yöntemleri

**Check-out mekanizması**

Bir nesne üzerinde çalışılmaya başlandığında sistem bunu işaretler. Başka biri aynı nesneyi almaya çalışırsa "bu nesne şu an kullanımda" uyarısı alır.

**Versiyon karşılaştırması**

Deployment öncesinde production'daki mevcut versiyon ile yeni versiyon karşılaştırılır. Eğer production'daki versiyon son indirilen versiyondan farklıysa çakışma var demektir.

sql

```sql
-- Production'daki stored procedure'ün son değişiklik tarihini kontrol et
SELECT
    name AS ProcedureAdi,
    modify_date AS SonDegisiklikTarihi
FROM sys.procedures
WHERE name = 'HedefProcedure';
```

Deployment öncesinde bu tarihi not alın. Eğer son indirme tarihinizden sonraki bir tarihe işaret ediyorsa biri değiştirmiş, çakışma riski var.

**Deployment kilidi**

Bir deployment başladığında o nesneye başka deployment engellenir. Birincisi tamamlanana kadar ikincisi bekler.

* * *

## Çakışma Yaşandığında Ne Yapılmalı?

İki versiyonun farkı analiz edilmeli, her iki değişiklik de anlaşılmalı ve birleştirilmiş bir versiyon oluşturulmalı. Bu süreç hem A hem B'nin katılımıyla yapılmalı.

Çakışma kayıt altına alınmalı. Neden oldu, nasıl çözüldü, tekrarlanmaması için ne yapılabilir?

* * *

## Sonuç

Çakışma yönetimi değişiklik yönetiminin göz ardı edilen boyutlarından biri. Check-out mekanizması ve versiyon karşılaştırması bu sorunu büyük ölçüde ortadan kaldırır.

Detaylı bilgi için: [sqlchangeguard.com](http://sqlchangeguard.com)
