با استفاده از 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 اشاره شده است. در نمونه بالا عمر اطلاعاتی معادل یکسال است (به دقیقه).