CDC - Change Data Capture در بانک اطلاعاتی MS SQL Server

با استفاده از CDC یا Change Data Capture برای ضبط تغییرات اطلاعات یک جدول نیازی به تولید Trigger برروی جدول نبوده و هرگونه تغییر شامل Insert، Update و Delete برروی جداولی که این امکان برای آنها فعال شده است را در جدولی متناظر با جدول مورد نظر نگهداری می شود.



فعال سازی CDC


0- Start SQL Agent


1- Enable CDC on Database

EXEC sys.sp_cdc_enable_db


2- Enable CDC on Table

EXEC sys.sp_cdc_enable_table

@source_schema = N'dbo',

@source_name   = N'TableName',

@role_name     = N'RoleName',

@filegroup_name = N'Primary',

@supports_net_changes = 1


غیرفعال سازی CDC برروی بانک اطلاعاتی

به منظور غیرفعال سازی CDC برروی کل بانک اطلاعاتی کافی است تا دستور زیر را اجرا کنید. توجه داشته باشید که در این حالت، تمامی جداولی که تاریخچه تغییرات در آنها نگهداری می شده است از بین خواهند رفت.

EXEC sys.sp_cdc_disable_db


غیرفعال سازی CDC برروی جدول اطلاعاتی

به منظور غیرفعال سازی CDC برروی جدول اطلاعاتی کافی است تا دستور زیر را اجرا کنید. توجه داشته باشید که در این حالت، جدولی که تاریخچه تغییرات جدول مرتبط در آن نگهداری می شده است از بین خواهد رفت.

EXECUTE sys.sp_cdc_disable_table 

    @source_schema = N'dbo', 

    @source_name = N'TableName',

    @capture_instance = N'dbo_TableName';


بازیابی بانک اطلاعاتی

بازیابی بانک های اطلاعاتی که CDC برروی آنها فعال می باشد به روش زیر و با استفاده از کلمه کلیدی keep_cdc انجام می پذیرد. توجه داشته باشید که درصورت استفاده از رابط کاربری در محیط SQL Server این امکان فراهم نبوده و پس از بازگردان اطلاعات، تمامی جداول CDC از بین خواهند رفت.

به خاطر داشته باشید که درصورت استفاده از دستور Attach نیز مشابه موارد زیر باید درنظر گرفته شود.


RESTORE DATABASE [Sample] 

FROM  DISK = N'C:\Backup\sample\Sample.bak' WITH keep_cdc

MOVE N'Sample' TO N'C:\DB\Sample.mdf',  

MOVE N'Sample_log' TO N'C:\DB\Sample_log.ldf' 

GO


USE Sample

GO

EXEC sys.sp_cdc_add_job @job_type = N'capture';

GO

EXEC sys.sp_cdc_add_job @job_type = N'cleanup',@start_job = 0,@retention = 52494800 ;

GO

در آخرین دستور عمر نگهداری اطلاعات در جداول CDC اشاره شده است. در نمونه بالا عمر اطلاعاتی معادل یکسال است (به دقیقه).