Simptomi
Kada pokrenete ispravku na tabeli koja ima grupisani ili jedinstveni indeks, a ažuriranje se pojavljuje u ne-primarnoj jedinstvenoj koloni, zapis praćenja promena nije u skladu sa izvodom ažuriranja.
Na primer, pretpostavimo da je kolona pod imenom"kolona1" uključena u grupisani ili jedinstveni indeks. Kada se vrednost kolone promeni iz veće u manju vrednost (kao što je promena vrednosti sa 20 na 16), bočna tabela praćenja promena dobija operaciju umetanja pre operacije brisanja. Na primer, operacija umetanja zapisa reda evidencije transakcije se prima pre operacije brisanja reda ili se "I" umeće 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 vrednost (kao što je promena vrednosti sa 16 na 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 |
Uzrok
Do ovog problema dolazi zbog netačnog redosleda između parova za brisanje/umetanje u bočnu tabelu praćenja promena.
Rešenje
Ispravka za ovaj problem je uključena 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 o SQL Server builds
Svaka nova verzija za SQL Server sadrži sve hitne ispravke i bezbednosne ispravke koje su bile u prethodnoj verziji. 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ćeno praćenje promena, kada se ažuriranje dogodi u koloni koja nije primarna, a koja je definisana da bude jedinstvena, dve stavke se umeću u bočnu tabelu praćenja promena: po jedna stavka za svaku razdeljenu radnju, "Umetni i izbriši".
Kada je funkcija CHANGETABLE pozvana da nabroja promene, ove stavke se sortiraju po vrednostima primarnog ključa, a zatim se operacije prikupljaju. Ako ispravka umetne manju vrednost, prvo se u bočnoj tabeli pokrene operacija "I", a zatim sledi operacija "D". Ovo dovodi do toga da se vrati netačna operacija za ovaj red. To je zato što je "I" praćeno sa "D" agregirano kao "D".
Pošto se u bočnim tabelama održavaju samo vrednosti primarnog ključa, nije neophodno da imate dve zasebne stavke. Ovo važi sve dok se kolona primarnog ključa ne ažurira.
Ovaj problem je rešen za ne-primarne jedinstvene kolone. U ovom slučaju, kada dođe do ažuriranja, samo jedan red se umeće tako što se "U" umesto dve stavke imaju "D" i "I".
Reference
Saznajte više o terminologiji koju Microsoft koristi za opisivanje softverskih ispravki.