programing

Oracle ORA-04068의 빈번한 오류: 기존 패키지 상태가 삭제되었습니다.

cafebook 2023. 7. 27. 22:19
반응형

Oracle ORA-04068의 빈번한 오류: 기존 패키지 상태가 삭제되었습니다.

이 오류는 두 시간마다 실행되는 스크립트에서 하루에 한 번씩 발생하지만 하루 중 다른 시간에 발생합니다.

ERROR at line 1:
ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package body "PACKAGE.NAME" has been
invalidated
ORA-06508: PL/SQL: could not find program unit being called:
"PACKAGE.NAME"
ORA-06512: at line 1

우리가 조사할 수 있도록 이 오류를 발생시킬 수 있는 조건이 무엇인지 누가 나열해 주시겠습니까?

감사해요.

업데이트: 실행하시겠습니까?'ALTER SESSION CLOSE DATABASE LINK DBLINK'패키지의 상태를 무효화하시겠습니까?

이 라이너 하나가 실제로 모든 것을 해결했습니다.

PRAGMA SERIALLY_REUSABLE;

문제가 발생하지 않도록 글로벌 변수가 상태 비저장 상태인지 확인합니다.

패키지에 공용 또는 개인 변수가 있습니다.(그렇죠?)이 변수는 패키지 상태를 형성합니다.세 번째 세션에서 패키지를 컴파일하는 경우.다음 번에 이 패키지에 액세스하면 ORA-04068이 전송됩니다.

패키지의 빌드 타임스탬프는 패키지 세션 상태보다 오래된 것이어야 합니다.

스크립트 실행에 패키지 상태가 필요하지 않은 경우 호출DBMS_SESSION.RESET_PACKAGE스크립트 시작 부분에 있습니다.세션의 모든 패키지 상태를 지웁니다.

또한 확인할 수 있습니다.dba_dependencies또는user_dependencies.

select *
from dba_dependencies
where name = 'YOUR_PACKAGE'
and type = 'PACKAGE' --- or 'PACKAGE_BODY'
and owner = USER --- or USERNAME

패키지가 종속된 개체를 제공합니다.거기서 무슨 일이 일어나고 있는지 확인해 보세요.

우리는 이 문제를 몇 번 겪었고 당분간은 이 문제를 일시적으로 해결하기 위해 스키마를 컴파일하고 있었습니다.며칠 동안 우리는 영구적인 해결책을 찾고 있었습니다.

아래 쿼리에서 동의어의 타임스탬프 차이를 발견했습니다.우리는 동의어를 다시 컴파일했고 그것은 작동했습니다.거의 일주일이 지났고 아직까지는 아무런 문제가 없습니다.여기 우리의 경우에 도움이 된 질문이 있습니다.

**

select do.obj# d_obj,do.name d_name, do.type# d_type, po.obj# p_obj,po.name p_name,
to_char(p_timestamp,'DD-MON-YYYY HH24:MI:SS') "P_Timestamp",
to_char(po.stime ,'DD-MON-YYYY HH24:MI:SS') "STIME", 
decode(sign(po.stime-p_timestamp),0,'SAME','*DIFFER*') X 
from sys.obj$ do, sys.dependency$ d, sys.obj$ po
where P_OBJ#=po.obj#(+) and D_OBJ#=do.obj# 
and do.status=1 /*dependent is valid*/ 
and po.status=1 /*parent is valid*/ 
and po.stime!=p_timestamp /*parent timestamp not match*/ 
order by 2,1;

**

이것이 이 문제를 겪고 있는 누군가에게 도움이 되길 바랍니다.

개체를 변경하여 다른 개체를 비활성화하는 것 같습니다.예를 들어 인덱스를 삭제하면 해당 테이블에 종속된 모든 패키지가 잘못된 상태가 될 수 있습니다.그것은 캐스케이드 효과를 가질 수 있습니다.패키지가 올바르지 않으면 패키지에 종속된 펑션과 이 기능을 사용하는 뷰가 비활성화될 수 있습니다.모든 DDL 쿼리 후에 모든 개체를 다시 컴파일해 보십시오.

언급URL : https://stackoverflow.com/questions/1761595/frequent-error-in-oracle-ora-04068-existing-state-of-packages-has-been-discarde

반응형