ORA-00054: Resource busy and acquire with NOWAIT specified or timeout expired
Oracle의미
락을 걸려는 리소스(행 또는 테이블)를 다른 세션이 잠그고 있으며, NOWAIT가 지정되었거나 DDL_LOCK_TIMEOUT이 만료되어 즉시 획득하지 못했다.
원인
보통 다른 트랜잭션이 테이블을 잠그고 있는 동안 DDL(ALTER TABLE, DROP, CREATE INDEX)을 시도한 경우, 또는 SELECT ... FOR UPDATE NOWAIT로 잠긴 행을 만난 경우.
해결 방법
락을 보유한 세션을 찾는다: SELECT * FROM v$locked_object. v$session과 v$lock을 조인해 블로킹 세션을 식별한다. 트랜잭션이 끝나기를 기다리거나, 필요하면 ALTER SYSTEM KILL SESSION으로 종료한다. DDL에는 대기 시간을 설정할 수 있다: ALTER SESSION SET DDL_LOCK_TIMEOUT = 60; DDL은 한가한 유지보수 시간대에 실행한다.