Sümptomid
Kui käivitate värskenduse tabelis, mis sisaldab kobardatud või kordumatut indeksit ja värskendus leiab aset mitte-primaarses kordumatus veerus, on muutuste jälituse kirje värskenduslausega vastuolus.
Oletagem näiteks, et klasterdatud või kordumatusse indeksisse kaasatakse veerg nimega "veerg1". Kui veeru väärtus muudetakse suuremalt väärtuselt väiksemaks (nt väärtuse 20-lt 16-le muutmisel), saab muutuste jälituse külgtabel lisamistoimingu enne kustutustoimingut. Näiteks tehingulogisse reakirje lisamise toiming on vastu võetud enne rea kustutamise toimingut või "I" sisestatakse enne sõna "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 |
Kui veeru väärtus muudetakse väiksemast suuremaks (nt väärtuse 16-lt 20-le muutmisel), lisatakse sõna "I" ette tekst "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 |
Põhjus
See probleem ilmneb muutuste jälituse külgtabelis asuvate kustutus- või lisamispaaride vale järjestuse tõttu.
Lahendus
Selle probleemi lahendus on kaasatud järgmistesse SQL Server värskendustesse.
koondvärskendus 8 SQL Server 2017 jaoks
SQL Server 2016 hoolduspaketi Service Pack 1 koondvärskendus 9
SQL Server 2014 SP2 koondvärskendus 12
Teave SQL Server järkude kohta
Iga uus järk SQL Server sisaldab kõiki eelmise järgu kiirparandusi ja turbeparandusi. Soovitame teil installida SQL Server uusima versiooni.
Uusim koondvärskendus SQL Server 2017 jaoks
Uusim koondvärskendus SQL Server 2014 jaoks
Olek
Microsoft on kinnitanud, et see on jaotises „Rakenduskoht“ loetletud Microsofti toodete korral esinev probleem.
Lisateave
Muutuste jälituse funktsiooniga tabeli puhul, kui värskendamine toimub mitte-primaarveerul, mis on määratletud kordumatuks, lisatakse muutuste jälituse külgtabelisse kaks kirjet: üks kirje iga tükeldatud toimingu kohta ( Lisa ja Kustuta).
Kui funktsiooni CHANGETABLE kutsutakse muudatusi nummerdama, sorditakse need kirjed primaarvõtme väärtuste järgi ja seejärel liidetakse toimingud. Kui värskendus lisab väiksema väärtuse, käivitatakse esmalt külgtabelis toiming "I", millele järgneb toiming D. See põhjustab selle rea jaoks vale toimingu tagastamise. Seda seetõttu, et "I" järel "D" koondatakse "D"-na.
Kuna külgtabelites säilitatakse ainult primaarvõtme väärtusi, pole vaja kahte eraldi kirjet. See kehtib seni, kuni primaarvõtme veergu ei värskendata.
See probleem on lahendatud mitte-primaarsete kordumatute veergude puhul. Sel juhul lisatakse värskenduse toimumisel ainult üks rida, kui kahe D- ja I-ga kirje asemel on värskendustoiminguks "U".
Viited
Siit leiate teavet microsofti tarkvaravärskenduste terminoloogia kohta.