# Change Data Capture (CDC) ile DDL Trigger Arasındaki Fark — Hangisini Ne Zaman Kullanmalısınız?

SQL Server'da değişiklikleri izlemek için iki farklı yaklaşım sıkça karşılaşılır: Change Data Capture (CDC) ve DDL Trigger. İkisi de "değişiklik takibi" yapıyor gibi görünse de tamamen farklı amaçlara hizmet eder.

* * *

## Temel Fark

DDL Trigger, şema değişikliklerini yakalar. Bir tablo oluşturuldu, bir kolon eklendi, bir stored procedure değiştirildi — bunlar DDL işlemleri.

CDC ise veri değişikliklerini yakalar. Bir satır eklendi, bir değer güncellendi, bir kayıt silindi — bunlar DML işlemleri.

Kısaca:

*   **DDL Trigger:** Yapı değişti mi?
    
*   **CDC:** Veri değişti mi?
    

* * *

## Change Data Capture (CDC) Nedir?

CDC, SQL Server'ın transaction log'unu okuyarak tablolardaki satır bazlı değişiklikleri asenkron olarak yakalar. Bir tabloda CDC aktif edildiğinde, o tabloya yapılan her INSERT, UPDATE ve DELETE işlemi ayrı bir sistem tablosuna yazılır.

sql

```sql
-- CDC'yi veritabanında etkinleştir
EXEC sys.sp_cdc_enable_db

-- Belirli bir tablo için CDC'yi etkinleştir
EXEC sys.sp_cdc_enable_table
    @source_schema = 'dbo',
    @source_name = 'Musteriler',
    @role_name = NULL
```

CDC etkinleştirildikten sonra tablodaki her değişiklik cdc.dbo\_Musteriler\_CT tablosunda tutulur. Eski değer, yeni değer ve işlem zamanı kayıt altına alınır.

* * *

## CDC'nin Güçlü Olduğu Yerler

**Veri geçmişi:** Bir kaydın tüm değişim tarihçesine ulaşmak mümkün. "Bu müşteri kaydı ne zamandan beri bu adreste?" sorusu CDC ile yanıtlanabilir.

**Transaction log tabanlı:** Uygulama katmanına dokunmadan çalışır. Performans etkisi DDL Trigger'a göre çok daha düşük.

**Asenkron:** Değişikliği anında kaydetmek yerine arka planda işler.

* * *

## CDC'nin Yetersiz Kaldığı Yerler

**Şema değişikliklerini izlemez:** Bir tablo ALTER edilirse CDC bunu yakalamaz. DDL Trigger gerekir.

**Yönetim yükü:** CDC aktif olan tablolar için düzenli cleanup job'ları kurulmalı, aksi halde log tabloları şişer.

**Enterprise Edition gereksinimi:** Bazı CDC özellikleri Standard Edition'da sınırlı.

**Onay süreci yok:** CDC de DDL Trigger gibi reaktif çalışır. Değişiklik olmadan önce devreye girmez.

* * *

## İkisini Birlikte Kullanmak

Kapsamlı bir izleme için iki mekanizma birlikte kullanılabilir:

*   Şema değişiklikleri için: DDL Trigger
    
*   Veri değişiklikleri için: CDC
    

Ancak bu kombinasyon bile eksik. İkisi de değişiklik olduktan sonra devreye girer. Onay süreci, risk analizi ve yetkisiz değişiklik bildirimi için ek bir katman gerekir.

* * *

## Hangi Senaryoda Ne Kullanmalı?

Veri geçmişini tutmak ve eski-yeni değerleri karşılaştırmak istiyorsanız CDC doğru seçim. Şema değişikliklerini kayıt altına almak istiyorsanız DDL Trigger. İkisini de yönetmek istemiyorsanız ve onay süreci, bildirim ile compliance raporu da istiyorsanız bu ikisinin üstüne bir değişiklik yönetim platformu kurmak gerekiyor.

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