Skip to main content

Command Palette

Search for a command to run...

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

Updated
2 min readView as Markdown
S

I’m a passionate software engineer specializing in SQL change management, database security, and DevOps automation. With over 17 years of experience in the banking sector, I focus on building tools and processes that make database deployments safer, more auditable, and automated.

As the creator of SQL Change Guard, I develop solutions that use risk scoring and AI-powered code analysis to detect dangerous SQL scripts before they reach production. I’m dedicated to helping teams minimize downtime and data loss through smarter change governance.

When I’m not coding, I enjoy sharing insights about secure development practices, WPF desktop applications, and integrating modern CI/CD pipelines.

Feel free to connect or reach out at info@sqlchangeguard.com

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

-- 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

More from this blog

S

SQL Change Guard

81 posts