ORA-00494: enqueue held for too long by 'inst N, osid M' (enqueue가 너무 오래 보유됨)
Oracle의미
중요한 리소스 enqueue(예: CF - control file enqueue)를 프로세스가 허용 시간보다 훨씬 오래 보유해, Oracle이 시스템 행을 방지하기 위해 해당 프로세스를 종료했다. alert.log에 'killing enqueue blocker' 항목과 함께 나타난다.
원인
백그라운드 또는 사용자 프로세스가 I/O 병목, 높은 CPU 압박, OS 정체(swapping, 느린 디스크)로 인해 중요한 enqueue를 허용 시간 이상 보유했다. control file(CF) enqueue의 경우 이 시간은 _controlfile_enqueue_timeout(기본 900 s)으로 설정된다. 숨겨진(underscore) 파라미터는 Oracle Support의 안내하에서만 변경해야 한다. 보통 스토리지 지연이나 LGWR/CKPT 같은 느린 프로세스가 원인이다.
해결 방법
alert.log와 종료된 프로세스의 trace 파일을 검토해 어떤 enqueue(보통 control file)와 어떤 백그라운드 프로세스가 원인인지 파악한다. 실제 원인은 보통 스토리지/I/O 지연이므로 디스크 응답 시간, multipath, 컨트롤러 상태를 확인한다. CPU/메모리 압박과 swap 사용을 줄인다. 재발하면 trace 분석 결과를 Oracle Support와 공유한다.
같은 데이터베이스의 다른 항목
- ORA-01102cannot mount database in EXCLUSIVE mode
- ORA-29913error in executing ODCIEXTTABLEOPEN callout (ODCIEXTTABLEOPEN callout 실행 오류)
- ORA-19804cannot reclaim N bytes disk space from M bytes limit (M바이트 한도에서 N바이트 디스크 공간을 회수할 수 없음)
- ORA-04021timeout occurred while waiting to lock object (객체 락 대기 중 타임아웃 발생)
- ORA-04061existing state of package/procedure has been invalidated (패키지/프로시저의 기존 상태가 무효화됨)
- ORA-01466unable to read data - table definition has changed (데이터를 읽을 수 없음 - 테이블 정의 변경됨)
- ORA-08176consistent read failure; rollback data not available (consistent read 실패. rollback 데이터 없음)