SQL Server 2008 - תקלה בסביבה בה מתקיימים טבלאות עם מחיצות ורפליקציה - ilDBA Portal

SQL Server 2008 – תקלה בסביבה בה מתקיימים טבלאות עם מחיצות ורפליקציה

16/01/2011 | פורסם על ידי

אחד הלקוחות שלי עובד בסביבת SQL Server 2008 ויש לו במערכת Production מספר טבלאות גדולות מאוד המחולקות עם Partitions.

ביום חמישי אחר הגעתי אל הלקוח בשעת הצהריים, וגיליתי שכל הג'ובים שאחראיים על תהליך ה-Partition manager שהוקם על מנת לנהל את ה-partitions במערכת נכשלים בצורה קונסיסטנטית עם הודעת שגיאה הבאה:

Msg 137, Level 15, State 2, Line 1
Must declare the scalar variable "@pnum".

Msg 3609, Level 16, State 2, Line 36
The transaction ended in the trigger. The batch has been aborted.

הודעת השגיאה מצביעה על הפקודה בפרוצדורה שמבצעת את ה-Switch partition של ה-partition הישן ביותר לטבלת הניהול. הפקודה נראית כך:

ALTER TABLE PartitionTable SWITCH PARTITION @pnum TO PartitionTable_out ;

עברתי וסקרתי את כל התהליך – הכל נראה תקין, הפרמטר @pnum מוגדר כהלכה בתחילת הפרוצדורה.

הרצתי את התהליך ב-debug וגם הוספתי הדפסות לפרוצדורה כדי לוודא שהפרמטר מקבל ערך תקין ונכון – הכל תקין ועובד – עד שמגיעים לפקודת הAlter table.

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

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

טוב. ממשיכים לחפש ולחטט ובמקביל לחשוב מה השתנה במערכת – הרי כל הג'ובים החלו להיכשל בדיוק באותו הזמן.

באחד משיטוטי הגעתי לאתר שהזכיר בנשימה אחת בעיות בנושא partition tables ו-Transactional replication בסביבת 2008. לפתע נזכרתי מה נשתנה.

באחת המשימות האחרונות יצרתי שם Transactional Replication בין שרת ה-Production לבין שרת אחר, לצרכי פיתוח. ב-Publication הגדרנו מספר טבלאות (Articles) מועטות וקטנות, כאשר אף אחת מהן לא הייתה טבלה בעלת Partitions.
הרצנו את התהליך בסביבת ה-TEST, ה-DB עבד תקין בלי שום תקלות במשך היום בו בו השינוי בוצע ולכן הגדרנו את ה-Transactional Replication בשרת ה-PROD.
התהליך הוגדר בהצלחה, ללא בעיות מיוחדת, עד כמובן הלילה, בו רצו הג'ובים שמקדמים את ה-Partitions ליום החדש.
ברגע שקישרתי בין שני נושאים הדרך למציאת מקור הבעיה הייתה פשוטה.
מצאתי Note של Microsoft שאומר את הדבר הבא:
Parameterized ALTER TABLE statement to switch a partition may fail for a database that is published for transactional replication in SQL Server 2008.
מסתבר, בסביבת 2008, כאשר יש DB שמוגדר עליו Transactional replication, לא ניתן להשתמש בפרמטרים בפקודת ה-ALTER TABLE…SWITCH PARTITION.

כן, שמעתם נכון – אפשר לעשות SWITCH PARTITION במערכות שמוגדרות עליהן Transactional Replication, פשוט אי אפשר להשתמש בפרמטרים כאשר רוצים לעשות SWITCH PARTITION.

ה-Workaround המוצע בלינק הוא לעבור להשתמש ב-SQL דינאמי, לדוגמא:

DECLARE @SQL VARCHAR(4000)
SET @SQL = 'ALTER TABLE PartitionTable SWITCH PARTITION '+CAST(@pnum as varchar(5)) +' TO PartitionTable_out ;'
EXEC (@SQL)
ה-Note הבא מכיל פרטים על התקלה:

http://support.microsoft.com/?kbid=2002474

חשוב לציין שהבעיה הנ"ל לא קיימת בסביבת 2005, מכיוון שבגרסה זו אין תמיכה בקיום של Partitions ו-Replication יחדיו.
אני אדייק ואומר שלא ניתן לבצע SWITCH PARTITION בסביבה שמוגדרת בה Replication, מה שאומר שבפועל יש שידרוג מרכזי של היכולות בסביבת 2008, מכיוון שהיא כן מאפשרת קיום של Partitions ו-Replication באותה מערכת.
בסביבת 2008 ניתן אף להגדיר טבלה עם Partitions כ-Article המיועד לריפלוק לשרתים אחרים – חידוש מבורך עבור ארגונים שלא יכלו עד עכשיו להגדיר את שני האלמנטים הללו יחדיו.
(פרטים על כך ניתן למצוא בלינק: http://msdn.microsoft.com/en-us/library/cc280940.aspx).

מקווים שזה עזר,

נתראה ברשומה הבאה !

רוני ורד.

השאר תגובה:

שם (חובה):
אימייל (לא יפורסם) (חובה):
תגובה (חובה):

*



מאמרים קשורים

קהילת

קהילת ה- BI וה- BIG DATA מתכנסת ב- 28-10 !

שלום רב, למי שלא ידע 🙂 קהילת ה- BI וה- BIG DATA בעולמות Microsoft מתכנסת מידי חודש על מנת להפגש, להכיר ולשמוע הרצאות במגוון נושאים טכנולוגיים מרתקים בתחום. במפגש הקרוב (מספר 63) שיתקיים ב- 28-10-2015, יום רביעי [...]
הזמנה

הזמנה ל-SQL Saturday #481 – Israel 2016

שלום רב, בקרוב יתקיים בישראל כנס טכנולוגי מרכזי קהילת ה-DB וה-BI בתחום ה-SQL Server – ה-SQL Saturday! הכנס אשר מאורגן בהתנדבות על ידי אנשי הקהילה יכלול במהלכו מספר מסלולי לימוד בתחומים טכנולוגיים שונים. [...]

איך לבצע Sizing DB ב-Datacenter בארגונך בקלות (חלק א')

כחלק מהטמעות מוצרי IT תשתיתיים (כגון FWDB, מוצרי גיבוי, חוות Storage, מוצרי שו"ב ועוד…) בארגוני, אנו נדרשים המון פעמים לענות על שאלות לספקים כגון : מה גודל הכולל של ה –  Datacenter  ? מה חלוקת גודל ה [...]

תיעוד בסיס הנתונים – למה זה טוב?

ישנם מספר נושאים חשובים שיש לתת עליהם את הדעת בפיתוח ותכנון בסיס נתונים. כמובן שצריך לשים לב לנירמול נכון של הטבלאות, וכמובן שצריך להגדיר סטנדרט לכתיבה נכונה של הקוד, וכמובן שאי אפשר בלי [...]
Copyright 2020 ilDBA Portal. Brought to you by Brillix - Israel Leading DBA company. Sponsored by: DBSnaps - Database Video Tutorialss
Website Security Test
%d בלוגרים אהבו את זה: