תופעות
בעת הפעלת עדכון בטבלה הכוללת אינדקס מקובץ באשכולות או ייחודי, והעדכון מתרחש בעמודה ייחודית שאינה ראשית, רשומת המעקב אחר שינויים אינה תואמת במשפט העדכון.
לדוגמה, נניח שעמודה בשם "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 |
אני |
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 |
אני |
NULL |
NULL |
5639485628 |
סיבה
בעיה זו מתרחשת עקב סדר שגוי בין זוגות מחיקה/הוספה בטבלה הצדדית למעקב אחר שינויים.
פתרון
התיקון לבעיה זו נכלל בעדכונים הבאים עבור SQL Server:
עדכון מצטבר 8 עבור SQL Server 2017
עדכון מצטבר 9 עבור SQL Server 2016 Service Pack 1
אודות SQL Server Build
כל גירסת Build חדשה SQL Server מכילה את כל תיקוני האבטחה והתיקונים החמים שהיו בגירסת ה- Build הקודמת. מומלץ להתקין את גירסת ה- Build העדכנית ביותר עבור SQL Server:
העדכון המצטבר האחרון עבור SQL Server 2017
מצב
Microsoft אישרה כי זוהי בעיה במוצרי Microsoft המפורטים בסעיף "חל על".
מידע נוסף
עבור טבלה זמינה למעקב אחר שינויים, כאשר עדכון מתרחש בעמודה שאינה ראשית המוגדרת כייחודית, נוספים שני ערכים לטבלה הצדדית למעקב אחר שינויים: ערך אחד עבור כל אחת מהפעולות המפוצלות, הוספה ומחיקה.
כאשר מתבצעת קריאה לפונקציה CHANGETABLE כדי לספור את השינויים, ערכים אלה ממוינות לפי ערכי מפתח ראשי ולאחר מכן הפעולות נצברות. אם העדכון מוסיף ערך נמוך יותר, פעולת "I" מופעלת תחילה בטבלה הצדדית ואחריה פעולת "D". פעולה זו גורמת לחזרה של פעולה שגויה עבור שורה זו. זאת משום ש- "I" אחרי "D" נצבר כ- "D".
מאחר שרק ערכי המפתח הראשי נשמרים בטבלאות הצדדיות, אין צורך בשני ערכים נפרדים. הדבר נכון כל עוד עמודת המפתח הראשי אינה מתעדכנת.
בעיה זו נפתרה עבור עמודות ייחודיות שאינן ראשיות. במקרה זה, כאשר העדכון מתרחש, תתווסף שורה אחת בלבד על-ידי הוספת "U" לפעולת עדכון במקום שני ערכים עם "D" ו- "I".
הפניות
למד על המינוח שבו Microsoft משתמשת לתיאור עדכוני תוכנה.