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 요청

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