הבלוג של גרי רשף

05/03/2011

טרנזקציות מקוננות

Filed under: Uncategorized — תגיות: , — גרי רשף @ 21:13

כל מי שעובד עם טרנזקציות מפורשות – אמור לדעת שבטרנזקציות אין קינון אמיתי. כלומר- אם בתוך טרנזקציה נפתח טרנזקציה חדשה, כל עוד לא התבצע ה-Commit האחרון – שום דבר לא נשמר באמת, ואם נבצע Rollback – הוא "יפיל" את כל הטרנזקציות.

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

דוגמה – ניצור פרוצדורה שמבצעת פעולה כלשהי, פותחת טרנזקציה, מבצעת עוד פעולה, פותחת עוד טרנזקציה, מבצעת עוד פעולה ומסיימת (הפעולה תמיד תהיה שליפת פרטי הטרנזקציה הנוכחית בעזרת שליפות DMV אך מי שרוצה יכול להוסיף פעולות "אמיתיות" עמו הכנסת נתונים לטבלה):

If Object_id('tempdb..#P') Is Not Null Drop Proc #P;

Go


Create Procedure #P As


Select  R.transaction_id,

        T.name

From sys.dm_exec_requests R

Inner Join sys.dm_tran_active_transactions T

        On R.transaction_id=T.transaction_id

Where R.session_id=@@SPID;


Begin Tran MyTran1


Select  R.transaction_id,

        T.name

From sys.dm_exec_requests R

Inner Join sys.dm_tran_active_transactions T

        On R.transaction_id=T.transaction_id

Where R.session_id=@@SPID;


Begin Tran MyTran2


Select  R.transaction_id,

        T.name

From sys.dm_exec_requests R

Inner Join sys.dm_tran_active_transactions T

        On R.transaction_id=T.transaction_id

Where R.session_id=@@SPID;


Commit Tran MyTran3;

Commit Tran MyTran3;

Go

וכעת נפעיל אותה:

Exec #P;

Go

clip_image002

(מספרי הטרנזקציות משתנים מהרצה להרצה)

השליפה הראשונה הייתה טרנזקציה בודדה שנפתחה ונסגרה אוטומטית (ללא פקודות Begin Tran ו-Commit) ומספרה 14562947.

השליפות השניה והשלישית היו שתיהן בתוך אותה טרנזקציה 14562948, MyTran1 שנפתחה לפני השליפה השניה, וזאת למרות שבין השליפה השניה והשלישית נפתחה לכאורה טרנזקציה נוספת – MyTran2.

זאת ועוד- פקודות ה-Commit בסוף מתייחסות לטרנזקציה MyTran3 שלא הייתה ולא נבראה: המערכת מצפה לשתי פקודת Commit או לפקודת Rollback, ומבחינתה שנקרא להן איך שנרצה..

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

מודעות פרסומת

להגיב »

עדיין אין תגובות.

RSS feed for comments on this post. TrackBack URI

להשאיר תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s

בלוג בוורדפרס.קום.

%d בלוגרים אהבו את זה: