Recent Posts

Archives

Categories

Meta

Change Tracking

A Change Tracking (CT) technika egy kiváló eszköz a módosulások nyilvántartására és utólagos feldolgozására. Ezáltal egy egyszerű replikációt, interfész kapcsolatot vagy akár logolást tudunk megvalósítani, ráadásul a struktúra módosítások (triggerek, oszlopok, tároltak stb..) nélkül. Az Sql Server nem a log-ot használja a módosulások kezelésére, ezt a CDC kezeli így. Szinkron módon valósul meg a változások kezelése.

-- CT engedélyezés
ALTER DATABASE SIS_SW SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON)
GO
-- CT bekapcsolása
ALTER TABLE TPERSON ENABLE CHANGE_TRACKING
GO

--módosítások
insert into person (prs_id,prs_typecode,prs_statecode,prs_name) values (-2,'E','a','Person1_INS')
insert into person (prs_id,prs_typecode,prs_statecode,prs_name) values (-3,'E','a','Person_2_INS')
update person set prs_employeeid='Person_2_UPD' where prs_id=-2
delete person where prs_id=-2

--változások lekérdezése (@min_valid_version paraméterben az utolsó feldolgozott max. verziószám)
DECLARE @min_valid_version bigint, @last_sync_version bigint;
SET @min_valid_version = 2
SELECT e.prs_Name ,c.[prs_ID],
c.SYS_CHANGE_VERSION, c.SYS_CHANGE_OPERATION,
c.SYS_CHANGE_COLUMNS, c.SYS_CHANGE_CONTEXT,
CHANGE_TRACKING_IS_COLUMN_IN_MASK(COLUMNPROPERTY(OBJECT_ID('tperson'), 'prs_name', 'ColumnId'),SYS_CHANGE_COLUMNS) IsModifyPrsName,
CHANGE_TRACKING_IS_COLUMN_IN_MASK(COLUMNPROPERTY(OBJECT_ID('tperson'), 'prs_employeeid', 'ColumnId'),SYS_CHANGE_COLUMNS) IsModifyPrsemployeeid
FROM CHANGETABLE (CHANGES tperson, @min_valid_version) AS c
LEFT OUTER JOIN tperson AS e ON e.[prs_ID] = c.[prs_ID]


Eredmény:

ct
Az összes beállított táblához közös verziószámot rendel, amit minden módosításkor növel. A verziószámok lekérdezéséhez függvényeket kapunk. Az utolsó szinkronizáció verzióját nekünk kell tárolni.

Bővebben a CT-ről az alábbi linken olvashatunk:

https://technet.microsoft.com/en-us/library/cc280358(v=sql.105).aspx

Az előnyökről és a hátrányokról egy jó cikk az alábbi linken:

https://www.mssqltips.com/sqlservertip/4035/sql-server-change-tracking-performance-troubleshooting/?utm_source=dailynewsletter&utm_medium=email&utm_content=headline&utm_campaign=20150929

Leave a Reply