PracticU

מאפייני טרנזקציה - ACID

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

מאפייני טרנזקציה - ACID
טרנזקציה היא יחידה לוגית אחת שמכילה כמה פקודות DML, וכולן נסגרות יחד בהצלחה או בכישלון. כדי לתאר את התכונות של טרנזקציה משתמשים במונח ACID, שבו כל אות מציינת תכונה אחרת.
ארבע התכונות
1. Atomicity (אטומיות): הכול מצליח או הכול נכשל. אין הצלחה חלקית של טרנזקציה.
2. Consistency (עקביות): הטרנזקציה שומרת על כללי הדאטהבייס. היא לא מעבירה את המידע ממצב עקבי למצב שמפר את הכללים.
3. Isolation (בידוד): טרנזקציה לא רואה את הנתונים של טרנזקציה אחרת כל עוד היא לא הסתיימה.
4. Durability (עמידות): אחרי שטרנזקציה הסתיימה, הנתונים נשמרים גם אם הדאטהבייס קורס.
פתיחה וסגירה
טרנזקציה נפתחת ב-BEGIN TRAN (או BEGIN TRANSACTION) ונסגרת ב-COMMIT לאישור, או ב-ROLLBACK לביטול כל הפעולות. ב-SSMS אפשר להדליק את האפשרות SET IMPLICIT_TRANSACTIONS בהגדרות Query Execution, ואז כל פקודת DML דורשת סגירה ידנית. ברירת המחדל היא שהאפשרות כבויה, ולכן כל פקודת DML נפתחת ונסגרת לבד.
דוגמה
בדוגמה נכנסו שני עדכונים לאותה טרנזקציה: עדכון לטבלת Employees ועדכון לטבלת Products. העדכון השני נכשל כי ניסו לעדכן עמודה שהיא מפתח ראשי, ולכן גם העדכון הראשון בוטל. זו התכונה של אטומיות בפעולה.
טרנזקציה היא הכלי שמבטיח שהדאטהבייס יישאר תקין גם כשפעולה באמצע נכשלת.
השיעור הבא בקורס: transaction save point

פרקי ההרצאה: מאפייני טרנזקציה - ACID

  1. 00:00

    הגדרת טרנזקציה כיחידה לוגית אחת

  2. 01:03

    ארבע תכונות ACID של טרנזקציה

  3. 02:04

    בידוד בין טרנזקציות (Isolation)

  4. 02:41

    עמידות (Durability) של נתונים שנשמרו

  5. 03:35

    סגירת טרנזקציה ב-COMMIT או ROLLBACK

  6. 04:16

    טרנזקציה אוטומטית לכל פקודת DML

  7. 05:12

    דוגמה: שתי פקודות DML באותה טרנזקציה

תמלול ההרצאה: מאפייני טרנזקציה - ACID

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

  1. 00:21

    ברוכים הבאים לשיעור נוסף בנושא של SQL. בשיעורנו היום אנחנו נעסוק בנושא של טרנזקציות. נושא זה ילווה אותנו בשיעור זה ובשיעורים שלאחר מכן.

  2. 00:30

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

  3. 00:44

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

  4. 01:21

    אחרת של דאטאבס A-atomicity זו התכונה שעליה דיברנו היכולת האטומית של כל טרנזקציה לומר לי שאו שהכל יצליח או שהכל ייכשל אין כאן הצלחה לחלקים. חוץ מזה יש לנו גם consistency עקביות טרנזקציה אמורה לשמור לי על כל אוסף החוקים שנמצאים בתוך הדאטאבס.

  5. 01:44

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

  6. 01:58

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

  7. 02:17

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

  8. 02:36

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

  9. 02:58

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

  10. 03:22

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

  11. 03:47

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

  12. 04:16

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

  13. 04:35

    מדוע? בואו נרוץ כאן לתוך התפריט Tools Options, ובתוך אופשיינס יש לנו את האפשרות להיכנס ל-query execution, אם אני פותח את ה-query execution, set implicit transaction, כלומר ברגע שהאפשרות הזאת by default היא לא מסומנת, כל פעולת dml,

  14. 04:57

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

  15. 05:12

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

  16. 05:26

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

  17. 05:45

    רצונו לומר, או שכולם יצליחו או שכולם ייכשלו. זוכרים את התכונה? אטומיסיטי, יכולת האטומית.

  18. 05:53

    או שאנחנו מצליחים בכל היחידה הזאת או שאנחנו נכשלים בכל היחידה. לא ניתן להצליח לחלקים.

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

ההרצאה הקודמת: Transaction Isolation Level

ההרצאה הבאה: transaction save point

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

  • מאפייני קונפיגורציה - Data Attributes

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

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