Bir önceki yazımızda, SQL Server 2008 ile gelen Auditing ile loglama mantığını anlatmıştık. Bu yazımızda, diğer bir loglama özelliği olan CDC (Change Data Capture)’den bahsedeceğiz. CDC özelliği ile row bazında yapılan tüm işlemler tarihsel bilgilerle saklanabilmektedir. Yani hangi kayıtlar üzerinde hangi tarihler arasında ne gibi işlemler yapıldığı raporlanabilir. Tüm CDC işlemleri T-SQL komutları ile yapılır.
1. Database seviyesinde CDC nin açılması
Exec sys.sp_cdc_enable_db
2. İstenilen tablo için CDC nin aktif hale getirilmesi
EXEC sp_cdc_enable_table 'dbo', 'TBLILCE', @role_name = NULL, @supports_net_changes =1
Tablo için CDC aktif hale getirilince, tablo yapısıyla aynı olan ve ilave olarak 5 tane sahanın eklendiği yeni bir tablo yaratılır. Tüm DML işlemlerinde (Insert, update, delete) buraya yeni bir kayıt atılır. Yeni açılan tablonun isimlendirmesi şu şekildedir.
cdc.dbo_<TABLOADI>_CT
Örnek: TBLILCE tablosu için cdc.dbo_TBLILCE_CT
3. Hangi tablolar için CDC nin aktif olduğunun izlenmesi
SELECT * FROM sys.tables where is_tracked_by_cdc=1
4. CDC tablosundan hangi işlemlerin yapıldığının izlenmesi
$start_lsn | $end_lsn | $seqval | $operation | $Mask | KOD | AD |
0x0001C9C400009E570005 | NULL | 0x0001C9C400009E570002 | 2 | 0x03 | 4 | d |
0x0001C9C400009E610005 | NULL | 0x0001C9C400009E610002 | 2 | 0x03 | 5 | e |
0x0001C9C400009E660005 | NULL | 0x0001C9C400009E660002 | 2 | 0x03 | 6 | f |
0x0001C9C400009E680006 | NULL | 0x0001C9C400009E680002 | 3 | 0x02 | 6 | f |
0x0001C9C400009E680006 | NULL | 0x0001C9C400009E680002 | 4 | 0x02 | 6 | fffff |
0x0001C9C500001C770005 | NULL | 0x0001C9C500001C770002 | 2 | 0x03 | 7 | gggg |
0x0001C9C500001C7E0006 | NULL | 0x0001C9C500001C7E0004 | 1 | 0x03 | 6 | fffff |
0x0001C9C500001C830006 | NULL | 0x0001C9C500001C830002 | 3 | 0x02 | 5 | e |
0x0001C9C500001C830006 | NULL | 0x0001C9C500001C830002 | 4 | 0x02 | 5 | eee |
Listede gelen ilk 5 kolon CDC sistemi tarafından otomatik olarak eklenir. Sonraki kolonlar ise ilgili tablonun kolonlarıdır. $stat_lsn ve $end_lsn parametreleri ile değişiklikleri sorgularken LSN (Log Sequence Number) aralığına göre sorgulanabilir. $operation kolonu şu değerleri alabilir :
- 1 = delete
- 2 = insert
- 3 = update (Update öncesi)
- 4 = update (Update Sonrası).
Seçkin KARABACAKOĞLU, Serap PARLAK, Deniz KILINÇ
Yorumlar
Yorum Gönder