300x250
Oracle에서 인덱스를 생성할 때 NOWAIT 옵션을 사용하면, 잠금 대기 없이 즉시 인덱스를 생성하거나, 잠금이 발생할 경우 에러를 반환합니다.
사용법
CREATE INDEX index_name
ON table_name (column1, column2, ...)
NOWAIT;
기본 동작
• NOWAIT 없이 실행하면, 대상 테이블이 다른 트랜잭션에 의해 잠겨 있는 경우 인덱스 생성이 잠금 해제될 때까지 대기합니다.
• NOWAIT를 사용하면, 테이블이 잠겨 있는 경우 즉시 에러를 반환합니다.
에러 메시지
• NOWAIT를 사용할 때 테이블이 잠겨 있는 경우 다음과 같은 에러가 발생할 수 있습니다:
• ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
• 이는 해당 테이블이 다른 트랜잭션에 의해 잠금 상태임을 나타냅니다.
★ 예제
1. 일반적인 인덱스 생성
• 테이블 employees가 잠겨 있지 않으면 인덱스가 생성됩니다.
• 잠겨 있으면 ORA-00054 에러가 반환됩니다.
CREATE INDEX idx_emp_name
ON employees (last_name, first_name)
NOWAIT;
2. 복합 인덱스 생성
CREATE INDEX idx_sales_date
ON sales (region_id, sale_date)
NOWAIT;
NOWAIT 사용 시 주의사항
1. 대상 테이블이 잠길 가능성이 높은 경우
• 테이블이 다른 트랜잭션에서 사용 중이라면 인덱스 생성이 실패할 수 있습니다.
• NOWAIT를 사용할 때, 실행 전 테이블에 잠금이 걸리지 않도록 관리해야 합니다.
2. 대안 - ONLINE 옵션
• Oracle 12c 이상에서는 ONLINE 옵션을 사용해 테이블 잠금을 피할 수 있습니다.
CREATE INDEX index_name
ON table_name (column_name)
ONLINE;
300x250
'IT > Oracle' 카테고리의 다른 글
오라클 enq: RO - fast object reuse 락 (0) | 2025.02.23 |
---|---|
GROUP BY를 사용 시 성능과 효율성 향상 방안 (0) | 2025.02.22 |
오러클 인덱스 없는 테이블에 빠른 데이터 저장 방법 (0) | 2025.02.22 |
CONCAT 함수의 인덱스 수행 여부 (0) | 2025.02.22 |
유형별 락(Lock) (2) | 2025.02.20 |