TabLockX – נעילת טבלה

24/07/2013

תגיות: , , ,
אין תגובות

ניצור טבלה פשוטה בת עמודה אחת ונכניס לתוכה את הערכים 1,2,3:

If Object_ID('T_Tmp','U') Is Not Null Drop Table T_Tmp;

Create Table T_Tmp(ID Int Primary Key);

Go

 

Insert

Into T_Tmp

Values  (1),

        (2),

        (3);

Go

ננעל את הטבלה:

Begin  Tran;

Select * From T_Tmp(TabLockX);

clip_image002

נפתח ב-SSMS חלון חדש ונריץ בו פעולת עדכון (לא בחלון בו כתבנו את השליפה הנ"ל!):

Update T_Tmp

Set    ID=20

Where  ID=2;

הפעולה נתקעת ואינה מסתיימת כי הטבלה נעולה! היא תמשיך להמתין עד שהנעילה תסתיים על ידי Commit או RollBack.

פרטים על הנעילה ניתן לקבל מה-DMV המתאים כך:

Select  request_session_id,

        DB_Name(resource_database_id) DB,

        Object_Name(resource_associated_entity_id) Tbl,

        request_mode,

        request_type,

        request_status,

        request_owner_id Transaction_Number

From    sys.dm_tran_locks;

clip_image004

במקרה זה- Session 52 הוא הנועל (פקודת ה-Select), ו-Session 56 הוא הממתין (פקודת ה-Update).

X – מציין Exclusive Lock , IX מציין נסיון ל- Exclusive Lock(ה-Update מנסה לנעול אך אינו מצליח).

מידע לגבי הנעילה ניתן למצוא גם ב-SP_Who2 (ניתן לראות בשורה של 56 שהוא נעול על ידי 52):

Exec SP_Who2;

clip_image006

נעצור את העדכון ונסיר את הנעילה (על ידי RollBack).

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *