DBMS_LOCK
DBMS_LOCK 패키지의 기본 개념과 패키지 내의 프러시저를 사용하는 방법을 설명합니다.
개요
DBMS_LOCK은 유저에게 Lock 관리 및 SLEEP 기능을 제공하는 패키지입니다. 이 패키지는 디폴트로 관 리자만 수행 가능합니다.
DBMS_LOCK 패키지에서는 아래 테이블에 정의된 상수를 사용합니다.
NS_MODE
Null
INTEGER
1
SS_MODE
Sub shared
INTEGER
2
SX_MODE
Sub eXclusive or Row Exclusive Mode
INTEGER
3
S_MODE
Shared or Row Exclusive Mode or Intended Exclusive
INTEGER
4
SSX_MODE
Shared Sub eXclusive or Shared Row Exclusive Mode
INTEGER
5
X_MODE
Exclusive
INTEGER
6
다른 스레드에서 lock을 잡고 있는 경우, 아래 호환성 표에 따라 요청 결과가 결정됩니다.
NL
성공
성공
성공
성공
성공
성공
SS
성공
성공
성공
성공
성공
실패
SX
성공
성공
성공
성공
실패
실패
S
성공
성공
실패
성공
실패
실패
SSX
성공
성공
실패
실패
실패
실패
X
성공
실패
실패
실패
실패
실패
상수 MAXWAIT으로 설정할 경우 영원히 기다립니다.
maxwait constant pls_integer := 32767;프러시저
본 절에서는 DBMS_LOCK 패키지에서 제공하는 프러시저를 알파벳 순으로 설명합니다.
ALLOCATE_UNIQUE
지정된 lockname에 Lock ID를 할당하는 프러시저입니다. Lock ID 값의 범위는 1073741824 에서 1999999999까지입니다. 사용자에게 숫자가 아닌 이름을 통해서 관리를 쉽게하기 위한 목적으로 제공합니다.
ALLOCATE_UNIQUE 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
lockname
유일한 lockhandle 값을 생성할 Lock 이름을 지정
lockhandle
생성된 Lock ID에 대한 handle을 리턴 받음
이 handle 값을 통해 REQEST, CONVERT, RELEASE 프러시저를 호출할 수 있음
Lock ID를 잘못 사용했을 때의 문제를 방지하기 위해 Lock ID를 직접 리턴하 는 대신 VARCHAR2 (128) 변수로 설정된 handle 값을 리턴
handle은 한 세션에서만 유효하므로 다른 세션에서 해당 값을 사용해서는 안 됨
expiration_secs
DBMS_LOCK_ALLOCATED 테이블을 재활용하기 위한 유효 시간을 초단위 로 지정한 값 (기본값: 10일)
마지막 ALLOCATE_UNIQUE 프러시저를 호출한 시점이후로 지나간 시간을 계산
DBMS_LOCK_ALLOCATED 테이블에서 Lock을 직접 삭제해서는 안 됨
_DBMS_LOCK_REUSE 초기화 파라미터를 Y로 설정한 경우에만 동작
예제
CONVERT
기존 Lock 모드에서 다른 Lock 모드로 변경하기 위한 프러시저입니다.
CONVERT 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
id or lockhandle
Lock 모드를 변경하기 위한 Lock ID 또는 handle
lockmode
변경할 새로운 Lock 모드
timeout
Lock 모드 변경을 위해 기다릴 시간을 설정
만약 Lock을 얻을 수 없습니다면 timeout 에러 값을 리턴 (단위: 초)
반환값
0
Success
1
Timeout
2
Deadlock
3
Parameter error
4
Owner error
5
Illegal lock handle
예제
RELEASE
기존 잡았던 Lock을 명시적으로 해제하기 위한 프러시저입니다. 기본적으로 Lock은 세션이 종료되면 자동적으로 해제됩니다.
RELEASE 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
id or lockhandle
Lock을 해제하기 위한 Lock ID 또는 handle
반환값
0
Success
3
Parameter error
4
Owner error
5
Illegal lock handle
예제
REQUEST
원하는 Lock 모드를 지정하여 Lock을 요청하기 위한 프러시저입니다.
REQUEST 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
id or lockhandle
Lock을 요청하기 위한 Lock ID 또는 handle
lockmode
요청하는 Lock 모드
timeout
Lock 얻기 위해 기다릴 시간 (단위: 초)
만약 Lock을 얻을 수 없습니다면 timeout 에러 값을 리턴
release_on_commit
TRUE : commit이나 rollback할 때 Lock이 해제
FALSE : 명시적으로 Lock을 해제하거나 세션이 종료될 때까지 Lock을 해제하지 않음
반환값
0
Success
1
Timeout
2
Deadlock
3
Parameter error
4
Already owned by id or lockhandle
5
Illegal lock handle
예제
SLEEP
현재 세션을 일정 시간만큼 대기시킵니다.
SLEEP 프러시저의 세부 내용은 다음과 같습니다.
프로토타입
파라미터
seconds
대기 시간(초)
예제
Last updated

