Simptomi
Palaižot atjauninājumu tabulā, kurā ir sagrupēti vai unikāli indeksi un atjauninājums tiek lietots neprimārā unikālā kolonnā, izmaiņu reģistrēšanas ieraksts neatbilst priekšrakstam Update.
Piemēram, pieņemsim, ka sagrupētā vai unikālā indeksā ir iekļauta kolonna, kuras nosaukums ir "Kolonna1" . Ja kolonnas vērtība tiek mainīta no lielākas uz mazāku vērtību (piemēram, mainot vērtību no 20 uz 16), izmaiņu reģistrēšanas tabulā tiek saņemta ievietošanas darbība, kas atrodas pirms dzēšanas operācijas. Piemēram, darbību žurnāls rindas ieraksta ievietošana tiek saņemta pirms rindas dzēšanas operācijas vai "I", kas tiek ievietota pirms "D".
Sys_change_version |
sys_change_create_version |
sys_change_operation |
sys_change_column |
sys_change_context |
PK_column |
1116 |
19 |
Var |
NULL |
NULL |
5639485628 |
1116 |
20 |
D |
NULL |
NULL |
5639485628 |
Ja kolonnas vērtība tiek mainīta no mazākā līdz lielākajai vērtībai (piemēram, mainot vērtību no 16 līdz 20), tiek ievietots "D", pirms "I".
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 |
Var |
NULL |
NULL |
5639485628 |
Cēlonis
Šī problēma rodas tāpēc, ka ir nepareizi pasūtījumi starp dzēšanas/ievietošanas pāriem tabulā izmaiņu reģistrēšana.
Risinājums
Šīs problēmas labojums ir iekļauts šādos SQL Server atjauninājumos:
Kumulatīvais atjauninājums 8 SQL Server 2017
Kumulatīvais atjauninājums 9 SQL Server 2016 1. servisa pakotnei
Par SQL Server būvējumiem
Katrā jaunajā SQL Server būvējumā ir ietverti visi labojumfaili un drošības labojumi, kas bija iepriekšējā būvējumā. Ieteicams instalēt jaunāko būvējumu SQL Server:
Jaunākais SQL Server 2017 kumulatīvais atjauninājums
Statusa
Microsoft ir apstiprinājusi, ka šī problēma pastāv Microsoft produktos, kas ir norādīti sadaļā "attiecas uz".
Papildinformācija
Izmaiņu reģistrēšanas iespējotās tabulas gadījumā, kad atjaunināšana notiek neprimārajā kolonnā, kas ir definēta kā unikāla, tiek ievietoti divi ieraksti tabulā izmaiņu reģistrēšanas puses: viens ieraksts katram no sadalītajām darbībām, ievietošana un dzēšana.
Kad tiek izsaukta funkcija CHANGETABLE , lai uzskaitītu izmaiņas, šīs ievadnes tiek kārtotas pēc primārās atslēgas vērtībām, un pēc tam darbības tiek summētas. Ja atjauninājumā tiek ievietota zemāka vērtība, vispirms tabulā tiek palaista operācija "I", kam seko "D" operācija. Tādējādi šajā rindā tiek atgriezta nepareiza operācija. Tas ir tāpēc, ka "I" un "D" tiek apkopoti kā "D".
Tā kā puses tabulās ir saglabātas tikai primārās atslēgas vērtības, nav nepieciešamas divas atsevišķas ievadnes. Tas ir patiess, kamēr primārās atslēgas kolonna netiek atjaunināta.
Šī problēma ir novērsta neprimārajām unikālām kolonnām. Šajā gadījumā, kad tiek veikts atjauninājums, tiek ievietota tikai viena rinda, ja "U" ir norādīts kā atjaunināšanas operācija, nevis divi ieraksti ar "D" un "I".
Atsauces
Uzziniet par terminoloģiju , ko Microsoft izmanto, lai aprakstītu programmatūras atjauninājumus.