Simptome
Kada pokrenete ispravku na tabeli koja ima grupisani ili jedinstveni indeks i dođe do ažuriranja u jedinstvenoj koloni koja nije primarna, zapis za praćenje promena nije dosledan izrazu ažuriranja.
Na primer, pretpostavimo da je kolona koja se zove "kolona1" uključena u grupisani ili jedinstveni indeks. Kada se vrednost kolone promeni sa veće na manju vrednost (kao što je promena vrednosti sa 20 na 16), bočna tabela za praćenje promena prima operaciju umetanja pre operacije brisanja. Na primer, operacija umetanja zapisa reda u evidenciji transakcija primljena je pre operacije brisanja reda ili je umetnuto "I" pre "D".
Sys_change_version |
sys_change_create_version |
sys_change_operation |
sys_change_column |
sys_change_context |
PK_column |
1116 |
19 |
Sam |
NULL |
NULL |
5639485628 |
1116 |
20 |
D |
NULL |
NULL |
5639485628 |
Kada se vrednost kolone promeni iz manje u veću (na primer, promena vrednosti iz 16 u 20), "D" se umeće pre "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 |
Sam |
NULL |
NULL |
5639485628 |
Izazvati
Do ovog problema dolazi zbog neispravnog rasporeda između parova za brisanje/umetanje u bočnoj tabeli za praćenje promena.
Rezoluciju
Rešenje ovog problema je uključeno u sledeće ispravke za SQL Server:
Kumulativna ispravka 8 za SQL Server 2017.
Kumulativna ispravka 9 za SQL Server 2016 servisni paket 1
Osnovni podaci SQL Server verzijama
Svako novo izdanje za SQL Server sadrži sve hitne ispravke i bezbednosne ispravke koje su bile u prethodnom izdanju. Preporučujemo da instalirate najnoviju verziju za SQL Server:
Najnovija kumulativna ispravka za SQL Server 2017.
Status
Microsoft je potvrdio da je ovo problem u Microsoft proizvodima koji su navedeni u odeljku "Odnosi se na".
Više informacija
Za tabelu omogućenu za praćenje promena, kada dođe do ažuriranja u koloni koja nije primarna, koja je definisana da bude jedinstvena, u bočnu tabelu za praćenje promena umeću se dva unosa: Po jedna stavka za svaku razdeljenu radnju, Umetanje i Brisanje.
Kada se za nabrajanje promena poziva funkcija CHANGETABLE , te stavke se sortiraju po vrednostima primarnog ključa, a zatim se operacije skupljaju. Ako ispravka umetne manju vrednost, prvo se pokreće operacija "I" na bočnoj tabeli, a zatim na operaciju "D". To dovodi do neispravne operacije za ovaj red. To je zato što se znak "I" koji prati "D" agregira kao "D".
Pošto se samo vrednosti primarnog ključa održavaju u bočne tabele, nije neophodno da imate dve zasebne stavke. To važi ako se kolona primarnog ključa ne ažurira.
Ovaj problem je popravljen za kolone koje nisu primarne. U ovom slučaju, kada dođe do ažuriranja, umeće se samo jedan red tako što se "U" umeće kao operacija ažuriranja umesto dva unosa koje imaju "D" i "I".
Reference
Saznajte više o terminologiji koju Microsoft koristi za opis softverskih ispravki.