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 .