הבלוג של גרי רשף

02/11/2011

אילו ג'ובים רצים כרגע?

Filed under: Uncategorized — גרי רשף @ 18:42

כיצד נדע אילו ג'ובים רצים או האם ג'וב מסויים רץ כרגע?
בדרך כלל ניגש ב-SSMS לסעיף Jobs (ב-SQL Server Agent) ונגיע להיסטוריה על ידי קליק ימני על הסעיף או על הג'וב הספציפי:

clip_image002

הבעייה היא שכך נגיע לרשימת הג'ובים שרצו והסתיימו, אך לא לאלו שרצים כרגע.
במקרה הטוב, אם לג'וב יש מספר צעדים (Steps) נוכל לראות את אלו שרצו וללמוד מכך על מה שרץ כרגע,
אך מה עם ג'ובים שיש להם רק צעד אחד או שהם עדיין בצעד הראשון?
האובייקטים השונים המטפלים בג'ובים, ההגדרות שלהם, ההיסטוריה, ההרשאות וכו'- נמצאים בדטבייס msdb; אולם בטבלאות נמצא את המידע המוצג ויזואלית ב-SSMS ולא את מה שאנחנו מחפשים.
המידע המבוקש נמצא בפרוצדורות מערכת בדטבייס הנ"ל- sp_help_job או sp_help_jobactivity שנעזרות בפרוצדורות Extended, ועם קצת יצרתיות נוכל להפוך אותן לשליפת Select שניתן לתחקר על ידי מיון / סינון / פילטור, ולבצע Join עם אובייקטים נוספים כדי להגיע לכל המידע הדרוש.
בשלב ראשון יש לבצע באופן חד פעמי הרשאה להרצת Ad Hoc Distributed Queries:

SP_Configure 'Ad Hoc Distributed Queries',1;
Go

Reconfigure With Override;
Go

וכעת לשליפה עצמה:

Select  HJ.name JobName,
        HJ.description JobDescription,
        JS.step_name StepName,
        JS.database_name [DB_Name],
        Cast(JS.command As XML) SQL,
        HJ.current_retry_attempt RetryAttempt,
        HJA.Start_execution_date StartJob,
        IsNull(HJA.last_executed_step_date,HJA.Start_execution_date) StartJobStep
From    OpenRowSet('SQLNCLI','Server=(Local);Trusted_Connection=Yes','Set FmtOnly Off Exec msdb.dbo.sp_help_job') HJ
Inner Join OpenRowSet('SQLNCLI','Server=(Local);Trusted_Connection=Yes','Set FmtOnly Off Exec msdb.dbo.sp_help_jobactivity') HJA
        On HJ.job_id=HJA.job_id
Inner Join msdb.dbo.sysjobsteps JS
        On HJ.job_id=JS.job_id
        And HJ.current_execution_step Like '%('+JS.step_name+')%'
Where   HJ.current_execution_status=1
        And HJA.start_execution_date Is Not Null
        And HJA.stop_execution_date Is Null;

עם המזל שלנו- אף ג'וב לא רץ כרגע, ואיך נוכל לדעת שזה באמת עובד?

ניצור בזריזות ג'וב בשם TryJob, ובו שני צעדים (Step1, Step2) שמופיעה בהם הפקודה:

WaitFor Delay '00:01'

(זו פעולת סרק שרצה במשך דקה ומסתיימת בהצלחה)

ונשמור אותו.

נפעיל את הג'וב (לא חייבים לתזמן אותו לשם כך):

Exec msdb..sp_start_job 'TryJob';
Go

וישר אחר כך את השליפה הנ"ל:

clip_image004

כעבור כדקה נריץ שוב וכעת נראה ש-Step2 רץ.

זו גרסה ראשונה ומינימלית, ובהמשך ארחיב אותה כך שתכלול מידע נוסף.

מי שרוצה- מוזמן לעשות זאת בעצמו.

מודעות פרסומת

4 תגובות »

  1. […] כחודש וחצי פרסמתי פוסט בו הצעתי דרך מעט מסורבלת להציג מידע על ג'ובים שרצים […]

    פינגבאק של אילו ג'ובים רצים כרגע / רצו קודם (2)? - גרי רשף — 19/12/2011 @ 20:53

  2. […] כחודש וחצי פרסמתי פוסט בו הצעתי דרך מעט מסורבלת להציג מידע על ג'ובים שרצים […]

    פינגבאק של אילו ג’ובים רצים כרגע / רצו קודם (2)? « הבלוג של גרי רשף — 19/12/2011 @ 20:47

  3. אם אתה עושה קליק ימני על ה JOB ACTIVITY, אתה תראה מי רץ כרגע, אלא אם כן אתה חותר למשהו אחר

    תגובה של pelegk1 — 02/11/2011 @ 22:56

    • אתה לא תאמין- אבל עד כה לא שמתי לב לאופציה הזו, או שחשבתי שמדובר במסך ה-History המוכר..
      פאדיחה!

      יחד עם זאת- מעז יצא מתוק והשליפה בכל זאת שימושית אם רוצים שליפה תפורה על פי צרכינו,
      למשל- איחוד של ה-Activity ושל ה-History.

      בכל מקרה- תודה על ההערה המועילה.

      תגובה של גרי רשף — 03/11/2011 @ 15:34


RSS feed for comments on this post. TrackBack URI

להשאיר תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s

יצירה של אתר חינמי או בלוג ב־WordPress.com.

%d בלוגרים אהבו את זה: