KB4135113 – OPRAVA: Záznam sledovania zmien je nekonzistentný počas aktualizácie tabuľky, ktorá má skupinový alebo jedinečný index v SQL Server

Vzťahuje sa na
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2014 Service Pack 2 - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Standard on Windows

Príznaky

Keď spustíte aktualizáciu v tabuľke, ktorá má skupinový alebo jedinečný index, a táto aktualizácia sa vykoná v inom než primárnom jedinečnom stĺpci, záznam sledovania zmien je v rozpore s príkazom update.

Predpokladajme napríklad, že stĺpec s názvom Stĺpec1 je zahrnutý do skupinového alebo jedinečného indexu. Po zmene hodnoty stĺpca z vyššej na nižšiu (napríklad po zmene hodnoty z 20 na hodnotu 16) prijme bočná tabuľka sledovania zmien operáciu vloženia pred operáciou odstránenia. Operácia vloženia záznamu riadka denníka transakcií sa napríklad prijme pred operáciou odstránenia riadka alebo pred D sa vloží "I".

Sys_change_version sys_change_create_version sys_change_operation sys_change_column sys_change_context PK_column
1116 19 I NULL NULL 5639485628
1116 20 D NULL NULL 5639485628

Pri zmene hodnoty stĺpca z menšej na vyššiu (napríklad zmena hodnoty z 16 na 20), pred hodnotu I sa vloží D.

Sys_change_version sys_change_create_version sys_change_operation sys_change_column sys_change_context PK_column
1126 32 D NULL NULL 5639485628
1126 33 I NULL NULL 5639485628

Príčina

Tento problém sa vyskytuje z dôvodu nesprávneho zoradenia párov mazať a vložiť v bočnej tabuľke sledovania zmien.

Riešenie

Opravu tohto problému obsahujú nasledujúce aktualizácie pre SQL Server:

Kumulatívna aktualizácia 8 pre SQL Server 2017

Kumulatívna aktualizácia 9 pre balík Service Pack 1 pre SQL Server 2016

Kumulatívna aktualizácia 12 pre SQL Server 2014 SP2

Informácie o zostavách SQL Server

Každá nová zostava SQL Server obsahuje všetky rýchle opravy a opravy zabezpečenia, ktoré boli súčasťou predchádzajúcej zostavy. Odporúčame vám nainštalovať najnovšiu zostavu pre SQL Server:

Najnovšia kumulatívna aktualizácia pre SQL Server 2017

najnovšia zostava pre SQL Server 2016

Najnovšia kumulatívna aktualizácia pre SQL Server 2014

Stav

Spoločnosť Microsoft potvrdila, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v časti Vzťahuje sa na.

Ďalšie informácie

V tabuľke so zapnutým sledovaním zmien sa po aktualizácii neprimárneho stĺpca, ktorý je definovaný ako jedinečný, do bočnej tabuľky sledovania zmien vložia dve položky: Jedna položka pre každú akciu rozdelenia, Vložiť a Odstrániť.

Pri volaní funkcie CHANGETABLE na vymenovanie zmien sa tieto položky zoradia podľa hodnôt primárneho kľúča a potom sa operácie zoskupia. Ak aktualizácia vloží nižšiu hodnotu, najskôr sa na bočnom stole spustí operácia I, po ktorej nasleduje operácia D. Tento krok spôsobí vrátenie nesprávnej operácie pre daný riadok. Je to preto, že "ja" nasledujúce "D" sa zhrnú ako "D".

Keďže bočné tabuľky uchovávajú iba hodnoty hlavného kľúča, nie je potrebné mať dve samostatné položky. Toto platí, pokiaľ nie je stĺpec primárneho kľúča aktualizovaný.

Tento problém je opravený pre neprimárne jedinečné stĺpce. V tomto prípade sa pri aktualizácii vloží iba jeden riadok s aktualizačnou operáciou "U" namiesto dvoch položiek, ktoré obsahujú D a I.

Odkazy

Získajte informácie o terminológii , ktorú Microsoft používa na popis aktualizácií softvéru.