none
משימות מתוזמנות RRS feed

  • שאלה

  • אני מפתחת תוכנה לחברה

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


    חני זהב

    יום שני 05 ינואר 2015 10:51

תשובות

  • בכל השרתי מסדי נתונים הנפוצים קיימת אפשרות לתזמן משימות פנימיות. בשרתי SQL למשל זה יש שירות בשם Agent שעובד ברקע ומפעיל JOB-ים שאנחנו מייצרים בשרת (JOB הוא אלמנט שמייצרים ברמת השרת). בקריאה מהירה נראה לי שזה הפתרון שאמור להתאים לכם. אין סיבה לבצע פעולות מחוץ לשרת, רק על מנת להחזיר את התוצאות אל השרת.

    * הערה: ב 19 החודש, יש במיקרוסופט כנס גדול של יום בחינם של SQL Server. אני מעביר שם הרצאה בנושא CLR. את יכולה להגיע להרצאה ולראות כיצד ניתן לנצל את הידע שלך כמפתחת כדי לשפר את העבודה של ה DBA שבדרך כלל לא מבינים הרבה ולא מנצלים את הכוח הטמון בהטמעת קוד CLR שלנו בתוך מסד הנתונים. בין ההרצאות מספר אנשי מקצוע מהתחום יעמדו בדוכים וייתנו שירות בחינם של תמיכה. אפשר לחפש אותי שם, ולהגיע עם שאלות שלא יכולתם להציג בפורום מסיבות שונות (בתחום SQL כמובן, והשאלה כאן קשורה ישירות ל SQL למשל).

    * הערה: בגרסת החינם EXPRESS אין אפשרות להפעיל את ה AGENT, למרות שהוא מותקן וניתן לראות אותו ברשימת ה Services

    * אפשר לבצע תזמון משימות בדרכים רבות נוספות. למשל:

    1. כאמור AGENT של שרת ה SQL
    http://databases.about.com/od/sqlserver/ss/sql_server_agent_3.htm#step-heading

    2. מתזמן המשימות של מערכת ההפעלה (פשוט יוצרים משימה חדשה שכוללת הפעלת קוד שכותבים בכל שפה שרוצים, הקוד מורץ בדיוק כמו בהרצה דרך שורת הפקודה באמצעות הפקודה שהגדרנו במתזמן המשימות)

    run --> Services.msc --> Task Scheduler -> Enable
    http://windows.microsoft.com/he-il/windows/schedule-task#1TC=windows-7

    3. פיתוח אפליקציה מסוג שירות והפעלה שלה ברקע. הפעלת טיימר באפליקציה שמבצע פעולה מסוימת כל פרק זמן.
    http://www.beansoftware.com/ASP.NET-Tutorials/Task-Scheduler-Windows-Service.aspx

    4. אם נחזור לשרתי SQL ולמקרים בהם מסיבות שונות אי אפשר לעבוד או לא רוצים ךלעבד עם ה AGENT אז אפשר לבצע תזמון משימות באמצעות Service Broker.
    Service Broker הוא שירות שרץ ברקע, וקיים גם בגרסת החינם EXPRESS. זהו שירות האזנה ושליחה של הודעות. כאשר מגיעה הודעה לשרת הוא מפעיל את הקוד שבוגדר עבור הודעה נכנסת.

    השיטה לעבודה היא:
    -> מגדירים שבזמן קבלת הודעה יופעל שאילתה כלשהיא + תשלח הודעה חדשה זהה בעוד X זמן. לכן בכל X זמן נשלחת הודעה חדשה ובכל XC זמן מתקבלת הודעה ומופעל הקוד. בצורה זו אני נוהג למשל לבצע ניהול משימות בשרתי EXPRESS, כולל משימות גיבוי אוטומטיות למשל.
    http://www.sqlteam.com/article/scheduling-jobs-in-sql-server-express

    וכמו תמיד, יש עוד כמה מאות שיטות שונות :-)


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]



    • נערך על-ידי pituachMVP, Moderator יום שני 05 ינואר 2015 12:03
    • סומן כתשובה על-ידי חני זהב יום שני 05 ינואר 2015 13:43
    יום שני 05 ינואר 2015 11:56
    מנחה דיון

