טרנזקציות – מה לא ידעתי עד כה?

יום רביעי, אוקטובר 6, 2010

אתמול במפגש ISUG, גיא גלנצר ממדירה הירצה בין היתר על טרנזקציות, תחום שלתומי חשבתי שהכל בו פשוט ומוכר, והתברר שאין זה כך.. למשל הקוד הבא- פותחים טרנזקציה ראשית, מעדכנים טבלה, פותחים טרנזקציה משנית, מעדכנים טבלה, מבצעים Commit לטרנזקציה המשנית, ו-RollBack לראשית: Use tempdb; Go IF Object_Id('T_Trn','U') Is Not Null Drop Table T_Trn; Go Create Table T_Trn(I Int); Go Begin Tran Tr1; Go Insert Into T_Trn Values(1); Go Begin Tran Tr2; Go Insert Into T_Trn Values(2); Go Commit Tran Tr2; Go Rollback; Go Select * From T_Trn; Go האם ה-Commit הראשון שומר "באופן בלתי הפיך" את הערך 2 או שמא זה לא נגמר עד שהגברת מתחילה לשיר ומתבצע ה-Commit הסופי על הכל? 1. אם בסוף מתבצע Rollback- מתבטל כל מה שנעשה במהלך הטרנזקציה...