ORA-00054: 리소스가 사용 중이어서 NOWAIT가 지정되었거나 시간 초과가 만료된 상태로 획득합니다. resource busy and acquire with nowait specified or timeout expired

ORA-00054: 리소스가 사용 중이어서 NOWAIT가 지정되었거나 시간 초과가 만료된 상태로 획득합니다. ORA-00054: resource busy and acquire with nowait specified or timeout expired 해당과 같은 오류가 발생한다면 다른 세션에서 리소스를 사용 중일 가능성이 높습니다. 아래의 그림을 통해 이해해 봅시다.

리소스를 사용 중일 때 다른 세션에서 리소스를 수정을 시도하려는 경우 ORA-00054 현상이 발생할 수 있습니다.

세션1번에서 [COLV] 칼럼을 'VVVV' 로 업데이트를 진행 중이라고 가정해 봅시다. 아직 커밋/롤백 이전 단계입니다.

세션 A에서 사용하고 있으므로 세션 B에서 수정 시도 시  NOWAIT 지정으로 시간 초과가 만료된 상태를 획득합니다.

이때 세션2번에서 해당 리소스를 사용하려고 시도하는 경우 오류가 발생합니다. ORA-00054: resource busy and acquire with nowait specified or timeout expired

LOCK SESSION 정보를 확인하는 기능을 안내해드리겠습니다.

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

LOCK SESSION을 한 번 확인해 봅시다. [SID] 가 272 이고 [SERIAL#] 이 25119 입니다.

SELECT V$SESSION.SID,
       V$SESSION.SERIAL#,
       V$SESSION.*,
       V$LOCK.*,
       DBA_OBJECTS.*
  FROM V$SESSION, V$LOCK, DBA_OBJECTS
 WHERE     V$SESSION.SID = V$LOCK.SID
       AND V$LOCK.ID1 = DBA_OBJECTS.OBJECT_ID
       AND DBA_OBJECTS.OBJECT_NAME = 'TB_TEST'

세션 킬 을 진행해 보겠습니다. 

ALTER SYSTEM KILL SESSION '272, 25119'

알터 시스템은 신중하게~

공동작업을 하는 경우는 이러한 알터 시스템을 이용하는 데 신중하셔야 합니다.
초급개발자는 혹시라도 누군가가 작업을 하고 있는지 여부를 한 번 확인해보시는 게 좋을 것입니다.

스스로 조심하기~

그리고 본인이 업데이트/딜리트 등의 테스트 작업도중에 장시간(점심시간이라든지) 자리를 비우는 경우에는 커밋/롤백 처리를 고려해 봐야 합니다.
오래 전 일이기는 한데, 실수로 주요 테이블에 대한 리소스를 사용한 상태로 자리를 비운 직원으로 인해 시스템이 한동안 마비된 적이 있었답니다.

알터 시스템 이후 값을 변경해 보았습니다. 오류 없이 잘 진행이 될 것입니다.

댓글