ORA-00054: 리소스가 사용 중이어서 NOWAIT가 지정되었거나 시간 초과가 만료된 상태로 획득합니다. (ORA-00054: resource busy and acquire with nowait specified or timeout expired) 해당과 같은 오류가 발생한다면 다른 세션에서 리소스를 사용 중일 가능성이 높습니다. 아래의 그림을 통해 이해해 봅시다.
ORA-00054: 리소스가 사용 중이어서 NOWAIT가 지정되었거나 시간 초과가 만료된 상태로 획득합니다.
세션1번에서 [COLV] 칼럼을 'VVVV' 로 업데이트를 진행 중이라고 가정해 봅시다. 아직 커밋/롤백 이전 단계입니다.
이때 세션2번에서 해당 리소스를 사용하려고 시도하는 경우 오류가 발생합니다. ORA-00054: resource busy and acquire with nowait specified or timeout expired
ORA-00054: resource busy and acquire with nowait specified or timeout expired
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'
알터 시스템은 신중하게~
공동작업을 하는 경우는 이러한 알터 시스템을 이용하는 데 신중하셔야 합니다.
초급개발자는 혹시라도 누군가가 작업을 하고 있는지 여부를 한 번 확인해보시는 게 좋을 것입니다.
스스로 조심하기~
그리고 본인이 업데이트/딜리트 등의 테스트 작업도중에 장시간(점심시간이라든지) 자리를 비우는 경우에는 커밋/롤백 처리를 고려해 봐야 합니다.
오래 전 일이기는 한데, 실수로 주요 테이블에 대한 리소스를 사용한 상태로 자리를 비운 직원으로 인해 시스템이 한동안 마비된 적이 있었답니다.
알터 시스템 이후 값을 변경해 보았습니다. 오류 없이 잘 진행이 될 것입니다.