PracticU

snapshot

בלי כתוביותעם כתוביות
PracticU › קורס DBA אפליקטיבי - שפת SQL למתחילים › snapshot
מילון מושגים:
SQL Server - מערכת ניהול מסדי נתונים יחסיים של מיקרוסופט, הנשלטת בשפת T-SQL.
שרת - מחשב או תוכנה שמספקים שירות למחשבים אחרים (לקוחות) ברשת, למשל אחסון קבצים, אתר אינטרנט או מסד נתונים, ומגיבים לבקשות שלהם.
קומיט - פעולה ב-Git ששומרת תמונת מצב של השינויים במאגר יחד עם תיאור. גם אישור סופי של שינויים במסד נתונים.
מסד נתונים - אוסף מאורגן של נתונים המאוחסן כך שאפשר לשמור, לחפש, לעדכן ולשלוף אותו ביעילות, לרוב באמצעות שפת שאילתות.
Northwind - מסד נתונים לדוגמה של מיקרוסופט, המדמה חברת מסחר ומשמש ללימוד ולהדגמת שאילתות SQL.

snapshot
ההרצאה ממשיכה את נושא ה-Snapshot ב-SQL Server: הטרנזקציה רואה נתונים כפי שהיו בתחילתה, והעדכונים של טרנזקציות אחרות לא מפריעים לה.
השלבים העיקריים
1. הגדרה ברמת בסיס הנתונים: מדליקים את ALLOW_SNAPSHOT_ISOLATION. לשם כך סוגרים את כל החיבורים עם SET SINGLE_USER WITH ROLLBACK IMMEDIATE, ואחרי ההגדרה מחזירים את הגישה למשתמשים עם MULTI_USER.
2. הגדרה ברמת הטרנזקציה: כל טרנזקציה שרוצה לעבוד ב-Snapshot מציינת זאת בתחילתה, ובלי זה היא פועלת ברמת הבידוד הרגילה.
3. קריאה לפי תחילת הטרנזקציה: טרנזקציה שקראה נתון תקבל תמיד את אותו ערך, גם אם טרנזקציה אחרת עדכנה אותו ועשתה COMMIT באמצע.
4. עדכונים מבחוץ: עדכון שנעשה בחיבור אחר נשמר בגרסה נפרדת ולא נועל את הקריאה. טרנזקציה שביצעה ROLLBACK לא משפיעה על הקוראים.
5. סנכרון בסוף: כשהטרנזקציה הארוכה מסתיימת, הגרסאות מתמזגות, והשורה שנכנסה לבסיס הנתונים היא זו שרואים בקריאה חדשה.
פקודות והגדרות
- ALTER DATABASE Northwind SET ALLOW_SNAPSHOT_ISOLATION ON
- SET TRANSACTION ISOLATION LEVEL SNAPSHOT
טעויות נפוצות
- ההגדרה ברמת בסיס הנתונים לא תצליח כשיש חיבורים פתוחים או טרנזקציה פעילה בחיבור הנוכחי.
- עדכונים שנעשו בתוך אותה טרנזקציה נראים לה, אבל עדכונים מבחוץ לא נראים עד לסיומה.
שימו לב
Snapshot מאפשר קריאה עקבית בלי לעכב כותבים, אבל הוא שומר גרסאות נוספות של הנתונים, ולכן צריך לתכנן את השימוש בו.
השיעור הבא בקורס: סיכום על טרנזקציות SQL

פרקי ההרצאה: snapshot

  1. 00:00

    רמת בידוד Snapshot ומה היא קובעת

  2. 00:54

    הגדרת הדאטאבייס לעבודה במצב Snapshot

  3. 01:32

    פתיחת טרנזקציה בחיבור ראשון

  4. 02:08

    עדכון מחיבור אחר ללא נעילות

  5. 02:46

    הטרנזקציה הישנה לא רואה את העדכון

  6. 03:25

    קריאות מלוכלכות שאינן משפיעות

תמלול ההרצאה: snapshot

הטקסט המלא של הדקות הראשונות בהרצאה «snapshot» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:19

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

  2. 00:34

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

  3. 00:48

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

  4. 00:58

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

  5. 01:09

    Set single user with rollback immediately. סגרתי את כל הקונקשנים ואז אני יכול לפנות ולבצע את אלטר דאטאבס, לואו סנאפשוט איזוליישן תדליק לי את האפשרות לעבוד ברמת בידול של סנאפשוט.

  6. 01:24

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

  7. 01:43

    אנחנו פותחים טרנזקציה מסמנים שהיא תהיה סנאפשוט בגין טרנזקשן ואנחנו שולפים נתונים את כל הרשומות בהן first name שווה nancy.

  8. 01:53

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

  9. 02:11

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

  10. 02:24

    One rose affected, אין לנו כאן נעילות. אתה רוצה לעדכן לנתון? בבקשה, תעדכן. אתה רוצה לבצע לו גם קומיט? הקומיט מתקבל.

  11. 02:33

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

  12. 02:43

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

  13. 03:12

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

  14. 03:30

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

לקורס המלא: קורס SQL ו‑DBA אפליקטיבי

ההרצאה הקודמת: serializable - transaction isolation level

ההרצאה הבאה: סיכום על טרנזקציות SQL

הרצאות קשורות מקורסים אחרים

  • יצירת Snapshot - עם PowerCLI

קורסים נוספים במסלול

  • קורס NoSQL - MongoDB
  • קורס SSIS
  • קורס BI - ניתוח מסדי נתונים - Qlik Sense
  • קורס Power BI