נעילת תהליך ב SQL SERVER
-
שלום לכולם
קורה הרבה שישנם פרוצדורות שרצות אחת לכמה דקות או חצי שעה וכדומה, וגם אפשר לתת ליוזר אפשרות להריץ אותם באופן יזום.בדרך כלל פרוצדורות שמטפלות בכל מיני דברים שקשורים להשלמת מידע ונתונים בתוך הדטה בייס וקיום כל מיני כללים עיסקיים (לדוגמא שליחת SMS לכל הלקוחות שיש להם יותר מ 2 קרנים וכדומה)
הבעיה היא (אציין מראש שזה קרה לי פעם אחת בלבד בשנתיים האחרונות) שלפעמים הפרוצדורה רצה במקביל על ידי יותר מיוזר אחד, והעסק יכול להתחרבש, כי למשל אם מכניסים לטבלה זמנית קודם כל את המידע, ולאחר מכן מוסיפים אותו לטבלה הקבועה, ובטבלה הזמנית צריך להתקיים תנאי מסויים, שבזמן ריצה הוא אכן קיים, והוא מחזיר ערך שקר רק לאחר ששורה האחרונה בפרוצדורה התבצע וכן הלאה, לא צריך להאריך בזה. במקרים כאלו אין לנו ברירה וצריך "לנעול" את התהליך שלא יוכלו שניים לגשת אליו במקביל (דוד ל.ט. אני יודע את התשובה שלך: תריץ דרך דוט נט, ותנעל את התהליך ברמת הדוט נט, אבל אף על פי כן, אני רוצה לנעול את התהליך ברמה הכי קרובה לדטה בייס, כך שגם אם מחרתיים נבצע את הפרוצדורה מכיוון אחר לגמרי אני עדיין מוגן). הפתרון הישן הוא לעדכן טבלה כלשהי במסד הנתונים (להרים דגל) בתחילת התהליך, ולהוריד את הדגל בסיום התהליך. דרך ממש עקלקלה ועקושה, אולם חשבתי שאין דרך אחרת במסדי נתונים להתמודד עם הדברים הללו.
כהיום ראיתי כאן מאמר שנראה נפלא, אולם לא זכיתי לרדת לעומקו, אשמח לשמוע ממכם עצות חכמות ומועילות.
תודה.
פורסם במקור בפורום CODE613 ב13/03/2016 19:00 (+02:00)
-
אין שום קשר, הטבלה הזמנית לפעמים נועדה לפשט את הקוד, בסופו של דבר הכל נכנס לטבלאות קבועות במסד הנתונים, קח את הדוגמא של בדיקת לקוחות עם 3 קרניים שלא נשלח להם SMS מזל טוב לקרן השלישית, זאת שאילתה שלפעמים קצת יותר מורכבת ממה שזה נראה, ומנהג ישראל לפצל את העסק לכמה שאילתות, לבצע מניפולציות על טבלה זמנית, ורק בסוף לעשות אינסרט לטבלה הסופית, מה שייתכן שתוך כדי עבודה יש עוד יוזר שמריץ את אותו תהליך, ואז נמצא שבן אדם מקבל מסרון על הקרן הנוספת פעמיים, והוא בטוח שכבר צמחו לו 4 קרניים, ומתלונן (האמת שזה יכול להיות מאוד נכון כאשר לקוחות מקבלים הודעה על זיכויים כספיים וכדומה) איה הקרן הרביעית.
אגב טבלה זמנית היא פר סשן כמעט תמיד ב SQL SERVER אלא אם כן מוסיפים עוד סולמית כגון ##TABLEפורסם במקור בפורום CODE613 ב13/03/2016 19:27 (+02:00)
-
אחרי שעשו לי פה שיימינג ....
אין לי את הזמן להכין פה קורס בנושא וזה לא תחום שניתן ללמד אותו על קצה המזלג, עשיתי פעם קורס מקיף בנושא שכבר המלצתי עליו כאן.
החלק הרלוונטי ממנו:
https://lagunita.stanford.edu/courses/DB/Indexes/SelfPaced/courseware/ch-indexes
כל הקורס מאוד מומלץ (מחולק למיני קורסים) שזה כאן:
https://lagunita.stanford.edu/courses/DB/2014/SelfPaced/about
ממליץ לראות את הסרטונים בסבלנות, לעשות את הבוחן בכל שלב ובכללי ללכת ללפי הקו שלהם ולא לדלג.
אחרי שהשואלים יואילו ללמוד את הקורס הקצר הזה, אני יואיל לענות בנושא מעל דפי הפורום.לאדוקים במיוחד: המרצה היא אישה והראש שלה מופיע בסרטונים בריבוע בצד ימין למטה.
פורסם במקור בפורום CODE613 ב03/04/2016 13:18 (+03:00)
-
זהו, אני יכול להרצות :lol: :lol: :lol:
מה שכן לא זכיתי להבין למה הקורס הזה פתוח לכל דורש, ואילו הקורס אשר הפנית כאן דורש רישום וכו'. ואני לא מוכן להירשם די די די כבר, כל אחד שיש לו אתר לזמני הדלקת נרות חנוכה שחל להיות בפורים רוצה רישום, מספיק!!!!!פורסם במקור בפורום CODE613 ב03/04/2016 22:33 (+03:00)