תופעות
בעת שימוש בשיקוף מסד נתונים ב-Microsoft SQL Server 2012 או ב-Microsoft SQL Server 2014, ייתכן שתיתקל בתנאי הצבה ושיקוף של מסד נתונים נכנס למצב מושעה.
סיבה
הבעיה מתרחשת מאחר שבעת הקצאת עמוד חדש, SQL Server מקבל X lock בעמוד החדש. SQL Server ישים את הhobt_id (ערימה או מזהה B-Tree) שאליו משתייך העמוד החדש בבקשת הנעילה. עם זאת, ל-SQL Server אין אפשרות למקם את הhobt_id ביומן המראה וליצור התנהגויות שונות של נעילה בין הראשי למראה. ניתן להסביר זאת בפרוטרוט באופן הבא:
-
T1 החזק מנעול IX בעמוד P1.
-
T2 בצע את הפיצול של עמוד ב-P1, הקצה את העמוד P2, מערכת שידור של טרנזקציית מערכת משמשת כאן, היא מכילה נעילת X ב-P2. כאן SQL Server לא הציב את הhobt_id ביומן המראה.
-
TX מבצע העברה של נעילה עבור T1 כדי להעביר את הנעילה התשיעית מ-P1 ל-P2.
-
TX מחויבת, now T2 יכול להשתמש בעמוד P2, ו-T2 להשיג מנעול IX נוסף בעמוד P2.
-
T1 ביצע, עכשיו T2 הוא היחיד שמחזיק מנעול IX ב-P2.
-
לאחר הוספת הרבה, מתרחשת הסלמה של נעילה, במרכז הראשי, T2 משחרר את ה-IX ב-P2, אך במראה, במהלך נעילת ההסלמה, T2 לא שיחרר את המנעול התשיעי.
-
לאחר הרבה מחיקה, הדף P2 הפך לריק והוקצה.
-
T3 זקוק לעמוד חדש, והוא קורה להקצאת P2, פעולה זו דורשת נעילת X, אך במראה, שלב זה נכשל עקב שלב 6.
במראה, שלב 6 אינו משחרר את הנעילה התשיעית מכיוון שhobt_id בבלוק הנעילה שגוי. Hobt_id שגוי זה מגיע במהלך שלב 2 ומאחר ש-SQL Server אינו מציב את הhobt_id ביומן שיקוף. בדרך כלל אינך רואה בעיה מכיוון שהtx בשלב 2 קצר מאוד, והחסימה של נעילת הhobt_id שגויה תשוחרר כאשר היא תתבצע. עם זאת, עקב נעילת ההעברה ב-step3 והשלבים הבאים (4 ו-5), בלוק נעילה זה עם hobt_id שגוי נשמר ולבסוף גורם לבעיה. הראשי אינו כולל בעיה זו מאחר שהוא משתמש בhobt_id נכון בשלב 2. אך רשומת יומן הרישום אינה כוללת את הhobt_id הנכונות.
פתרון
הבעיה נפתרה לראשונה בעדכון המצטבר הבא של SQL Server.
עדכון מצטבר 1 עבור SQL Server 2014 /en-us/help/2931693
עדכון מצטבר 9 עבור SQL Server 2012 SP1 /en-us/help/2931078
כל עדכון מצטבר חדש עבור SQL Server מכיל את כל התיקונים החמים ואת כל תיקוני האבטחה שנכללו בעדכון המצטבר הקודם. עיין בעדכונים המצטברים האחרונים עבור SQL Server:
פתרון
כדי לעקוף את הבעיה, אתחל ממנו מראה כדי לסיים את המצב המושהה.
מצב
Microsoft אישרה שזוהי בעיה במוצרי Microsoft המופיעים בסעיף "חל על".