ORA-04061: existing state of package/procedure has been invalidated (패키지/프로시저의 기존 상태가 무효화됨)
Oracle의미
호출된 PL/SQL 객체(패키지, 프로시저, 함수)가 의존하는 객체가 변경되어 기존 상태가 무효화되었다. ORA-04068과 함께 나타나는 상태 손실 조건의 변형이며, 세션이 보유한 패키지 상태가 더 이상 유효하지 않다.
원인
세션이 패키지를 사용하는 동안 해당 패키지나 의존 객체에 DDL이 적용되었다(테이블 구조 변경, 재컴파일, 권한 변경). 그 결과 세션의 기존 패키지 상태가 무효화되었다. 애플리케이션 실행 중 스키마 변경이 이루어지는, 배포가 잦은 환경에서 나타난다.
해결 방법
같은 호출은 보통 두 번째 시도에서 성공한다(상태가 초기화되었으므로). 애플리케이션에서 이 오류를 잡아 안전하게 재시도한다. 스키마 변경은 애플리케이션 트래픽이 적을 때나 유지보수 시간에 수행한다. 무효 객체를 일괄 컴파일한다: EXEC DBMS_UTILITY.COMPILE_SCHEMA('APP_SCHEMA'); 패키지 상태(전역 변수)를 최소화하는 설계가 이 영향을 줄인다.
같은 데이터베이스의 다른 항목
- ORA-19804cannot reclaim N bytes disk space from M bytes limit (M바이트 한도에서 N바이트 디스크 공간을 회수할 수 없음)
- ORA-00494enqueue held for too long by 'inst N, osid M' (enqueue가 너무 오래 보유됨)
- ORA-04021timeout occurred while waiting to lock object (객체 락 대기 중 타임아웃 발생)
- ORA-01466unable to read data - table definition has changed (데이터를 읽을 수 없음 - 테이블 정의 변경됨)
- ORA-08176consistent read failure; rollback data not available (consistent read 실패. rollback 데이터 없음)
- ORA-00020maximum number of processes (N) exceeded (최대 프로세스 수(N) 초과)
- ORA-01113file N needs media recovery