ویژگی Change Tracking در SQL Server
ویژگی Change Tracking در SQL Server برای ردیابی تغییرات دادهها (Insert, Update, Delete) بهصورت سبک استفاده میشود.
ویژگی Change Tracking در SQL Server
hange Tracking در SQL Server یک ویژگی سبک و کاربردی است که از نسخه SQL Server 2008 معرفی شده و برای ردیابی تغییرات دادهها (Insert, Update, Delete) در جدولها استفاده میشود.
این قابلیت فقط مشخص میکند چه رکوردهایی تغییر کردهاند و نوع تغییر چه بوده، اما برخلاف CDC (Change Data Capture) جزئیات کامل دادههای قبل و بعد از تغییر را ذخیره نمیکند، به همین دلیل بسیار کمحجمتر و سریعتر است.
این ویژگی معمولاً در سناریوهایی مثل اپلیکیشنهای موبایل، سیستمهای آفلاین/آنلاین، و همگامسازی دادهها (Data Sync) استفاده میشود.
در Change Tracking، SQL Server یک نسخه (Version) برای هر تغییر نگه میدارد و به توسعهدهنده اجازه میدهد فقط تغییرات جدید نسبت به آخرین Sync را دریافت کند، نه کل دادهها را.
در عمل، ابتدا این قابلیت در سطح دیتابیس و جدول فعال میشود و سپس اپلیکیشن میتواند با استفاده از تابع ()CHANGETABLE فقط تغییرات رخداده از یک نسخه مشخص را دریافت کند.
این کار باعث کاهش شدید حجم داده منتقلشده و افزایش سرعت در سیستمهای بزرگ میشود.
مثلاً یک اپ موبایل فروشگاهی بهجای دریافت تمام محصولات، فقط محصولاتی که اضافه، حذف یا ویرایش شدهاند را دریافت کرده و دیتابیس محلی خود را بهروزرسانی میکند.
از مزایای مهم Change Tracking میتوان به سادگی پیادهسازی، مصرف کم منابع و مناسب بودن برای Sync سبک اشاره کرد.
البته محدودیت آن این است که جزئیات مقدار قبلی دادهها را ذخیره نمیکند و اگر مدت زیادی Sync انجام نشود، ممکن است اطلاعات تغییرات از بین برود و نیاز به Sync کامل (Full Sync) باشد.
معرفی Change Tracking در SQL Server
Change Tracking یک ویژگی سبک (Lightweight) در SQL Server است که از نسخه SQL Server 2008 معرفی شد.
هدف اصلی آن این است که مشخص کند:
-
کدام ردیفها در یک جدول تغییر کردهاند
-
نوع تغییر چه بوده (Insert، Update، Delete)
-
بدون ذخیره نسخه کامل دادهها
برخلاف Change Data Capture (CDC) که اطلاعات کامل قبل و بعد از تغییر را ذخیره میکند، Change Tracking فقط “ردیابی تغییر” انجام میدهد و داده کامل را نگه نمیدارد.
همین موضوع باعث میشود بسیار سبکتر و کمهزینهتر باشد.
🌟 آیا میخواهید به یک متخصص پایگاه داده تبدیل شوید و در دنیای فناوری اطلاعات بدرخشید؟
با دوره آموزشی SQL Server ما، شما میتوانید به راحتی و با روشی عملی، تمام مهارتهای لازم را یاد بگیرید!
این دوره به شما آموزش میدهد که چگونه دادهها را به بهترین شکل مدیریت کنید، گزارشهای قدرتمند بسازید و به تحلیلهای عمیق دست یابید.
با محتوای جذاب و پروژههای واقعی، شما نه تنها تئوری را یاد میگیرید، بلکه تواناییهای عملی خود را نیز تقویت میکنید.
پس فرصت را از دست ندهید! همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده شغلی روشنتر بردارید!
⇐همین حالا شروع کنید و به دنیای دادهها بپیوندید!
فعالسازی Change Tracking در SQL Server
برای استفاده از این قابلیت باید در دو سطح فعال شود:
1. در سطح دیتابیس
ابتدا باید روی کل دیتابیس فعال شود:
ALTER DATABASE MyDatabase
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);
توضیح پارامترها:
- CHANGE_RETENTION: مدت زمانی که تغییرات نگهداری میشوند (مثلاً 2 روز)
- AUTO_CLEANUP: پاکسازی خودکار دادههای قدیمی تغییرات
2. در سطح جدول
بعد از فعالسازی دیتابیس، باید روی جدول مورد نظر نیز فعال شود:
ALTER TABLE Customers
ENABLE CHANGE_TRACKING
WITH (TRACK_COLUMNS_UPDATED = ON);
توضیح
TRACK_COLUMNS_UPDATED: مشخص میکند چه ستونهایی تغییر کردهاند (اختیاری ولی مفید)
نحوه عملکرد Change Tracking
زمانی که این قابلیت فعال است، SQL Server یک سیستم داخلی ایجاد میکند که:
-
هر تغییر (INSERT / UPDATE / DELETE) را ثبت میکند
-
یک نسخه عددی به نام SYS_CHANGE_VERSION به هر تغییر اختصاص میدهد
-
اطلاعات را در جداول سیستمی نگه میدارد
مهمترین ستونهای سیستمی:
- SYS_CHANGE_VERSION → شماره نسخه تغییر
- SYS_CHANGE_OPERATION → نوع عملیات (I, U, D)
- SYS_CHANGE_COLUMNS → ستونهای تغییر کرده (در صورت فعال بودن)
مثال عملی استفاده از Change Tracking در SQL Server
فرض کنید جدولی داریم:
Customers(CustomerID, Name, City)
بعد از فعالسازی Change Tracking، برای گرفتن تغییرات از یک نسخه خاص:
SELECT *
FROM CHANGETABLE(CHANGES Customers, @last_sync_version) AS CT;
توضیح:
@last_sync_version آخرین نسخهای است که سیستم شما سینک کرده
این کوئری فقط تغییرات جدید را برمیگرداند
کاربردهای Change Tracking در SQL Server
1. همگامسازی داده (Data Synchronization)
یکی از مهمترین کاربردها:
- اپلیکیشن موبایل
- سیستمهای offline/online
- سرویسهای distributed
مثلاً موبایل فقط تغییرات جدید را دریافت میکند نه کل دیتابیس.
2. کاهش بار سرور
به جای اجرای کوئریهای سنگین:
SELECT * FROM Customers
میتوان فقط تغییرات را گرفت و مصرف منابع را کاهش داد.
3. ETL سبک (Extract Transform Load)
در Data Warehouseها:
- فقط تغییرات منتقل میشوند
- سرعت پردازش بالا میرود
4. سیستمهای کش (Cache Systems)
برای اینکه cache فقط دادههای تغییر یافته را آپدیت کند.
تفاوت Change Tracking و Change Data Capture (CDC)
| ویژگی | CDC | Change Tracking |
| حجم داده | کم | زیاد |
| نگهداری داده قبلی | ندارد | دارد |
| پیچیدگی | ساده | پیچیدهتر |
| کارایی | بالا | متوسط |
| مصرف فضا | کم | زیاد |
نتیجه:
اگر فقط “بدانیم چه چیزی تغییر کرده” → Change Tracking
اگر “جزئیات کامل تغییرات لازم باشد” → CDC
مزایا Change Tracking در SQL Server
1. سبک و سریع
چون فقط metadata ذخیره میکند، فشار کمی به سیستم وارد میکند.
2. پیادهسازی ساده
با چند دستور SQL فعال میشود.
3. مناسب برای سینک داده
در اپلیکیشنهای مدرن بسیار کاربردی است.
4. بدون نیاز به تریگر
برخلاف روشهای قدیمی، نیازی به Trigger نیست.
محدودیتها Change Tracking در SQL Server
1. عدم ذخیره مقدار قبلی
نمیداند قبل از تغییر چه مقداری بوده.
2. محدودیت زمانی (Retention)
اگر دادهها دیر sync شوند، ممکن است اطلاعات تغییر از بین برود.
3. وابستگی به version
اگر نسخه sync گم شود، باید full reload انجام شود.
سناریوی واقعی استفاده Change Tracking در SQL Server
فرض کنید یک اپ فروشگاهی دارید:
- کاربران سفارش ثبت میکنند
- اپ موبایل باید وضعیت سفارش را آپدیت کند
بدون Change Tracking:
باید هر بار کل جدول سفارشها خوانده شود ❌
با Change Tracking:
فقط سفارشهای تغییر کرده ارسال میشود ✅
نکات مهم عملکردی Change Tracking در SQL Server
- همیشه RETENTION مناسب تنظیم کنید
- Sync باید مرتب انجام شود
- برای سیستمهای بزرگ، ترکیب با CDC یا replication بهتر است
- ایندکسها روی جدول اصلی همچنان مهم هستند
📱 پروژه: اپ فروشگاه موبایل
🎯 هدف
موبایل فقط تغییرات جدید محصولات را بگیرد، نه کل دیتابیس.
🧱 سمت SQL Server
فعالسازی:
ALTER DATABASE ShopDB
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);
ALTER TABLE Products
ENABLE CHANGE_TRACKING;
📲 سناریو موبایل
1. اولین بار (Full Sync)
SELECT * FROM Products;
موبایل ذخیره میکند:
LastVersion = 100
2. دفعات بعد (Sync سبک)
SELECT *
FROM CHANGETABLE(CHANGES Products, 100) AS CT;
📊 خروجی:
| Operation | ProductID |
| 5 | U |
| 8 | D |
| 12 | I |
📦 آپدیت موبایل
- U → update محصول
- D → حذف محصول
- I → اضافه محصول
✅ نتیجه
- به جای 10,000 رکورد فقط 3 تغییر میگیری
- سرعت بالا
- مصرف اینترنت کم
جمعبندی
Change Tracking در SQL Server یک ابزار سبک، سریع و کاربردی برای ردیابی تغییرات دادهها بدون ذخیره تاریخچه کامل است.
این ویژگی برای سناریوهای مدرن مثل اپلیکیشنهای موبایل، سیستمهای توزیعشده و ETL بسیار ارزشمند است.
اگر هدف فقط فهمیدن این باشد که چه رکوردهایی تغییر کردهاند، این قابلیت یکی از بهترین انتخابهاست.
اما اگر نیاز به تحلیل دقیق تغییرات (قبل و بعد) باشد، باید از CDC استفاده شود.

کاربران ما
شما هم نظرتون با ما دریاره “ویژگی Change Tracking در SQL Server” اشتراک بزارید
برای ارسال نظر لطفا ورود یا ثبت نام کنید