
SET SINGLE_USER WITH ROLLBACK IMMEDIATE, ואחר כך מחזירים אותו ל-MULTI_USER.SET TRANSACTION ISOLATION LEVEL SNAPSHOT. ברירת המחדל היא READ COMMITTED.ALTER DATABASE Northwind SET ALLOW_SNAPSHOT_ISOLATION ONSET TRANSACTION ISOLATION LEVEL SNAPSHOTהטקסט המלא של הדקות הראשונות בהרצאה «serializable - transaction isolation level» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
וגם אם כן לרמת הבידול הגבוהה ביותר שקיימת בתוך הדאטאבייס זו ה-Snapshot. Snapshot זוהי רמת טרנזקציית Level Isolation, רמת גידול ורמה של טרנזקציה שהיא בעצם קובעת לי שכל הנתונים שייקראו במהלך אותה הטרנזקציה הם אלו הנתונים שהם נכונים לתחילתה של הטרנסמן ההתחלה.
כל שאר הקונקשנים שיעדכנו נתונים אלו פותחים להם רואו ורג'ינינג חדש, נפרד, על מנת לעדכן את הנתונים שם מבלי להפריע טרנזקציה אחת לחברתה.
איך אנחנו עושים זאת ואיך אנחנו עובדים במוד של סנאפשוט? שימו לב, על מנת לעבוד במוד כזה אנחנו צריכים להגדיר הן הגדרה ברמה של הדאטאבס והן הגדרה ברמה של הטרנזקציה.
ברמת הדאטאבס אנחנו צריכים לעשות אלטר דאטאבס להדליק את ה-Allowed Snapshot Isolation והן בתחילתה של טרנזקציה אנחנו צריכים לסמן שה-Isolation Level שלנו הוא Snapshot.
כדי לעשות זאת ברמה של הדאטאבס אנחנו אנחנו צריכים לסגור ראשית את כל הקונקשנים. על מנת לבצע פקודת אלתר דאטאבייס Northwind אנחנו סוגרים את כל הקונקשנים לפי הפקודה שלפניכם Set Single User with Rollback Immediately.
סגרתי את כל הקונקשנים ואז אני יכול לפנות ולבצע את אלתר דאטאבייס Hello Snapshot Isolation תדליק לי את האפשרות לעבוד ברמת בידול של סנאפשוט.
נריץ גם את זאת. מאחר שביצענו זאת אנחנו כבר יכולים לאפשר למשתמשים נוספים להתחבר לתוך הדאטאבייס מולטי יוזר אלתר דאטאבייס נור פרינצף מולטי יוזר F5 אנחנו מריצים ואנחנו כעת ערוכים לעבודה בסנאפ שוט לבל שימו לב לא רק הגדרה ברמה של הדאטאבייס אלא כאן אני מוסיף גם הגדרה ברמה של הדרסיה עצמה אנחנו פותחים טרנזקציה
מסמנים שהיא תהיה סנאפ שוט בגין טרנזקשן ואנחנו שולפים נתונים את כל הרשומות בהם first name שווה ננסי אנחנו מגלים שיש לי שלוש שורות כאלה בתוך הטבלה, ה-Nodes שלהם קרקרק, ובמקביל נפתחת לה טרנזקציה אחרת.
תוך כדי ביצועה של הטרנזקציה מתעצמו, נפתחת טרנזקציה אחרת, שוב פעם מתחברת לתוך בסיס נתונים נוטווין, ועושה קונקשן חדש, וזה מצליח, ומציינת שה-Transaction Isolation Level שלנו הוא סנאפשופ, פותחת טרנזקציה ומעדכנת לנו נתון בתוך הטבלה עצמה.
שימו לב להפתעתנו הרבה האישום התקבל one rose affected אין לנו כאן נעילות אתה רוצה לעדכן לנתון בבקשה תעדכן אתה רוצה לבצע לו גם קומיט הקומיט מתקבל קומיט completed successfully הכנסת כאן לנתון חדש עדכנת רשומה חדשה לעובדת מספר 1 זוהי ננסי עדכנת לה בתוכנות סטרינג חדש האם הטרנזקציה שנמצאת מצד שמאל רואה נתונים אלו הטרנזקציה
שנמצאת מצד שמאל עדיין חיה בעולם שלפני העדכון של הטרנזקציה החדשה, עדיין חיה בעולם כפי שהוא היה נקבע בשורה מספר 292 בתחילתה של הטרנזקציה, ולכן כל שליפה חוזרת ונשמעת של הנתונים הללו של עובדת ננסי עדיין מציגה לי נוט שווה 0.
היכן נשמר הנתון הזה? זהו ה-ROW ויירג'יוניק שלנו. נשמר לנו כאן את הנתון הזה בצד, אבל הוא לא מפריע לטרנזקציה אחרת. היא יכולה להתחיל עוד טרנזקציה נוספת במהלך ביצוע של הטרנזקציה מצד שמאל, הפעם אני מכניס dirty reads כי אני מבצע עליהם rollback וגם אותם אנחנו מריצים וגם עליהם אנחנו מבצעים בסופו של דבר rollback וברור
לנו שכשם שהקומיטים לא נכנסו כך ה-rollbackים עצמם המידע המלוכלך לא נראה והטרנזקציה מצד שמאל חיה לה בעולם שלפני ביצוע העדכונים האחרונים והיא לא רואה אותם וגם כאשר היא מסתיימת היא עדיין לא רואה אותם.
וכל הנתונים הללו, כפי שהם מופיעים בטרנזקציה מצד שמאל, נשמרו לתחילתה של הטרנזקציה. בעת סיומה של הטרנזקציה מצד שמאל, בסופו של דבר אז רק מתעוררים להם המיזוג בין כל ה-raw versionate, בין העדכונים שנעשו מצד ימין בטרנזקציות המאוחרות יותר, ובין הטרנזקציה הארוכה זו המסולצת מצד שמאל.
בסופו של דבר אנחנו מקבלים כאן את ה-clean read, רק את השורה שאותה אנחנו ביצענו בגינה קומית. This is new clean read, זו השורה שבסופו של דבר נכנסה בתוך הדאטאבס.
נמצאנו לנדים ברמה של עבודת איזוליישן לבל, ברמה של סנאפשוט אנחנו צריכים לבצע ראשית שני דברים. א', הגדרה ברמה של הדאטאבס,