티스토리 뷰

DB

Oracle SELECT ~ FOR UPDATE (동시성 해결)

snail voyager 2022. 3. 23. 00:19
728x90
반응형

동시성 제어를 위해 특정 Row에 Lock을 거는 Row-Level Exclusive Lock (X Lock)

  • 특정 Row를 변경하기 전 해당 Row를 SELECT 했을 때 다른 Transaction 에서 변경 가능한 동시성 (Phantom Reads) 해결을 위해 사용
  • UPDATE, DELETE 구문처럼 SELECT ~ FOR UPDATE 실행 시 COMMIT/ROLLBACK 전까지 다른 Transaction 에서 SELECT 불가
  • Table Lock 이 아니기 때문에 SELECT COUNT(*) FROM TABLE 같은 구문에 사용 불가
SELECT COUNT
FROM TABLE
WHERE ID = #{ID}
FOR UPDATE;            -- Lock 이 풀릴 때까지 무한정 대기
FOR UPDATE NOWAIT;    -- Lock 이 걸려있으면 대기하지않고 바로 에러 발생
FOR UPDATE WAIT 5;    -- Lock 이 걸려있으면 5초 대기 후 에러 발생
728x90
반응형

'DB' 카테고리의 다른 글

[MySQL] JSON 조회 JSON_EXTRACT  (1) 2023.12.06
Pessimistic Lock vs Optimistic Lock  (0) 2022.09.05
Oracle ORA-01401 SELECT 문에서 발생  (0) 2021.10.14
ORACLE NCHAR vs NVARCHAR2  (0) 2021.10.07
Mybatis 글자수 4000bytes 이상 ora-01461 에러  (0) 2021.02.04
반응형
300x250