티스토리 뷰

Skill/DB

oracle for update

진열사랑 2022. 8. 17. 15:23

출처 :

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
링크
«   2024/05   »
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 31
글 보관함