משימת SQL ארוכה: שמרו עליה פועלת כשהחיבור ל-VPN נופל
חיבור VPN שנופל משאיר שאלה אחת ששגיאת הלקוח אינה יכולה לענות עליה: האם העבודה אושרה? העבירו משימות ארוכות לבעלים עמיד והשוו מצב לפני ניסיון חוזר.
ה-VPN נופל עשרים דקות לתוך בנייה מחדש של אינדקס, לקוח ה-SQL שלכם מציג חיבור שבור, ולשאלה המובנת מאליה אין תשובה באותה שגיאה. האם ההוראה הסתיימה, בוטלה, או המשיכה לרוץ בלעדיכם? התחברות מחדש ושליחה מחדש היא הגרועה משלוש האפשרויות, כי היא הופכת תוצאה אחת לא ודאית לשתי תוצאות אפשריות. העבירו את העבודה למשהו עם בעלים עמיד לפני החלון הבא.
מה שגיאת החיבור לא מספרת לכם
שגיאה בצד הלקוח מתארת את הלקוח. היא מדווחת שהשקע נסגר, ולא מה עשה השרת עם העסקה. ייתכן שההוראה עדיין מתבצעת, שאושרה ממש לפני שהקישור מת, או שבוטלה כשהפעילות שלה נוקתה. שלושת המקרים מייצרים את אותה הודעה במחשב הנייד שלכם.
רק מצב השרת יכול להכריע בכך. הסתכלו שם לפני שתחליטו משהו.
העבירו את העבודה לבעלים בצד השרת
לעבודה שאינה זקוקה לאדם שישגיח, הניחו למארח מסד הנתונים להחזיק בהרצה. SQL Server Agent מריץ משימות לפי דרישה או לפי לוח זמנים ורושם כל הרצה, כך שמחזור החיים של המשימה אינו תלוי בפעילות ה-VPN שלכם. זהות המשימה זקוקה בדיוק להרשאות שהמשימה דורשת, ולא להקשר האינטראקטיבי המלא של מנהל. אז המחשב הנייד מתחיל עבודה וקורא תוצאות במקום להיות התהליך שמחזיק אותה בחיים.
EXEC msdb.dbo.sp_start_job @job_name = N'nightly-customer-reindex';זמינותו של Agent תלויה במהדורה ובשירות שפרסתם. השתמשו במנגנון שהפלטפורמה שלכם מספקת בפועל במקום להניח שזה קיים בכל מקום.
מארח קפיצה קרוב למסד הנתונים מקצר את הדרך ושווה שיהיה, אבל הוא לא משנה את שאלת הבעלות. הפעילות עדיין נגמרת כשהרשת נגמרת. השתמשו בו כדי לצפות, לא כדי להיות הדבר שמחזיק את העבודה בחיים.
השאירו רשומה שהפעילות הבאה תוכל לקרוא
רשמו שם משימה או מזהה, את מסד הנתונים המיועד ואת התוצאה שאתם מצפים לה. הרשומה הזו היא שמאפשרת לפעילות אחרת, או לאדם אחר, לענות על השאלה שהשגיאה לא יכלה. בלעדיה נשאר לכם זיכרון מעורפל של עדכון ואין דרך לבדוק.
EXEC msdb.dbo.sp_help_jobhistory @job_name = N'nightly-customer-reindex';ההיסטוריה מציגה תוצאה ותזמון לכל שלב, וזה שימושי יותר מדגל הצלחה אחד. למשימות שמשנות נתונים הוסיפו גם את אימות היישום עצמו: ספירת שורות, סכום ביקורת או שורת מצב שנכתבת על ידי המשימה. שתי רשומות בלתי תלויות הן מה שהופך ניסיון חוזר לבטוח, והראשונה שבהן היא היסטוריית המשימות הנרשמת.
השוו לפני שליחה מחדש
כשחיבור הניטור נעלם, מצאו את ההרצה הקיימת לפני שמתחילים אחרת. קראו את תוצאות השלבים שלה והחליטו אם העבודה אושרה, הושלמה חלקית או מעולם לא החלה. רק אז הפעילו את כלל הניסיון החוזר שהתהליך מגדיר, כי שליחה מחדש בעיניים עצומות עלולה לשכפל טעינה או להיכשל באמצע בפעם השנייה.
שמרו על הבעלים העמיד ועל התוצאה הניתנת לבדיקה, וכישלון גישה קצר הופך לאי-נוחות במקום לניחוש. זו כל מטרת התכנון: העבודה צריכה לחיות יותר מהחיבור שביקש אותה.