티스토리 뷰
출처 :
FOR UPDATE 문
- 9i부터 사용 가능
- SELECT 문으로 사용자가 임의로 lock를 걸 수 있는 명령어
형식
1. FOR UPDATE with no option
- lock를 획득하기 까지 무한정 기다림
- ex) select * from detp
where dept_no = '1111'
for update;
- 이렇게 하면 동일 세션에서 transaction을 해제(commit등) 을 하기 전까지는 결과셋에 대해서 lock이 걸립니다.
2. FOR UPDATE NOWAIT(= WAIT 0)
- lock를 회득하지 못하면 바로 exception 처리 됩니다.
- select * from detp
where dept_no ='1111'
for update nowait;
- 결과 적으로 다른 세션에서 dept_no='1111'에 대해서 lock을 잡고 있다면 에러가 발생하죠.
3. FOR UPDATE WAIT integer (0 ~ 4294967295, second)
- 1번과 유사한데 무한정 기다리는 것이 아니고 정해진 시간까지만 기다렸다가 에러를 발생합니다
- select * from detp
where dept_no ='1111'
for update wait 10; -- 10초가 기다렸다가 lock을 획득하지 못하면 에러 발생
4. FOR UPDATE OF
- for update문은 복수개의 table join 결과 셋에 대한 모든 테이블에 대해서 lock를 획들하게 되지만 for update of는 결과 셋
중에서 특정 컬럼을 포함한 테이블에 대한 lock을 획득하세 됩니다.
- ex) select * from dept, emp
where emp.dept_no = dept.dept_no
and emp.dept_no='1111'
for update of emp.dept_no;
5. FOR UPDATE SKIP LOCKED
- lock이 걸려 있는 레코드를 제외한 나머지 레코드에 lock을 획득
- ex) - 세션1
SELECT * FROM EMP
WHERE EMP_NO = '7934'
FOR UPDATE NOWAIT;
- 세션2
SELECT * FROM EMP
WHERE DEPT_NO = 10
FOR UPDATE WAIT 5; <-- 7934 직원을 포함한 부서의 lock 적용
ERROR at line 1;
ORA-00054: resource busy and acquire with NOWAIT specified
이미 lock이 명시적으로 설정된 레코드를 포함한 레코드에 명시적으로 lock을 설정하려고 하면 에러 발생
SELECT * FROM EMP
WHERE DEPT_NO = 10
FOR UPDATE SKIP LOCKED;
에러가 발생하지 않고 7934 직원을 제외한 부서번호 10을 가진 사용자에 lock 획득
'Skill > DB' 카테고리의 다른 글
QUERY Paging (0) | 2022.09.06 |
---|---|
최종 데이터만 조회하기 (0) | 2022.08.30 |
oracle 연속된 번호 찾기 (0) | 2022.05.20 |
oracle ROW_NUMBER() 예 (0) | 2022.05.20 |
where절에 if문처럼 and조건 사용하기 (0) | 2022.01.19 |
- Total
- Today
- Yesterday
- 여러 컬럼 update
- excel
- 프로젝트명변경
- $.extend
- 전후방탐색
- PostgreSQL
- oracle
- Javascript
- object key
- 진열사랑
- springboot
- sumifs
- caniuse
- ul li로 테이블
- QueryDSL
- @ExceptionHandler
- border-collapse
- DatePicker
- Keycode
- getter
- draw.io
- JQuery
- spring
- element위치
- lombok
- devtools
- 정규식
- setter
- $.each
- CSS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |