همگامسازی Change Tracking برای جداول در SQL Server
همگامسازی Change Tracking در SQL Server روشی سبک و سریع برای شناسایی رکوردهای تغییر یافته و انتقال دادهها است.
همگامسازی Change Tracking برای جداول در SQL Server
در بسیاری از سیستمهای نرمافزاری، نیاز است که تغییرات دادهها بهصورت مداوم بین پایگاه داده اصلی و سایر سیستمها همگامسازی شوند.
این موضوع در نرمافزارهای سازمانی، برنامههای موبایل، سیستمهای توزیعشده و محیطهایی که چندین پایگاه داده با یکدیگر در ارتباط هستند، اهمیت ویژهای دارد.
یکی از قابلیتهای کاربردی SQL Server برای مدیریت این نیاز، Change Tracking است.
این ویژگی امکان شناسایی رکوردهای تغییر یافته را با حداقل سربار فراهم میکند و به توسعهدهندگان کمک میکند تا فرآیند همگامسازی دادهها را بهصورت ساده و بهینه پیادهسازی کنند.![]()
Change Tracking چیست؟
Change Tracking قابلیتی در SQL Server است که اطلاعات مربوط به تغییرات اعمالشده روی دادههای جداول را ذخیره میکند.
برخلاف برخی فناوریهای دیگر مانند Change Data Capture (CDC)، این ویژگی جزئیات کامل تغییرات را نگهداری نمیکند، بلکه فقط مشخص میکند که کدام رکوردها از زمان مشخصی تغییر کردهاند.
به عبارت دیگر، Change Tracking برای پاسخ به این سؤال طراحی شده است:
"چه رکوردهایی از آخرین همگامسازی تغییر کردهاند؟"
این ویژگی برای سناریوهایی مناسب است که تنها به دانستن شناسه رکوردهای تغییر یافته نیاز داریم و نیازی به مشاهده مقدار قبلی یا جزئیات کامل تغییرات نداریم.
مزایای استفاده از Change Tracking در SQL Server
استفاده از Change Tracking مزایای متعددی دارد که آن را به گزینهای مناسب برای همگامسازی دادهها تبدیل میکند:
-
سربار کم روی پایگاه داده
این قابلیت نسبت به CDC یا Triggerها منابع بسیار کمتری مصرف میکند و تأثیر ناچیزی بر عملکرد سیستم دارد. -
راهاندازی ساده
فعالسازی Change Tracking تنها با چند دستور SQL انجام میشود و نیازی به ایجاد جداول اضافی یا کدنویسی پیچیده ندارد. -
مناسب برای همگامسازی
برنامههای کلاینت میتوانند تنها دادههای تغییر یافته را دریافت کنند و از انتقال مجدد کل اطلاعات جلوگیری شود. -
پشتیبانی از عملیات CRUD
این ویژگی تغییرات ناشی از: -
-
Insert
-
Update
-
Delete
-
را شناسایی میکند.
-
کاهش ترافیک شبکه
تنها رکوردهای تغییر یافته بین سرور و کلاینت منتقل میشوند که باعث بهبود سرعت و کاهش مصرف پهنای باند میشود.
فعالسازی Change Tracking در پایگاه داده
ابتدا باید Change Tracking را در سطح پایگاه داده فعال کنیم.
ALTER DATABASE SalesDB
SET CHANGE_TRACKING = ON
(
CHANGE_RETENTION = 5 DAYS,
AUTO_CLEANUP = ON
);
در این دستور:
- CHANGE_RETENTION مدت نگهداری اطلاعات تغییرات را مشخص میکند.
- AUTO_CLEANUP باعث حذف خودکار اطلاعات قدیمی میشود.
فعالسازی Change Tracking برای جدول در SQL
پس از فعالسازی در سطح دیتابیس، باید آن را برای جداول موردنظر نیز فعال کنیم.
فرض کنید جدول زیر را داریم:
CREATE TABLE Customers
(
CustomerID INT PRIMARY KEY,
FirstName NVARCHAR(50),
LastName NVARCHAR(50),
City NVARCHAR(50)
);
فعالسازی Change Tracking
ALTER TABLE Customers
ENABLE CHANGE_TRACKING
WITH (TRACK_COLUMNS_UPDATED = ON);
گزینه TRACK_COLUMNS_UPDATED مشخص میکند که اطلاعات ستونهای تغییر یافته نیز ذخیره شود.
مشاهده نسخه فعلی تغییرات
SQL Server برای هر تغییر یک نسخه داخلی ایجاد میکند.
برای مشاهده آخرین نسخه:
SELECT CHANGE_TRACKING_CURRENT_VERSION();
خروجی:
1250
این عدد نشاندهنده آخرین نسخه ثبتشده در سیستم Change Tracking است.
🌟 آیا میخواهید به یک متخصص پایگاه داده تبدیل شوید و در دنیای فناوری اطلاعات بدرخشید؟
با دوره آموزشی SQL Server ما، شما میتوانید به راحتی و با روشی عملی، تمام مهارتهای لازم را یاد بگیرید!
این دوره به شما آموزش میدهد که چگونه دادهها را به بهترین شکل مدیریت کنید، گزارشهای قدرتمند بسازید و به تحلیلهای عمیق دست یابید.
با محتوای جذاب و پروژههای واقعی، شما نه تنها تئوری را یاد میگیرید، بلکه تواناییهای عملی خود را نیز تقویت میکنید.
پس فرصت را از دست ندهید! همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده شغلی روشنتر بردارید!
⇐همین حالا شروع کنید و به دنیای دادهها بپیوندید!
ثبت دادههای نمونه
ابتدا چند رکورد وارد میکنیم:
INSERT INTO Customers
VALUES
(1,'Ali','Ahmadi','Tehran'),
(2,'Sara','Moradi','Mashhad');
سپس نسخه فعلی را ذخیره میکنیم:
DECLARE @Version BIGINT;
SET @Version =
CHANGE_TRACKING_CURRENT_VERSION();
ایجاد تغییر در دادهها در SQL Server
اکنون برخی تغییرات اعمال میکنیم.
ویرایش رکورد:
UPDATE Customers
SET City = 'Tabriz'
WHERE CustomerID = 1;
افزودن رکورد جدید:
INSERT INTO Customers
VALUES
(3,'Reza','Karimi','Shiraz');
حذف رکورد:
DELETE FROM Customers
WHERE CustomerID = 2;
دریافت رکوردهای تغییر یافته در SQL
برای مشاهده تغییرات از تابع CHANGETABLE استفاده میشود.
SELECT *
FROM CHANGETABLE
(
CHANGES Customers,
@Version
) AS CT;
نمونه خروجی:
CustomerID SYS_CHANGE_VERSION SYS_CHANGE_OPERATION
1 1251 U
2 1252 D
3 1253 I
معانی عملیات:
I = Insert
U = Update
D = Delete
دریافت اطلاعات کامل رکوردها در SQL
معمولاً علاوه بر شناسه رکورد، به اطلاعات کامل آن نیز نیاز داریم.
SELECT
C.CustomerID,
C.FirstName,
C.LastName,
C.City,
CT.SYS_CHANGE_OPERATION
FROM CHANGETABLE
(
CHANGES Customers,
@Version
) CT
LEFT JOIN Customers C
ON C.CustomerID = CT.CustomerID;
در این حالت دادههای واقعی جدول نیز نمایش داده میشوند.
بررسی ستونهای تغییر یافته در SQL Server
اگر گزینه TRACK_COLUMNS_UPDATED فعال باشد میتوان ستونهای تغییر یافته را بررسی کرد.
SELECT
SYS_CHANGE_COLUMNS
FROM CHANGETABLE
(
CHANGES Customers,
@Version
) CT;
این مقدار به صورت باینری ذخیره میشود و مشخص میکند کدام ستونها تغییر کردهاند.
برای بررسی یک ستون خاص:
SELECT
CHANGE_TRACKING_IS_COLUMN_IN_MASK
(
COLUMNPROPERTY
(
OBJECT_ID('Customers'),
'City',
'ColumnId'
),
SYS_CHANGE_COLUMNS
)
FROM CHANGETABLE
(
CHANGES Customers,
@Version
) CT;
خروجی:
1
به این معنا که ستون City تغییر کرده است.
فرآیند همگامسازی دادهها در SQL Server
یک سناریوی معمول همگامسازی به شکل زیر است:
مرحله اول
کلاینت آخرین نسخه دریافتشده را ذخیره میکند.
مثلاً:
Version = 1200
مرحله دوم
کاربر تغییراتی در پایگاه داده اعمال میکند.
مرحله سوم
کلاینت درخواست تغییرات جدید را ارسال میکند.
SELECT *
FROM CHANGETABLE
(
CHANGES Customers,
1200
);
مرحله چهارم
فقط رکوردهای تغییر یافته ارسال میشوند.
مرحله پنجم
کلاینت نسخه جدید را ذخیره میکند.
SELECT CHANGE_TRACKING_CURRENT_VERSION();
اعتبارسنجی نسخهها
گاهی ممکن است نسخه ذخیرهشده در کلاینت بسیار قدیمی باشد و اطلاعات آن از سیستم حذف شده باشد.
برای بررسی اعتبار نسخه:
SELECT
CHANGE_TRACKING_MIN_VALID_VERSION
(
OBJECT_ID('Customers')
);
نمونه خروجی:
1100
اگر نسخه کلاینت کمتر از این مقدار باشد:
Version = 1000
باید همگامسازی کامل انجام شود زیرا اطلاعات تغییرات قبلی دیگر در دسترس نیست.
غیرفعالسازی Change Tracking در SQL Server
در صورت نیاز میتوان آن را برای جدول غیرفعال کرد:
ALTER TABLE Customers
DISABLE CHANGE_TRACKING;
و برای کل پایگاه داده:
ALTER DATABASE SalesDB
SET CHANGE_TRACKING = OFF;
تفاوت Change Tracking و Change Data Capture
| ویژگی | CDC | Change Tracking |
| مصرف منابع | کم | بیشتر |
| ذخیره جزئیات تغییرات | خیر | بله |
| ذخیره مقدار قبل و بعد | خیر | بله |
| مناسب برای Sync | بله | بله |
| مناسب برای Audit | خیر | بله |
| پیادهسازی | ساده | پیچیدهتر |
در نتیجه اگر تنها هدف شما همگامسازی دادهها باشد، Change Tracking انتخاب بهتری است. اما اگر نیاز به تاریخچه کامل تغییرات داشته باشید، CDC گزینه مناسبتری خواهد بود.
بهترین شیوه همگامسازی Change Tracking در SQL
-
دوره نگهداری مناسب انتخاب کنید
مقدار CHANGE_RETENTION باید متناسب با فاصله زمانی همگامسازی کلاینتها تنظیم شود. -
از Primary Key استفاده کنید
Change Tracking برای شناسایی رکوردها به کلید اصلی وابسته است. -
همواره نسخهها را ذخیره کنید
پس از هر همگامسازی موفق، شماره نسخه جدید باید در سیستم کلاینت ذخیره شود. -
اعتبار نسخه را بررسی کنید
قبل از اجرای همگامسازی، مقدار CHANGE_TRACKING_MIN_VALID_VERSION را کنترل کنید. -
از ایندکسهای مناسب استفاده کنید
وجود ایندکس مناسب روی کلیدهای اصلی باعث بهبود عملکرد عملیات همگامسازی میشود.
جمعبندی
Change Tracking یکی از قابلیتهای ارزشمند SQL Server برای شناسایی تغییرات دادهها و پیادهسازی فرآیندهای همگامسازی است.
این ویژگی با مصرف حداقل منابع، امکان تشخیص رکوردهای درجشده، ویرایششده و حذفشده را فراهم میکند و گزینهای ایدهآل برای برنامههای توزیعشده، نرمافزارهای موبایل و سیستمهای چندلایه محسوب میشود.
با استفاده از توابعی مانند CHANGETABLE، CHANGE_TRACKING_CURRENT_VERSION و CHANGE_TRACKING_MIN_VALID_VERSION میتوان مکانیزمهای همگامسازی سریع، قابل اعتماد و مقیاسپذیر را در SQL Server پیادهسازی کرد و از انتقال غیرضروری دادهها جلوگیری نمود.

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