DBAtlas · 데이터베이스 운영 아틀라스

ORA-04021: timeout occurred while waiting to lock object (객체 락 대기 중 타임아웃 발생)

Oracle

의미

객체(패키지, 프로시저, 타입 등)에 대한 library cache lock/pin을 획득하려고 기다리는 중 타임아웃이 발생했다. 보통 다른 세션이 실행 중이거나 락을 건 PL/SQL 객체를 컴파일하거나 변경하려 할 때 발생한다.

원인

변경/컴파일하려는 객체가 다른 세션에서 활발히 실행 중이거나 다른 DDL에 의해 잠겨 있어 배타적 library cache lock을 획득할 수 없다. 장시간 실행되는 프로시저 호출이나 멈춘 세션이 락을 보유하고 있을 수 있다.

해결 방법

객체를 잠근 세션을 찾는다: SELECT * FROM dba_kgllock WHERE kgllkhdl IN (SELECT p1raw FROM v$session WHERE event LIKE 'library cache%'); 또는 v$access와 v$session으로 객체를 사용하는 세션을 식별한다. 워크로드가 낮은 유지보수 시간에 DDL/컴파일을 재시도한다. 필요하면 세션을 안전하게 종료한다. 애플리케이션을 잠시 중지하면 락을 획득하기 쉬워진다.

DBAtlas에서 열기 →

같은 데이터베이스의 다른 항목