오라클(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 n | n초 동안 대기, 이후 실패 (18c 이상) |
Oracle에서 인덱스 생성 시 잠금 문제를 피하고 싶을 땐 NOWAIT 옵션을 적극 활용해보세요. 상황에 맞는 예외 처리를 더해 안정적인 배치 작업을 만들 수 있습니다!