نکاتی در خصوص Change Data Capture - CDC در SQL 2012

همانطور که میدانید CDC یکی از ابزارهای مهم بانک اطلاعاتی SQL میباشد.
این ابزار برای دنبال کردن تغییرات رکوردهای جداول بانک اطلاعاتی است.  در صورتی که این ابزار را در بانک اطلاعاتی خود فعال کنید میتوانید از تغییراتی که روی رکوردها اتفاق افتاده است شامل ایجاد، ویرایش، حذف گزارش تهیه کنید و یا برای انتقال صحیح اطلاعات به انبار داده  بهره ببرید.
در این بخش قصد دارم روش فعال سازی این ابزار را بیان کنم.
گام اول، فعال سازی CDC روی بانک اطلاعاتی مورد نظرمان است.
برای اینکار از دستور زیر استفاده میکنیم :
EXEC sys.sp_cdc_enable_db
پس از اجرای این دستور CDC  روی بانک اطلاعاتی ما فعال شده و در بخش SQL Server Agent میتوانید Job  مربوطه را با عنوان  syspolicy_purge_history  مشاهده نمایید.
--------------------------------------------
برای غیر فعال کردن آن هم از دستور 
EXEC sys.sp_cdc_disable_db
استفاده مینماییم.
--------------------------------------------
حالا نوبت به مشخص کردن جداولی است که نیاز داریم تغییرات آنها را ردیابی کنیم.
برای اینکار از دستور زیر استفاده میکنیم:
EXECUTE sys.sp_cdc_enable_table
    @source_schema = N'dbo'
  , @source_name = N'Employee'
  , @role_name = N'cdc_Admin';
GO

EXECUTE sys.sp_cdc_enable_table
    @source_schema = N'dbo'
  , @source_name = N'Employee'
  , @role_name = N'cdc_Admin';
GO

EXECUTE sys.sp_cdc_enable_table    
@source_schema = N'dbo'
 , @source_name = N'YourTableName'
 , @role_name = N'cdc_Admin';
GO

بعد از اجرای این دستور دو Job جدید تعریف میشوند که یکی وظیفه Capture و دیگری وظیفه Cleanup لاگ ها بعد از 3 روز را بر عهده دارد.
قابل ذکر است که شما میتوانید بسته به نیاز خود جاب ها را غیر فعال و یا مدت زمان Cleanup را تغییر دهید.

اگر بعد از غیر فعال کردن این Job  ها قصد فعال سازی مجدد آنها را داشته باشید کافیست دستورات زیر را اجرا نمایید : 
exec sys.sp_cdc_add_job 'capture'
GO
exec sys.sp_cdc_add_job 'cleanup'
GO

تغییر دیگر اینکه در بخش System Tables جدول جدیدی با نام dbo_YourTableName_CT ساخته میشود که از این پس برای ردیابی تغییرات باید به آن سر بزنید!
--------------------------------------------
از موارد دیگر در این خصوص این است که در هنگام Backup ,Restore بانک اطلاعات  نیاز خواهیم داشت که علاوه بر همه اطلاعات بانک اطلاعاتی جداول ساخته شده توسط CDC را نیز انتقال دهیم که اینکار بطور طبیعی توسط SQL انجام نمیشود.
برای این منظور باید از سوئیچ   keep_cdcاستفاده نمایید.

به عنوان مثال اگر قصد Restore کردن روی همان Instance  دستورات زیر را اجرا میکنیم :
Restore Database sqldbpool_1 
from disk = 'l:\sqldbpool.bak' 
with move 'SQLDBPool' to 'L:\SQLDBPool1.mdf',
move 'SQLDBPool_log' to 'F:\SQLDBPool_log1.LDF',keep_cdc

و یا برای Restore کردن روی Instance  متفاوت دستورات زیر را اجرا میکنیم:

restore database sqldbpool from disk = 'l:\sqldbpool.bak' with keep_cdc

--------------------------
موفق باشید


نام نویسنده: سید محمود شجاعی کیاسری |منبع:کتابچه تجربیات معماران عصر دانش