오라클(Oracle)에서 인덱스를 생성할 때 가끔 NOWAIT 옵션을 사용하는 경우가 있습니다. 이 옵션은 언제, 왜 사용하는 걸까요?


✅ NOWAIT 옵션이란?

NOWAIT 옵션은 인덱스를 생성할 때 대상 테이블이 잠겨 있으면 즉시 에러를 발생시키는 옵션입니다. 기본적으로는 오라클이 잠금이 풀릴 때까지 대기하지만, NOWAIT을 사용하면 대기하지 않고 바로 실패합니다.


🧱 기본 문법

CREATE INDEX 인덱스이름 ON 테이블이름(컬럼이름) NOWAIT;
 
예시
CREATE INDEX emp_idx ON employees(emp_no) NOWAIT;



❗ NOWAIT 사용 시 발생 가능한 에러

만약 인덱스를 생성하려는 테이블이 다른 세션에서 DML 작업 중이라면 다음과 같은 오류가 발생합니다


ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired


이 오류는 자원이 사용 중이므로 NOWAIT에 따라 즉시 실패했다는 뜻입니다.


💡 언제 사용하면 좋을까?

  • 자동화된 배치 스크립트에서 불필요한 대기를 피하고 싶을 때
  • 락이 자주 발생하는 테이블에서 인덱스 생성 시, 실패 후 예외 처리를 하고 싶은 경우
  • 특정 시점에 인덱스를 만들 수 없으면 그냥 건너뛰는 전략이 필요한 상황


⏱ WAIT 옵션도 있다!

Oracle 18c 이상에서는 WAIT n 옵션을 사용해, 일정 시간(초) 동안만 대기할 수도 있습니다

CREATE INDEX emp_idx ON employees(emp_no) WAIT 10;


이 경우 10초 동안 락이 풀리기를 기다리고, 풀리지 않으면 실패합니다.

🔚 정리

옵션설명
(기본값)락이 풀릴 때까지 무기한 대기
NOWAIT락이 걸려 있으면 즉시 실패
WAIT nn초 동안 대기, 이후 실패 (18c 이상)

Oracle에서 인덱스 생성 시 잠금 문제를 피하고 싶을 땐 NOWAIT 옵션을 적극 활용해보세요. 상황에 맞는 예외 처리를 더해 안정적인 배치 작업을 만들 수 있습니다!