메뉴 건너뛰기

SAP 한국 커뮤니티



ABAP [Dictionary] Lock Object

문바이 2011.12.20 10:41 조회 수 : 24847 추천:3

ABAP Dictionary를 이해하기 전에...

이 정리표는 사용자 Interface화면을 기준으로 작성되었기 때문에 그냥 읽기보다는 실제 화면을 펼쳐놓고 읽으시면 도움이 됩니다

 

Database Object : ABAP Dictionary의 5개의 큰 분류중 4번째 Lock Object, 말그대로 Table에 Lock을 설정하는 것입니다.

 

개념을 만든배경(역시 추정입니다..)

Oracle로 프로그램을 개발하다 보면(ABAP이 아니어도) 테이블을 잠가야 하는 경우가 발생할 수 있습니다.

잠그는 목적은 여러가지 있을수 있겠지만, 데이타의 일관성 유지가 가장 큰 목적일 것입니다

암튼, DB지식이 전무한 저로서는 Oracle의 Table의 Lock거는 방법을 모르겠더군요. 지금도 그러한 방법이 있는지 잘은 모릅니다.

 

어째거나, 그때 이를 해결하고자 했던 방법중에 하나가 임시 버퍼같은 테이블을 만들어 잠김유무 정보를 거기에 기록하고

기록내용에 따라 프로그램을 열람을 제한하는 것이었습니다. ( 마치 지금설명하려는 Lock Object처럼)

 

그러나 여기에도 헛점은 있더군요.

 POP시스템의 경우 데이타 INSERT양이 많은 관계로 임시 테이블의 기록하는 시간에도 치고 들어오는 데이타가 있더군요..

그래도 결론은 해결은 했습니다.

 

다시 본론으로 들어와서,

ABAP Dictionary를 이용하여 프로그램을 개발하는 ABAP개발자들도 아마 이와 유사한 경험을 했을것입니다.

물론 이를 해결하고자 SAP사는 해결안을 만들었을것이구요.

바로 이게 Lock Object의 배경이자 사용목적입니다.

 

제가, 추론하여 이렇게 장황하게 설명하는 목적은

단순히 기술을 말하기 보다, 그 배경과 목적을 듣고보면 내용에 대한 이해와 감이 보다 잘올수 있다는 개인적 사견때문임입니다

 

Lock Object의 특징

Lock을 설정했다고 해서 ABAP의 Open SQL을 통한 DATA컨트롤이 막히는 것이 아닙니다.

단지 공통된 Lock개념의 Flag를 통해 제어하는것 뿐이죠.

Naming Rule  :   E+TableName        ex) EZQMBT0070

 

 

개체설명

Attribute[탭]
  RFC허용 : 외부에서 데이타를 갱신해야 하는경우

     역시나 Lock개체를 가져다 사용할 필요있음 

                                                               

Tables[탭]
   Primary Table :

     Lock를 설정한 메인 테이블을 지정한다.
   Secondary Tables :

     Primary Table외래키로 연결된 테이블을 지정
    연관테이블이되면 두 Lock이 자동으로 설정됨

    (ERD를 참고하여 Lock의 범위확인필요)

Lock Parameter[탭]
   Tables에 지정한 테이블 Key값들이 올라옴것이
   Lock으로 지정될 고유키값들을 설정한다.

   [사용자가 임의 변경 가능]

Lock Mode 의 종류
Exclusive lock :

  오직 한명의 사용자에 대해서만 접근이 가능하다
   하나이상의 동일한 Transaction내에서 Lock을 요청할수있음
Shared lock : 여러명의 사용자가 데이타를 읽을 수 있으나, 
   특정사용자에 의해서 변경이 시작되면 모두 잠긴다.
eXclusive but not cumulative lock : 작업 Transaction내에서 단

 한번만 Lock을 요청할 수 있음,이외 모든 요청을 수용하지않음

자동생성

Function

설명

Lock Object가 생성되면 자동으로

Function이 만들어지 진다.
  예를 들어 Lock Object명이 [ABC]인 경우.
  ENQUEUE_ABC , DEQUEUE_ABC 의

  두개의 함수가 만들어진다.

Initial Value

  X_CARRID 

  X_CONNID

  X_FLDATE

 

Passing Lock Parameter

  _WAIT

 

Controlling Lock Parameter

  _COLLECT TYPE DDENQCOLL

좌측은 ENQUEUE_ABC 의 [Import]탭의 파라메타 정보이다.
[실제 테이블 : sflight]
Inital Value 파라메타 :

   sflight의 mandt[공통키]를 제외한 모든키를 설정한다
Passing Lock 파라메타:

   Dialog Step의 발생하는[Dialog WP ->Update WP]
  Update WP Lock의 옵션을 지정하는 것이다.(bunding기술참고)
    값 [1] : Dialog WP의 트랙잰션 종료시 Lock도 종료됨
    값 [2] : Update WP가 Lock를 책임짐
    값 [3] : Dialgo WP,Update WP의상호통신을 통해Lock을 해지
Controlling Lock 파라메타 :

     Lock요청과 해지를 바로수행할지 Lock Container
    를 통해 수행할지를 결정한다.
    기본값 : Lock요청가 해지가 Lock서버에 바로 보내진다.
    [X] : Lock 요청과 해지가 먼저 Local Lock Container에 저장됨

Function

사용

자동생성으로 만들어진[enqueue_abc,dequeue_abc]

를 호출한다.[함수동일]

프로그램 코딩시 [패턴]버튼을 활용하여 함수의 호출.
  KEY값으로 설정된 데이타를 넘겨준다.
  T-CODE : SM12 를 통해서 코딩중간에 발생한

                   Lock의 상태를 확인하도록 한다

기타함수
PreDefined

함수

DEQUEUE_ALL

ENQUEUE_E_TABLE 

    [Table 단위로 Lock을 설정하는 경우]
DEQUEUE_E_TABLE

    [Table 단위로 unLock을 설정하는 경우]

 

 

프로그램에 걸려있는 모든 Lock을 제거한다.

내가 원하는 테이블 자체에 대해서 Lock을 설정한다.

내가 원하는 테이블 자체에 대해서 unLock을 설정한다.
 -> T-CODE : SM12에서 확인불가능
 -> Lock설정시 데이타브라우저에서

    DB직접편집불가능(T-CODE : N, SE11)

ENQUEUE_READ [LOCK의 상태를 확인할 때 사용]
결국 이 함수를 써먹기 위해 이부분을 공부한것이다.


Lock의 설정과 해제를 반복하는 상황에서
내가 속한 프로그램이 Update를 하기전

지금 변경하려는 Key값에 Lock이 설정되어

있는지를 먼저 확인후 갱신을 시행해야함.

파라미터 설명
 GCLINET[IN] : 클라이언트 명
 GNAME[IN] : Object Name[Table,Program Name]
 GARG[OUT] : 표준테이블[Client(3) + Key Value]
                         CBO테이블[테이블명 + Key Value]
 GUNAME[OUT] : SY-UNAME
 LOCAL[OUT] : 사용하지 않음.
 NUMBER[OUT] : Lock의 수량
 SUBRC[OUT] : sy-subrc반환
 ENG[OUT] : Locked된 오브젝트의 상세한 정보를 반환