KB4135113 - תיקון: רשומת מעקב אחר שינויים אינה עקבית במהלך עדכון בטבלה הכוללת אינדקס מקובץ באשכולות או אינדקס ייחודי SQL Server

חל על
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

סימפטומים

בעת הפעלת עדכון בטבלה הכוללת אינדקס מקובץ באשכולות או ייחודי, והעדכון מתרחש בעמודה ייחודית שאינה ראשית, רשומת המעקב אחר שינויים אינה תואמת במשפט העדכון.

לדוגמה, נניח שעמודה בשם "column1" כלולה באינדקס המקובץ באשכולות או באינדקס הייחודי. כאשר ערך העמודה משתנה מערך גדול יותר לערך קטן יותר (כגון שינוי הערך מ- 20 ל- 16), הטבלה הצדית למעקב אחר שינויים מקבלת את פעולת ההוספה לפני פעולת המחיקה. לדוגמה, פעולת רשומת השורה של הוספת יומן הטרנזקציות מתקבלת לפני פעולת מחיקת השורה, או ש- "I" נוסף לפני "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

כאשר ערך העמודה משתנה מערך קטן יותר לערך גדול יותר (כגון שינוי הערך מ- 16 ל- 20), "D" נוסף לפני "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 I NULL NULL 5639485628

גורם

בעיה זו מתרחשת עקב סדר שגוי בין זוגות מחיקה/הוספה בטבלה הצדדית למעקב אחר שינויים.

פתרון

התיקון לבעיה זו נכלל בעדכונים הבאים עבור SQL Server:

עדכון מצטבר 8 עבור SQL Server 2017

עדכון מצטבר 9 עבור SQL Server 2016 Service Pack 1

עדכון מצטבר 12 עבור SQL Server 2014 SP2

אודות SQL Server Build

כל גירסת Build חדשה SQL Server מכילה את כל תיקוני האבטחה והתיקונים החמים שהיו בגירסת ה- Build הקודמת. מומלץ להתקין את גירסת ה- Build העדכנית ביותר עבור SQL Server:

העדכון המצטבר האחרון עבור SQL Server 2017

גירסת ה- Build האחרונה עבור SQL Server 2016

העדכון המצטבר האחרון עבור SQL Server 2014

מצב

Microsoft אישרה שזוהי בעיה במוצרי Microsoft המפורטים בסעיף "חל על".

מידע נוסף

עבור טבלה זמינה למעקב אחר שינויים, כאשר עדכון מתרחש בעמודה שאינה ראשית המוגדרת כייחודית, נוספים שני ערכים לטבלה הצדדית למעקב אחר שינויים: ערך אחד עבור כל אחת מהפעולות המפוצלות, הוספה ומחיקה.

כאשר מתבצעת קריאה לפונקציה CHANGETABLE כדי לספור את השינויים, ערכים אלה ממוינות לפי ערכי מפתח ראשי ולאחר מכן הפעולות נצברות. אם העדכון מוסיף ערך נמוך יותר, פעולת "I" מופעלת תחילה בטבלה הצדדית ואחריה פעולת "D". פעולה זו גורמת לחזרה של פעולה שגויה עבור שורה זו. זאת משום ש- "I" אחרי "D" נצבר כ- "D".

מאחר שרק ערכי המפתח הראשי נשמרים בטבלאות הצדדיות, אין צורך בשני ערכים נפרדים. הדבר נכון כל עוד עמודת המפתח הראשי אינה מתעדכנת.

בעיה זו נפתרה עבור עמודות ייחודיות שאינן ראשיות. במקרה זה, כאשר העדכון מתרחש, תתווסף שורה אחת בלבד על-ידי הוספת "U" לפעולת עדכון במקום שני ערכים עם "D" ו- "I".

חומרי עזר

למד על המינוח שבו Microsoft משתמשת לתיאור עדכוני תוכנה.