כל התגובות

  • בכל השרתי מסדי נתונים הנפוצים קיימת אפשרות לתזמן משימות פנימיות. בשרתי SQL למשל זה יש שירות בשם Agent שעובד ברקע ומפעיל JOB-ים שאנחנו מייצרים בשרת (JOB הוא אלמנט שמייצרים ברמת השרת). בקריאה מהירה נראה לי שזה הפתרון שאמור להתאים לכם. אין סיבה לבצע פעולות מחוץ לשרת, רק על מנת להחזיר את התוצאות אל השרת.

    * הערה: ב 19 החודש, יש במיקרוסופט כנס גדול של יום בחינם של SQL Server. אני מעביר שם הרצאה בנושא CLR. את יכולה להגיע להרצאה ולראות כיצד ניתן לנצל את הידע שלך כמפתחת כדי לשפר את העבודה של ה DBA שבדרך כלל לא מבינים הרבה ולא מנצלים את הכוח הטמון בהטמעת קוד CLR שלנו בתוך מסד הנתונים. בין ההרצאות מספר אנשי מקצוע מהתחום יעמדו בדוכים וייתנו שירות בחינם של תמיכה. אפשר לחפש אותי שם, ולהגיע עם שאלות שלא יכולתם להציג בפורום מסיבות שונות (בתחום SQL כמובן, והשאלה כאן קשורה ישירות ל SQL למשל).

    * הערה: בגרסת החינם EXPRESS אין אפשרות להפעיל את ה AGENT, למרות שהוא מותקן וניתן לראות אותו ברשימת ה Services

    * אפשר לבצע תזמון משימות בדרכים רבות נוספות. למשל:

    1. כאמור AGENT של שרת ה SQL
    http://databases.about.com/od/sqlserver/ss/sql_server_agent_3.htm#step-heading

    2. מתזמן המשימות של מערכת ההפעלה (פשוט יוצרים משימה חדשה שכוללת הפעלת קוד שכותבים בכל שפה שרוצים, הקוד מורץ בדיוק כמו בהרצה דרך שורת הפקודה באמצעות הפקודה שהגדרנו במתזמן המשימות)

    run --> Services.msc --> Task Scheduler -> Enable
    http://windows.microsoft.com/he-il/windows/schedule-task#1TC=windows-7

    3. פיתוח אפליקציה מסוג שירות והפעלה שלה ברקע. הפעלת טיימר באפליקציה שמבצע פעולה מסוימת כל פרק זמן.
    http://www.beansoftware.com/ASP.NET-Tutorials/Task-Scheduler-Windows-Service.aspx

    4. אם נחזור לשרתי SQL ולמקרים בהם מסיבות שונות אי אפשר לעבוד או לא רוצים ךלעבד עם ה AGENT אז אפשר לבצע תזמון משימות באמצעות Service Broker.
    Service Broker הוא שירות שרץ ברקע, וקיים גם בגרסת החינם EXPRESS. זהו שירות האזנה ושליחה של הודעות. כאשר מגיעה הודעה לשרת הוא מפעיל את הקוד שבוגדר עבור הודעה נכנסת.

    השיטה לעבודה היא:
    -> מגדירים שבזמן קבלת הודעה יופעל שאילתה כלשהיא + תשלח הודעה חדשה זהה בעוד X זמן. לכן בכל X זמן נשלחת הודעה חדשה ובכל XC זמן מתקבלת הודעה ומופעל הקוד. בצורה זו אני נוהג למשל לבצע ניהול משימות בשרתי EXPRESS, כולל משימות גיבוי אוטומטיות למשל.
    http://www.sqlteam.com/article/scheduling-jobs-in-sql-server-express

    וכמו תמיד, יש עוד כמה מאות שיטות שונות :-)


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]



    • נערך על-ידי pituachMVP, Moderator יום שני 05 ינואר 2015 12:03
    • סומן כתשובה על-ידי חני זהב יום שני 05 ינואר 2015 13:43
    יום שני 05 ינואר 2015 11:56
    מנחה דיון
  • איך אפשר שהמשימה המתוזמנת תפעל גם כאשר המחשב מכובה ?

    חני זהב

    יום שני 12 ינואר 2015 08:21
  • השאלה שלך לא ממש הגיונית :-(

    אם המכונה כבויה, אז את יכולה לדמיין שהפעולה נעשתה. בכל מקרה אין משמעות לשום דבר כי אף אחד לא יכול לדעת.

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

    * תזמון משימות אפשר לבצע בכל מכונה עובדת אבל המשימה שמבוצעת יכולה לשלוח הוראות גם למכונות מרוחקות עובדות


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]

    יום שלישי 13 ינואר 2015 08:58
    מנחה דיון
  • אני מזמנת משימה מתוזמנת פעם בחודש,איך היא תתבצע עם המחשב מכובה?

    חני זהב

    יום שלישי 13 ינואר 2015 09:47
  • אני לא מצליח להבין מה המשמעות של ביצוע משימה אם המחשב נשאר סגור?!?

    אם המשימה מקומית, אז אין לכך שום משמעות (אפשר לבצע אותה כאשר מדליקים את המחשב). אם המשימה מרוחקת אז אפשר לבצע אותה במקום המרוחק או בכל שרת שנשאר פעיל ובהאזנה.


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]

    יום שלישי 13 ינואר 2015 15:48
    מנחה דיון
  • למה לא תארחי את השירות של תזמון המשימות על שרת בעובד כל הזמן במקום על המחשב שאת מכבה?

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


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]

    יום שלישי 13 ינואר 2015 16:34
    מנחה דיון
  • איך מזמנים משימה בעת הדלקת המחשב?

    חני זהב

    יום רביעי 14 ינואר 2015 13:25
  • אהלן חני,  

    את צריכה לכתוב שירות שרץ ברקע.
    http://msdn.microsoft.com/en-us/library/zt39148a(v=vs.110).aspx

    שירותים מופעילים בצורה אוטומטית כאשר המחשב עולה.

    בשירות את יכולה להגדיר לבמצע פעולה מסויימת חד עמית. במקביל את יכולה לקבוע תזמון של המשימה. כך שכאשר המחשב נדלק יהיה הרצה פעם אחת ובכל X זמן עד שהוא נכבה תהיה פעולה נוספת.

    תבדקי אפם זה נותן לך את מה שאת צריכה :-)


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]

    יום רביעי 14 ינואר 2015 15:04
    מנחה דיון
  • יש אפשרות לזמן את המשימה בעת שהמחשב נדלק דרך ה- sql ?

    חני זהב

    יום חמישי 15 ינואר 2015 07:51
  • קצת רקע:

    שרת ה SQL הוא שירות לכל דבר. בדרך כלל אנשים מתבלבלים בין הממשק GUI שהוא ה SSM ואינו חלק מהשרת אלא תוכנה חיצונית, לבין השרת עצמו שכולל מספר מנועים ושירותים הפועלים ברקע. כן כמו כל שירות, כאשר השירות של ה SQL מוגדר להתחיל לעבוד באופן אוטומטי (ברירת המחדל), אז הוא מופעל ומתחיל לעבוד מייד כאשר המחשב נדלק (כמו השירות שהצעתי לך לפתח לבד).

    * ניתן לראות את רשימת השירות ולשנות את ההגדרות של ההפעלה שלהם על ידי:
    run -> Services.msc
    בחלון שנפםתח ניתן לנהל את השירותים המותקנים במחשב כולל השירותים של שרת ה SQL.

    עתה אפשר לחזור לשאלה :-)

    התשובה היא כמובן שכן, התשובה היא תמיד כן לגבי שאלות האם אפשר :-)

    במקרה זה מדובר בפעולה פשוטה שכבר מובנית בשרת ה SQL. בידקי את הקישור הבא:
    http://www.databasejournal.com/features/mssql/article.php/3550601/Automatically-Running-a-Process-When-SQL-Server-or-SQL-Agent-Starts.htm

    או הקישור הבא:
    http://www.mssqltips.com/sqlservertip/1574/automatically-running-stored-procedures-at-sql-server-startup/


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]


    יום שישי 16 ינואר 2015 18:03
    מנחה דיון
  • כפי שרונן אריאלי ציין

    run --> Services.msc --> Task Scheduler -> Enable

    כאשר את מגדירה TASK אז יש לך אפשרות של:

    אם פיספסתי את הזמן שלי אז תריץ עכשיו.

    ולגבי להפעיל את המחשב במידה והוא כבוי זה כבר תלוי בחומרה ניתן לקרוא כאן:

    http://support.microsoft.com/kb/2586195

    יום חמישי 05 פברואר 2015 11:37