KB4135113 – JAVÍTÁS: A változások nyomon követése nem következetes a fürtözött vagy egyedi indexű táblák frissítése során SQL Server

Hatókör
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

Tünetek

Ha frissítést futtat egy fürtözött vagy egyedi indexű táblán, és a frissítés egy nem elsődleges egyedi oszlopon történik, a változáskövetési rekord nem konzisztens a frissítési utasítással.

Tegyük fel például, hogy egy "Oszlop1" nevű oszlop szerepel a csoportosított vagy egyedi indexben. Amikor az oszlop értékét nagyobbról kisebbre módosítja (például az értéket 20-ról 16-ra módosítja), a változások követését végző oldali tábla kapja meg a beszúrási műveletet a törlési művelet előtt. Például a tranzakciónapló sorbeszúrási művelete a sor törlése előtt érkezik meg, vagy az "I" a "D" elé kerül.

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

Ha az oszlop értékét kisebbről nagyobbra módosítja (például 16-ról 20-ra módosítja), a program a "D" értéket szúrja be az "I" elé.

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 K NULL NULL 5639485628

Ok

A hibát a változások követési oldalán lévő törlési/beszúrási párok közötti helytelen sorrend okozta.

Megoldás

A probléma javítását az SQL Server következő frissítései tartalmazzák:

8. összegző frissítés az SQL Server 2017-hez

9-es összegző frissítés az SQL Server 2016 Service Pack 1-hez

12-es összegző frissítés az SQL Server 2014 SP2-höz

Tudnivalók az SQL Server-buildekről

Az SQL Server minden új buildje tartalmazza az összes olyan gyorsjavítást és biztonsági javítást, amely az előző buildben szerepelt. Javasoljuk, hogy telepítse az SQL Server legújabb buildjét:

Az SQL Server 2017 legújabb összegző frissítése

Az SQL Server 2016 legújabb buildje

Az SQL Server 2014 legújabb összegző frissítése

Állapot

A Microsoft megerősítette, hogy ez egy olyan probléma a Microsoft-termékekben, amely az „Érintett szolgáltatás“ című szakaszban van felsorolva.

További információ

Ha a változások követésére jogosult tábla egyediként definiált nem elsődleges oszlopán frissítés történik, a rendszer két bejegyzést szúr be a változáskövetési oldali táblába: egy-egy bejegyzést minden egyes felosztási művelethez, a Beszúrást és a Törlést.

Amikor a CHANGETABLE függvényt meghívja a változások számbavételéhez, a bejegyzéseket az alkalmazás elsődleges kulcsértékek szerint rendezi, majd összesíti a műveleteket. Ha a frissítés alacsonyabb értéket szúr be, a rendszer először az oldalsó táblán futtat egy "I" műveletet, majd egy "D" műveletet. Ennek következtében a program helytelen műveletet ad vissza ehhez a sorhoz. Ennek az az oka, hogy a "D" után következett "I" elem "D"-ként van összesítve.

Mivel a kiegészítő táblákban csak az elsődlegeskulcs-értékek maradnak, nincs szükség két külön bejegyzésre. Ez mindaddig igaz, amíg az elsődleges kulcs oszlopa nem frissül.

Ez a probléma ki lett javítva a nem elsődleges egyedi oszlopok esetében. Ebben az esetben a frissítés végrehajtásakor a rendszer csak egy sort szúr be "U" értékkel frissítési műveletként a "D" és "I" értékű bejegyzés helyett.

Hivatkozások

Ismerje meg a Microsoft szoftverfrissítésekkel kapcsolatos terminológiáját .