משלוח מייל בסיום כל ג'וב

13/06/2012

תגיות: , , ,
אין תגובות

יש צורך במשלוח מייל בסיום כל ג'וב: מדובר בג'ובים שמריצים תהליכים חשובים והחבר'ה רוצים להיות בעניינים..
אפשרות אחת היא להוסיף לכל ג'וב צעד של שליחת מייל, וכמובן- לזכור ולצרף את הצעד הזה לכל ג'וב חדש שמגדירים.
אפשרות אחרת- אם כל התהליכים מופעלים על ידי פרוצדורה גנרית וכל ג'וב מפעיל אותה עם פרמטרים אחרים – להוסיף לפרוצדורה הגנרית פקודת משלוח מייל.
אפשרות שלישית, פשוטה מכולן, יכולה להיות יצירת טריגר על אחת מטבלאות המערכת של הג'ובים ב-msdb, כך שהטריגר בעצמו ישלח מייל בכל פעם שהטבלה תתעדכן עם סיום ריצה של ג'וב.
למשל- בטבלה msdb.dbo.sysjobactivity יש שורה לכל ג'וב (ליתר דיוק- לכל צירוף של ג'וב והפעלה של ה-Agent), ובכל פעם שג'וב מופעל – המערכת מאפסת את השורה שלו ומעדכנת תוך כדי ריצה בנתונים שוטפים. העדכון האחרון – על פיו נוכל לזהות את סיום הריצה – הוא כשעמודה job_history_id מתעדכנת במספר השורה בטבלה sysjobhistory.
בעבר כתבתי כיצד לקנפג את המערכת למשלוח מיילים (כאן וכאן); וכאן, כדי להמחיש את הנושא, נעדכן טבלת לוג מתאימה שניצור לשם כך (מי שרוצה – שיפעיל בטריגר את פרוצדורת משלוח המייל שהיא איננה נושא הפוסט ולכן אינני מרחיב לגביה את הדיבור).
טבלת לוג:

Use tempdb;

Go

 

If Object_ID('T_Jobs','U') Is Not Null Drop Table T_Jobs;

Go

 

Create Table T_Jobs(session_id Int,

                    job_id UniqueIdentifier,

                    job_history_id Int,

                    [Date] DateTime);

מי שרוצה שיוסיף עמודות נוספות כאוות נפשו..

וכעת לטריגר:

Use msdb;

Go

 

Create Trigger J_sysjobactivity

    On msdb.dbo.sysjobactivity

    After Update As

Insert

Into    tempdb..T_Jobs

Select  session_id,

        job_id,

        job_history_id,

        GetDate() [Date]

From    Inserted

Where   job_history_id Is Not Null;

כעת כל מה שנותר הוא לתזמן ג'וב או להפעיל אותו ישירות בעזרת Exec msdb..SP_Start_Job,

ולהשתכנע שטבלת הלוג מתעדכנת עם סיומו (או אם תרצו- המערכת שולחת מייל עם סיומו):

Select  *

From    tempdb..T_Jobs 

Order By date;

clip_image002

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *