KB4135113 - FIX: muutuste jälituskirje on värskendamisel, mis sisaldab klasterdatud või kordumatut indeksit SQL Server

Rakenduskoht
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2014 Service Pack 2 - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Standard on Windows

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

SQL Server 2016 uusim järk

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.