데이터 사이언스 DataScience/Data Base 데이터베이스

[Oracle] DDL 중 발생하는 ORA-00054 해결

섭코딩 2024. 5. 31. 20:58

 

ORA-00054 자원이 사용 중이고 NOWAIT가 지정되어 획득되었거나 시간종료가 만료됨

                     resource busy and acquire with NOWAIT specified or timeout expired

 

1. 원인

ALTER와 같은 DDL을 수행했을때 마주칠 수 있는 에러이다.

다른 트랜잭션이 DML 등으로 자원을 잡고 있거나, DDL이 겹칠 경우 발생한다.

 

일반적으로 DDL이 겹치는 경우는 거의 없을 것 같다.

DBA가 동일 오브젝트에 여러개의 세션에서 동시에 DDL을 수행할 확률은 적기 때문이다.


2. 해결방법

테이블, 인덱스에 장시간 Lock이 잡혀있다면 session을 kill 하거나 그 시간대를 피해서 DDL을 하는게 좋지만,

 

온라인 트랜잭션이 충분히 많은 오브젝트는 특이사항이 없는 경우에도 발생할 수 있다.

그럴 때는 순간적으로 발생하는 경합 상황임을 감안해 DDL을 여러번 수행하는 것도 방법이고, 

 

아니면 아래처럼 현재 세션의 DDL LOCK TIMEOUT을 조정해서 경합이 끝날때까지 DDL을 기다렸다가 수행할 수 있다.

-- 세션의 DDL LOCK TIMEOUT을 30초로 설정하는 스크립트
ALTER SESSION SET ddl_lock_timeout = 30;

 

 

반응형