در مقاله امروز رادکام، به بررسی قابلیت کمتر شناختهشدهای از SQL Server میپردازیم که نگهداری لاگ در اپلیکیشن را
سادهتر میکند.
CDC یا Change Data Capture پس از فعالسازی، هر تغییر صورت گرفته اعم از insert، update یا delete بر جداول منتخب را در
جدولهای مخصوص خود نگهداری میکند.
طرز کار CDC
طرز کار CDC به این صورت است که از لاگ تراکنشها (Transaction) تغذیه میکند. به همین علت بسته به بار پردازشی که بر
دیتابیس و سرور وجود دارد، حداقل تأخیر در حدود 4 یا 5 ثانیه در منعکس کردن این تغییرات در جداول مخصوص CDC مشاهده
میشود.
با اجرای دستور فعالسازی CDC، دو job ایجاد میشود:
-
Capture job: وظیفه جمعآوری اطلاعات را بر عهده دارد.
- این job بعد از اجرای دستور بلافاصله آغاز به کار میکند.
- پیوسته در حال اجراشدن است.
- در هر اجرا نهایتاً 1000 تراکنش انجام میدهد.
- بین هر اجرا 5 ثانیه تأخیر وجود دارد.
-
Clean up job: وظیفه حذف رکوردهای قدیمی را بر عهده دارد.
- هر شب ساعت 2 اجرا میشود.
- بهصورت پیشفرض رکوردهای قدیمیتر از 3 روز را پاک میکند.
- با هر دستور delete در حدود 5000 رکورد را حذف میکند.
نحوه استفاده
پیش از فعال کردن، باید SQL Server Agent در حال اجرا باشد.
قبل از هر چیزی، باید CDC در سطح دیتابیس فعال شود (اگر پیشازاین فعالسازی را انجام نداده باشید). این کار از طریق
Stored Procedure به نام sys.sp_cdc_enable_db انجام میشود:
execute sys.sp_cdc_enable_db
سپس به کمک stored procedure تحت عنوان sys.sp_cdc_enable_table میتوان CDC را برای جداول موردنظر فعال کرد. به این
صورت:
EXECUTE sys.sp_cdc_enable_table
@source_schema = N'SCHEMA_NAME'
, @source_name = N'TABLE_NAME'
, @role_name = N'cdc_Admin';
GO
پس از اجرای این دستور در دیتابیس شما مشابه تصویر زیر در قسمت system tables جداولی با شمای cdc ایجاد میشود.
در قسمت بعدی، به بررسی جداول ایجادشده و نحوه استفاده از آنها میپردازیم.