Back-End/DB

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

김검정 2025. 4. 3. 17:28

컬럼 삭제 중 해당 에러가 떴다. 

 

원인

  • 테이블이 다른 세션에서 사용 중이다.

다른 사람이 테이블에 대해 SELECT나 UPDATE를 하고 있거나, 트랜잭션이 열려 있어서 락이 걸려 있는 상태이다. Oracle은 ALTER TABLE 같은 DDL 문장을 실행할 때 해당 테이블에 대해 exclusive lock을 걸려고 시도하는데, 이미 누군가 쓰고 있다면 그 락을 못 걸고 에러가 난다.

 

누군가 테이블을 사용하고 있군... 

 

 

해결 방법

  1. 잠깜 기다렸다가 다시 시도 : 누군가 사용하고 있다는건 일시적인 현상이므로 가장 직관적인  해결 방법인것 같다.
  2. 락 걸린 세션 확인하기(DBA 권한 필요)
  3. 락 잡고 있는 세션 종료(주의! 꼭 필요한 경우에만 진행한다.)

* 락 걸린 세션 확인 쿼리

SELECT
  l.session_id,
  s.serial#,
  s.username,
  s.status,
  o.object_name
FROM
  v$locked_object l
  JOIN dba_objects o ON l.object_id = o.object_id
  JOIN v$session s ON l.session_id = s.sid
WHERE
  o.object_name = 'A';

 

 

* 세션 종료

ALTER SYSTEM KILL SESSION '세션ID,시리얼번호' IMMEDIATE;