Change Data Capture (CDC) : ردیابی تغییرات داده ها در پایگاه داده
Change Data Capture (CDC) یک فرآیند نرم افزاری است که به شناسایی و ردیابی تغییرات در دادههای پایگاه داده میپردازد. با CDC، دادهها بهطور پیوسته و در زمان واقعی یا نزدیک به آن پردازش و منتقل میشوند. این ویژگی در محیطهای داده با سرعت بالا که تصمیمگیریهای حساس به زمان ضروری است، نقش کلیدی ایفا میکند. CDC با ارائه تکرار دادههای کمتاخیر، قابلاعتماد و مقیاسپذیر، ابزاری ایدهآل برای مهاجرتهای بدون توقف به ابر نیز محسوب میشود.
با توجه به اینکه بیش از 80 درصد شرکتها تا سال 2025 به دنبال اجرای استراتژیهای چند ابری هستند، انتخاب یک روش مناسب برای ثبت تغییرات داده ها بیش از هر زمان دیگری اهمیت دارد تا تکثیر داده ها در محیط های متعدد بهصورت بهینه انجام شود.
در SQL Server، ویژگی Change Data Capture (CDC) به شما این امکان را میدهد که تغییرات اعمال شده بر جداول را به دقت ردیابی کنید. این ویژگی اطلاعاتی دقیق درباره اینکه چه تغییراتی، در کجا و چه زمانی رخ دادهاند، در اختیار شما قرار میدهد. بهجای ذخیره سازی پیچیده و ناخوانا در قالب XML، CDC تغییرات را در قالب جداول ساده رابطه ای ثبت میکند. این جداول تغییر، ستون هایی را شامل میشوند که ساختار ستون های جدول اصلی و ابردادههای مرتبط با تغییرات را منعکس میکنند. این روش، تحلیل و مدیریت تغییرات دادهها را به مراتب سادهتر و کارآمدتر میسازد.
CDC در SQL Server : ردیابی و ذخیره تغییرات دیتا
در بسیاری از پروژهها، یکی از الزامات اصلی این است که قبل از هرگونه تغییر در دادههای یک پایگاه داده، نسخهای از دادهها ذخیره و بایگانی شود. به بیان دیگر، لازم است که تمامی تغییرات دادهها بهصورت تاریخی ثبت شوند. این قابلیت معمولاً به دلایل امنیتی و برای حفظ یکپارچگی دادهها پیادهسازی میشود. روشهای مختلفی برای اجرای این نیاز وجود دارد؛ از استفاده از تریگرها و تایماستمپها گرفته تا اجرای پرسوجوهای پیچیده و ممیزی دادهها. SQL Server در نسخه های جدید خود ویژگی هایی مانند تریگرهای «پس از بهروزرسانی»، «پس از درج» و «پس از حذف» را معرفی کرد که به نوعی مشکل ردیابی تغییرات دادهها را حل کردهاند. اما راهحل بهتری نیز تحت عنوان Change Data Capture (CDC) معرفی شد که به توسعهدهندگان SQL Server اجازه میدهد تا بهسادگی دادههای تغییریافته را بدون نیاز به کدنویسی اضافی ذخیره و مدیریت کنند. CDC یک ویژگی پیشرفته در SQL Server است که بهطور خاص تغییرات جداول ایجاد شده توسط کاربر را ردیابی میکند. این داده های ثبت شده سپس در جداول رابطه ای ذخیره میشوند و میتوان به راحتی با استفاده از T-SQL استاندارد به آن ها دسترسی پیدا کرد و آن ها را بازیابی کرد.
زمانی که ویژگی CDC بر روی یک جدول پایگاه داده اعمال میشود، یک جدول آینهای با همان ساختار ستونهای جدول اصلی ایجاد میشود، اما با ستونهای اضافی که شامل ابردادههای لازم برای توضیح تغییرات است. این جدول جدید به مدیر پایگاه داده (DBA) امکان میدهد تا بهسادگی فعالیتهای ثبتشده در جدول را نظارت و کنترل کند.
راهنمای فعال سازی Change Data Capture در SQL Server و مدیریت جداول مرتبط
برای فعال کردن Change Data Capture (CDC) در یک پایگاه داده، ابتدا باید این ویژگی را در سطح پایگاه داده فعال کنید. از آنجایی که CDC به صورت خاص بر روی جداول اعمال میشود، لازم است که برای هر جدول نیز به صورت جداگانه فعال شود. برای بررسی اینکه آیا CDC در یک پایگاه داده فعال است یا خیر، میتوانید از کوئری زیر استفاده کنید:
USE master
GO
SELECT [name], database_id, is_cdc_enabled
FROM sys.databases
GO
این کوئری نام پایگاه دادهها را همراه با ستونی که نشان میدهد CDC برای آنها فعال است یا خیر، برمیگرداند. اگر بخواهید CDC را برای یک پایگاه داده خاص فعال کنید، میتوانید از رویه ذخیرهشده زیر استفاده کنید. برای مثال، اسکریپت زیر CDC را برای پایگاه داده AdventureWorks فعال میکند :
USE AdventureWorks GO EXEC sys.sp_cdc_enable_db GO
پس از اجرای این اسکریپت، پیام Command Completed Successfully نمایش داده میشود که نشان دهنده فعال شدن CDC است. همچنین، در پایگاه داده AdventureWorks یک اسکیما به نام cdc ایجاد میشود که شامل جداول سیستمی مرتبط با CDC است.
این جداول شامل موارد زیر میشوند :
- cdc.captured_columns : فهرستی از ستونهای ردیابیشده را برمیگرداند.
- cdc.change_tables : لیستی از تمام جداولی که CDC برای آنها فعال شده را نشان میدهد.
- cdc.ddl_history : تاریخچه تغییرات DDL از زمان فعالسازی CDC را ذخیره میکند.
- cdc.index_columns : حاوی اطلاعات مربوط به ایندکسهای مرتبط با جداول تغییرات است.
- cdc.lsn_time_mapping : شمارههای LSN را به زمان مربوطه نگاشت میکند.
پیاده سازی CDC در یک بازه زمانی خاص
برای بازیابی دادههای ثبتشده در یک بازه زمانی خاص در SQL Server با استفاده از ویژگی Change Data Capture (CDC)، باید بتوانید زمان دقیق تغییرات را با استفاده از شمارههای توالی (LSN) مرتبط کنید. هر LSN بهطور منحصربهفردی یک رکورد را در گزارش تراکنش شناسایی میکند و این اعداد همواره در حال افزایش هستند.
در CDC، شمارههای LSN به زمان مربوط میشوند و این ارتباط را میتوان با جستجو در جدول سیستمی cdc.lsn_time_mapping پیدا کرد. این جدول یکی از جداولی است که هنگام فعال شدن CDC در پایگاه داده ایجاد میشود. با این حال، برای استخراج تغییرات رخ داده در یک بازه زمانی خاص، میتوان از تابع سیستمی sys.fn_cdc_map_time_to_lsn استفاده کرد.
برای مثال، فرض کنید میخواهید تمامی تغییراتی که دیروز رخ دادهاند را بازیابی کنید. ابتدا باید زمان شروع و پایان بازه موردنظر را مشخص کرده و سپس LSNهای مرتبط با آن زمانها را با استفاده از تابع fn_cdc_map_time_to_lsn به دست آورید. پس از تعیین LSNها، میتوانید با استفاده از یک تابع مقداردهیشده جدولی (TVF) که توسط CDC ایجاد شده است، تغییرات را بازیابی کنید.
در اینجا یک نمونه از کوئری SQL برای بازیابی تغییرات دیروز در جدول HumanResources_Shift آمده است :
USE AdventureWorks
GO
DECLARE @begin_time DATETIME, @end_time DATETIME;
DECLARE @begin_lsn BINARY(10), @end_lsn BINARY(10);
SET @begin_time = GETDATE() – 1;
SET @end_time = GETDATE();
SET @begin_lsn = sys.fn_cdc_map_time_to_lsn(‘smallest greater than’, @begin_time);
SET @end_lsn = sys.fn_cdc_map_time_to_lsn(‘largest less than or equal’, @end_time);
SELECT *
FROM cdc.fn_cdc_get_all_changes_FactSales(@begin_lsn, @end_lsn, ‘all’)
GO
این کد تغییرات رخ داده در جدول FactSales طی دیروز را بازیابی میکند. با استفاده از این روش، میتوانید تغییرات داده ها را در هر بازه زمانی دلخواه شناسایی و بررسی کنید.
جمع بندی
در این مقاله، به مفهوم Change Data Capture (CDC) و چگونگی پیادهسازی آن در SQL Server پرداختیم. CDC ابزاری قدرتمند برای ردیابی و ثبت تغییرات در جداول پایگاه داده است که امکان بازیابی دادهها در بازههای زمانی خاص را بهصورت دقیق و کارآمد فراهم میکند. با استفاده از CDC، توسعهدهندگان میتوانند بدون نیاز به کدنویسی پیچیده، تغییرات دادهها را مدیریت کرده و تحلیلهای زمانی دقیقتری انجام دهند. این قابلیت بهویژه در محیطهای حساس به زمان و با نیازهای دادهای پویا، ارزشمند است. امیدواریم این راهنما به شما در پیادهسازی CDC و بهبود مدیریت دیتا کمک کرده باشد.