SAP_鎖知識點

  • 2020 年 2 月 16 日
  • 筆記

一、概覽

  SAP LUW要求資料庫對象的鎖定在SAP LUW結束釋放,並且該資料庫鎖要求對所有SAP程式可見。SAP提供了一個邏輯數據鎖定機制,該機制基於系統特定的鎖定服務應用伺服器中的中心鎖定表(即將加鎖的資訊記入資料庫表)。一個ABAP程式在訪問數據之前,將希望鎖定的數據表關鍵字發送給該表,因此所有的程式在訪問一個資料庫表之前必須首先判斷該表是否已經被鎖定了。

  SAP鎖定與資料庫物理鎖定是不同的,它是一種業務邏輯上的鎖定。它不會在物理表上進行加鎖,而是將關鍵字傳遞給加鎖函數,加鎖函數會在特定表中加鎖資訊登記。

  SAP LUW在結束時(提交或回滾),SAP鎖定將會隱式解除。

二、SE11創建自定義鎖

  自定義鎖對象必須用EZ或者EY開頭,生成的鎖對象里只包含一個PRIMARY TABLE,可以包含若干個SECONDARY TABLE,同時會自動生成兩個函數來進行鎖管理,分別為ENQUEUE_」LOCK OBJECT」、DENQUEUE_」LOCK OBJECT」,其中」LOCK OBJECT」是鎖對象的名稱。

三、鎖模式

三種鎖模式:1、S共享;2、E專用累積;3、X專用不累積

區別如下表:

   括弧內為同一程式(即同一事務內)內,括弧外為非同一程式內

S共享:本身不需要更改數據,但是希望顯示的數據不被別人更改。

E專用累積:當更改數據的時候設置為此模式。

X專用不累積:和E類似,但是不允許累加,完全獨佔。

1、如果你在一個程式里成功對一個鎖對象加鎖之後,如果模式為S,其他用戶不能再對這個鎖對象加E、X模式的鎖,但是可以加S模式的鎖;

2、如果你在一個程式里成功對一個鎖對象加鎖之後,如果模式為E,其他用戶不能再對這個鎖對象加E、X、S模式的任意一種鎖;

3、如果你在一個程式里成功對一個鎖對象加鎖之後,如果模式為X,其他用戶不能再對這個鎖對象加E、X、S模式的任意一種鎖;

4、如果你在一個程式里成功對一個鎖對象加鎖之後,如果模式為S,在這個程式,你還可以再對這個鎖對象加S模式的鎖,如果沒有別的用戶對其加S模式的鎖,那麼你還可以對其加E模式的鎖,X模式的不可以;

5、如果你在一個程式里成功對一個鎖對象加鎖之後,如果模式為E,在這個程式,你還可以再對這個鎖對象加E、S模式的鎖,X模式的不可以;

6、如果你在一個程式里成功對一個鎖對象加鎖之後,如果模式為X,在這個程式,你不可以再對這個鎖對象加E、X、S模式的鎖。

四、SM12查看鎖

五、通用加鎖和解鎖函數

1、ENQUEUE_E_TABLE/DEQUEUE_E_TABLE,沒創建鎖對象的時候使用;

2、ENQUEUE_ESFUNCTION/DEQUEUE_ESFUNCTION,沒創建鎖對象的時候使用;

3、ENQUEUE_ES_PROG/DEQUEUE_ES_PROG,用於控制同一個程式不能並發執行;

4、DEQUEUE_ALL,解同一個程式中創建的所有鎖。

版權歸原作者所有,如有侵權請聯繫刪除。