오류문구
ORA-00054 리소스가 사용 중이어서 NOWAIT가 지정되었거나 시간 초과가 만료된 상태로 획득합니다
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
원인
현재 리소스가 사용 중이라서 대기중인 상태라 응답을 할 수 없는 상황입니다. 주로 락이 걸려 있는 테이블에 접근할 시 나오는 오류 문구입니다.
아주 드문 경우로 대량의 데이터에 대한 쿼리를 수행할 때 발생하기도 합니다.
해결 방법
1. Commit 혹은 Rollback을 실행
가장 간단한 방법으로 대기중인 자원을 해제시켜줍니다.
2. 락이 걸린 테이블을 찾아 해제
먼저 아래의 쿼리로 락이 걸린 테이블을 찾습니다.
1 2 3 4 5 6 7 8 9 10 | SELECT O.OBJECT_NAME, S.SID, S.SERIAL#, P.SPID, S.PROGRAM, SQ.SQL_FULLTEXT, S.LOGON_TIME FROM V$LOCKED_OBJECT L, DBA_OBJECTS O, V$SESSION S, V$PROCESS P, V$SQL SQ WHERE L.OBJECT_ID = O.OBJECT_ID AND L.SESSION_ID = S.SID AND S.PADDR = P.ADDR AND S.SQL_ADDRESS = SQ.ADDRESS; | cs |
그리고 나온 SID 와 SERIAL을 바탕으로 해당 ALTER구문을 실행합니다.
1 | ALTER SYSTEM KILL SESSION 'SID,SERIAL#'; | cs |