Jelenségek
Ha fürtözött vagy egyedi indexet tartalmazó táblán futtat frissítést, és a frissítés nem elsődleges egyedi oszlopban történik, a változáskövetési rekord inkonzisztens a frissítési utasítással.
Tegyük fel például, hogy egy "column1" nevű oszlop szerepel a fürtözött vagy egyedi indexben. Ha az oszlop értékét nagyobbról kisebbre módosítja (például 20-ról 16-ra módosítja), a változáskövetési oldaltábla a törlési művelet előtt megkapja a beszúrási műveletet. A tranzakciónapló sorbeszúrási rekordjának művelete például a sortörlési művelet előtt, vagy az "I" beszúrása a "D" elé történik.
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 |
Ha az oszlop értéke kisebbről nagyobb értékre változik (például az érték 16-ról 20-ra változik), a "D" szó az "I" elé kerül.
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 |
A probléma oka
Ez a probléma a törlési/beszúrási párok közötti helytelen sorrend miatt fordul elő a változáskövetési oldaltáblában.
Megoldás
A probléma megoldását a SQL Server következő frissítései tartalmazzák:
8. összegző frissítés SQL Server 2017-hez
9. összegző frissítés a SQL Server 2016 Service Pack 1 csomaghoz
A SQL Server buildek ismertetése
A SQL Server minden új buildje tartalmazza az előző buildben található összes gyorsjavítást és biztonsági javítást. Javasoljuk, hogy telepítse az SQL Server legújabb buildét:
A SQL Server 2017 legújabb összegző frissítése
Állapot
A Microsoft megerősítette, hogy ez a probléma „A következőkre vonatkozik:” részben felsorolt Microsoft-termékekre vonatkozik.
További információ
Változáskövetést engedélyező tábla esetén, ha egy nem elsődleges oszlopon történik frissítés, amely egyediként van definiálva, két bejegyzés lesz beszúrva a változáskövetési oldaltáblába: minden felosztási művelethez egy bejegyzést, beszúrást és törlést.
Amikor meghívja a CHANGETABLE függvényt a módosítások számbavételére, a rendszer ezeket a bejegyzéseket elsődleges kulcsértékek szerint rendezi, majd összesíti a műveleteket. Ha a frissítés kisebb értéket szúr be, először az oldaltáblán futtat egy "I" műveletet, majd egy "D" műveletet. Ez helytelen műveletet eredményez ehhez a sorhoz. Ennek az az oka, hogy az "I" és a "D" után a "D" aggregátumként van összesítve.
Mivel az oldaltáblákban csak az elsődleges kulcsértékek maradnak meg, nem szükséges két külön bejegyzést tartalmaznia. 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éskor csak egy sor lesz beszúrva úgy, hogy az "U" frissítési műveletként van beszúrva két "D" és "I" bejegyzés helyett.
Hivatkozások
Ismerje meg a Microsoft által a szoftverfrissítések leírására használt terminológiát .