資料庫基礎
交易T1對資料列A加上排他鎖後要求資料列B的鎖,T2對資料列B加上排他鎖後要求資料列A的鎖,結果兩者都無法繼續。DBMS偵測到這個狀態時,一般的處理方式是下列何者?
- A讓兩者繼續等待,其中一方的鎖終究會自然解除
- B回復其中一筆交易使其解除鎖,讓另一筆交易繼續進行
- C將T1與T2的更新都直接提交
查看答案與解析
正確答案:B. 回復其中一筆交易使其解除鎖,讓另一筆交易繼續進行
兩筆以上的交易互相等待對方解除所持有的鎖,導致誰都無法繼續的狀態稱為死結。這個狀態光靠等待無法解除,因此許多DBMS會從表示哪筆交易在等待哪筆交易的等待圖出現循環等跡象偵測死結,並回復其中一筆交易(犧牲者)使其解除鎖。被回復的交易之後再重新執行。也有為等待鎖的時間設定上限(逾時),超過就回復的方法。預防方面,讓所有交易都依固定順序加鎖,例如先資料列A再資料列B,是有效的方法。
- A. 彼此都在等待對方,光是等待並不會解除鎖。
- B. 正確。回復其中一筆交易使其解除鎖,是一般的處理方式。
- C. 要提交必須取得所需的鎖並完成處理,在互相等待的狀態下無法提交。