반응형
Oracle 9i 이상을 사용하면 이와 같은 기능이 가능하다.
Select 문으로 사용자가 임의로 lock을 걸수 있는 명령
사용법은 아래와 같고 각 명령어 마다 설명을 추가할것이다.
- Select ......from .... where .... FOR UPDATE with no option;
- lock를 획득하기 까지 무한정 기다린다.
- ex) select * from detp where dept_no = '1111' for update;
- Select ......from .... where .... FOR UPDATE NOWAIT;
- lock을 획득하지 못하면 바로 exception 처리가 된다
- ex) select * from detp where dept_no = '1111' for update nowait;
- 다른 값에서 조회하는 이 레코드에 락이 걸려있다면 해당 쿼리는 바로 exception 처리 이다.
- Select ......from .... where .... FOR UPDATE WAIT integer
- 1번과 유사하지만 무한 대기가 아닌 시간 지정해두고 기다린다.
- Select ......from .... where .... FOR UPDATE OF
- 복수 개의 table join 결과 셋에 대한 모든 테이블에 대해서
- 복수 개의 table join 결과 셋에 대한 모든 테이블에 대해서
- Select ......from .... where .... FOR UPDATE SKIP LOCKED
- lock이 걸려있는 레코드를 제외하고 나머지 레코드에 lock을 획득한다.
ORA-00054: resource busy and acquire with NOWAIT specified
이미 lock이 명시적으로 설정된 레코드를 포함한 레코드에 명시적으로 lock을 설정하려고 하면 위와 같은 에러가 발생하니 참고 하도록 하자.
반응형
'IT > Database' 카테고리의 다른 글
[Mssql/Sqlserver] Top N with ties (48) | 2023.11.01 |
---|---|
[Oracle] 에러 표시 방법(ORA-00000) (sqlca.sqlcode) (42) | 2023.10.31 |
[Oracle] NTILE 함수 (44) | 2023.10.28 |
[MySQL] 버전 확인방법 (58) | 2023.10.20 |
[Mysql] MATCH AGAINST 사용(fulltext 검색) (39) | 2023.10.15 |
댓글