1
+ -- Change schema to University
2
+ USE University;
3
+
4
+ -- Shared Lock (S)
5
+
6
+ -- Session 1
7
+ -- Set the isolation level to REPEATABLE READ to hold shared locks until commit/rollback
8
+ SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
9
+
10
+ BEGIN TRAN;
11
+ SELECT *
12
+ FROM Course
13
+ WHERE id= ' CS111' ;
14
+
15
+ -- Check the locks held by this session:
16
+ SELECT request_session_id, resource_type, resource_description, request_mode, resource_associated_entity_id
17
+ FROM sys .dm_tran_locks
18
+ WHERE request_session_id = @@SPID;
19
+
20
+ -- Commit later
21
+ COMMIT TRAN;
22
+
23
+ -- Session 2
24
+ SELECT *
25
+ FROM Course
26
+ WHERE id= ' CS111' ;
27
+
28
+ BEGIN TRAN;
29
+
30
+ UPDATE Course
31
+ SET credits = 8
32
+ WHERE id= ' CS111' ;
33
+
34
+ ROLLBACK TRAN;
35
+
36
+ -- Sesion 3
37
+ SELECT
38
+ session_id,
39
+ blocking_session_id,
40
+ command,
41
+ status,
42
+ wait_type,
43
+ wait_time,
44
+ last_wait_type,
45
+ open_transaction_count,
46
+ text
47
+ FROM sys .dm_exec_requests
48
+ CROSS APPLY sys .dm_exec_sql_text (sql_handle)
49
+ WHERE blocking_session_id <> 0 ;
50
+
51
+ -- EXEC sp_who2;
52
+
53
+ -- Exclusive Lock (X)
54
+
55
+ -- Session 1
56
+
57
+ -- Set the isolation level to REPEATABLE READ to hold shared locks until commit/rollback
58
+ SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
59
+
60
+ BEGIN TRAN;
61
+ UPDATE Course
62
+ SET credits = 8
63
+ WHERE id= ' CS111' ;
64
+
65
+ -- Check the locks held by this session:
66
+ SELECT request_session_id, resource_type, resource_description, request_mode, resource_associated_entity_id
67
+ FROM sys .dm_tran_locks
68
+ WHERE request_session_id = @@SPID;
69
+
70
+ -- Rollback later
71
+ ROLLBACK TRAN;
72
+
73
+ -- Session 2
74
+ BEGIN TRAN;
75
+ SELECT *
76
+ FROM Course
77
+ WHERE id= ' CS111' ;
78
+
79
+ COMMIT TRAN;
80
+
81
+
82
+ -- Update Lock (U)
83
+
84
+ -- Session 1
85
+ SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
86
+
87
+ BEGIN TRAN;
88
+ SELECT *
89
+ FROM Course
90
+ WITH (UPDLOCK)
91
+ WHERE id= ' CS111' ;
92
+
93
+ -- Check the locks held by this session:
94
+ SELECT request_session_id, resource_type, resource_description, request_mode
95
+ FROM sys .dm_tran_locks
96
+ WHERE request_session_id = @@SPID;
97
+
98
+ -- Session 2
99
+ SELECT *
100
+ FROM Course
101
+ WHERE id= ' CS111' ;
102
+
103
+ UPDATE Course
104
+ SET credits = 8
105
+ WHERE id= ' CS111' ;
106
+
107
+ -- Shared with Intent Exclusive (SIX)
108
+
109
+ -- Session 1
110
+ SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
111
+
112
+ BEGIN TRAN;
113
+
114
+ -- Explicitly request a SIX lock:
115
+ SELECT *
116
+ FROM Course
117
+ WITH (TABLOCKX, HOLDLOCK)
118
+ WHERE id= ' CS111' ;
119
+
120
+ UPDATE Course
121
+ SET credits = 8
122
+ WHERE id= ' CS111' ;
123
+
124
+ -- Rollback later
125
+ ROLLBACK TRAN;
126
+
127
+ SELECT request_session_id, resource_type, resource_description, request_mode
128
+ FROM sys .dm_tran_locks
129
+ WHERE request_session_id = @@SPID;
130
+
131
+ -- Session 2
132
+ BEGIN TRAN;
133
+
134
+ SELECT *
135
+ FROM Course
136
+ WHERE id= ' CS111' ;
137
+
138
+ COMMIT TRAN;
0 commit comments