본문 바로가기

Database/ORACLE

ORA-00054 리소스가 사용 중이어서 NOWAIT가 지정되었거나 시간 초과가 만료된 상태로 획득합니다

오류문구

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