Pazīmes
Palaižot atjauninājumu tabulai, kurai ir sagrupēts vai unikāls indekss, un atjaunināšana tiek veikta kolonnā, kas nav primārā unikālā kolonna, izmaiņu reģistrēšanas ieraksts ir nesaderīgs ar atjauninājuma priekšrakstu.
Piemēram, pieņemsim, ka kolonna ar nosaukumu "kolonna1" ir iekļauta sagrupētajā vai unikālajā indeksā. 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 izsekošanas sānu tabulā pirms dzēšanas operācijas tiek saņemta ievietošanas darbība. Piemēram, transakciju žurnāla rindas ieraksta ievietošanas operācija tiek saņemta pirms rindas dzēšanas operācijas vai "I" tiek ievietots pirms "D".
| 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 |
Ja kolonnas vērtība tiek mainīta no mazākas uz lielāku (piemēram, mainot vērtību no 16 uz 20), pirms "I" tiek ievietots "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 |
Iemesls
Šī problēma rodas nepareizas secības dēļ starp dzēšanas/ievietošanas pāriem izmaiņu izsekošanas sānu tabulā.
Risinājums
Šīs problēmas labojums ir iekļauts šādos SQL Server atjauninājumos:
SQL Server 2017 8. kumulatīvais atjauninājums
9. kumulatīvais atjauninājums SQL Server 2016 1. servisa pakotnei
SQL Server 2014 SP2 12. kumulatīvais atjauninājums
Par SQL Server būvējumiem
Katrā jaunajā SQL Server būvējumā ir visi labojumfaili un drošības labojumi, kas bija iepriekšējā būvējumā. Ieteicams instalēt jaunāko SQL Server būvējumu:
Jaunākais kumulatīvais atjauninājums SQL Server 2017
Jaunākais SQL Server 2016 būvējums
Jaunākais kumulatīvais atjauninājums SQL Server 2014
Statuss
Microsoft apstiprināja, ka šī ir problēma Microsoft produktos, kas norādīti sadaļā "attiecas uz".
Papildinformācija
Izmaiņu reģistrēšanas tabulai, kad atjauninājums notiek neprimārajā kolonnā, kas ir definēta kā unikāla, izmaiņu reģistrēšanas sānu tabulā tiek ievietoti divi ieraksti: viens ieraksts katrai sadalītajai darbībai, Ievietot un Dzēst.
Kad izmaiņu uzskaitīšanai tiek izsaukta funkcija CHANGETABLE , šie ieraksti tiek kārtoti pēc primārās atslēgas vērtībām, un pēc tam operācijas tiek apkopotas. Ja atjauninājums ievieto mazāku vērtību, vispirms sānu tabulā tiek palaista operācija "I", pēc tam darbība "D". Tādējādi šai rindai tiek atgriezta nepareiza darbība. Tas ir tāpēc, ka "I", kam seko "D", tiek apkopots kā "D".
Tā kā sānu tabulās tiek uzturētas tikai primārās atslēgas vērtības, nav nepieciešami divi atsevišķi ieraksti. Tas ir patiess, kamēr primārās atslēgas kolonna nav atjaunināta.
Šī problēma ir novērsta unikālajām kolonnām, kas nav primārās. Šajā gadījumā, veicot atjaunināšanu, tiek ievietota tikai viena rinda ar "U" kā atjaunināšanas darbību, nevis diviem ierakstiem, kuriem ir "D" un "I".
Atsauces
Uzziniet par terminoloģiju , ko Microsoft izmanto, lai aprakstītu programmatūras atjauninājumus.