문제

이 질문을 만든 시나리오 :

우리는 다른 패키지의 종속성 인 패키지를 가지고 있으며 때로는 "부모"패키지를 변경하면 종속 패키지가 유효하지 않지만 때로는 그렇지 않습니다.

그것은 전에 우리를 놀라게했습니다.

무효화의 원인을 단순히 이해하여 예측/계획을 세울 수 있습니다.

도움이 되었습니까?

해결책

패키지가 의존하는 객체 변경 (예 : 테이블, 뷰, 트리거, 기타 패키지)은 패키지를 자동으로 무효로 표시합니다. Tuinstoel 위의 Tuinstoel에 대해 Oracle은 패키지가 처음 사용될 때 패키지를 다시 컴파일하기에 충분히 똑똑합니다.

이에 대해 걱정하는 경우 스키마를 변경할 때마다 (예 : 테이블, 뷰, 트리거, 절차), 실행 DBMS_UTILITY.compile_schema (또는 DBA가 있도록하십시오). 이렇게하면 모든 패키지를 컴파일하고 어려운 방법을 찾기 전에 오류가있는 곳 또는 경우를 알려줍니다.

다른 팁

또는 다음 테이블을 쿼리하여 어떤 종속성을 가지고 있는지 확인할 수 있습니다.

   select *
   from dba_dependencies
   where name = 'YOUR_PACKAGE'
   and referenced_owner = 'ANYUSER' --- Comment this out if you are looking for yourself
   and owner = USER --- Or can be set to any user

이것은 모든 종속성을 보여줍니다. 객체의 경우 query user_dependencies.

BTW, 내가 상황에 대해 완전히 틀렸다면 ... 사전 사과

놀라움에 사로 잡혔습니까?

그 의미가 무엇인지 확실하지 않습니다 ...

생산에서 무언가가 깨 졌습니까?

정확히 무슨 일이 있었나요?

내가 묻는 이유는 가능한 모든 변화의 결과를 이해하는 것이 결과를 다루는 것보다 훨씬 어렵 기 때문입니다. 무효화가 문제가되는 이유는 무엇입니까? 내 생각에 당신은 당신이 당신의 응용 프로그램에서 "기존 패키지 상태가 버려 졌기 때문에"오류를 받았기 때문입니다. 그게 진짜 문제?

다시 한 번 나는 그것이 댓글을 달 때 버전에 따라 변경 될 때 변경 목록 대신에 그것을 처리합시다. (예를 들어 11g은 테이블 대신 테이블의 열까지 의존성을 추적합니다).

이것은 당신에게 중요한 오류처럼 보이지 않을 수 있습니다 만약에 패키지 상태를 사용하지 않습니다. 당신이 이것이 중요한 오류가 될 것이고 당신은 놀라지 않았을 것입니다. 그래서 나는 당신이 아니라고 생각합니다.

이 오류는 무시해도 괜찮습니다. 안전하게 무시할 수 있으므로 클라이언트 앱을 코딩 하여이 오류를 무시하고 통화를 다시 시도 할 수 있습니다. 다른 사람들이 지적했듯이 Oracle이 패키지를 다시 컴파일 할 것이라고 지적했기 때문입니다. 이것은 가치있는 운동입니다. 변경할 때 걱정해야 할 모든 것을 알기보다는 긴급 수정 사항에서 그 중 하나를 잊어 버리기 때문에 앱은 걱정없이 처리하고 계속 이동합니다.

나는 Thomas Jones-Low에 동의하지만 긴 세션과 재 컴파일과 관련하여 몇 가지 더 많은 문제가 있습니다.

세션에서 패키지를 참조하고 같은 세션에서 해당 패키지 (또는 종속 패키지)가 다시 컴파일되면 Oracle 오류가 발생합니다.

세션에서 패키지를 참조하면 일반적으로 패키지를 해당 세션에 대해 무효화하지 않고도 패키지를 변경할 수 없습니다. 이는 패키지가 자주 변경되는 개발 환경의 경우 특별한 문제이지만 전체 환경을 낮추지 않고 작은 패치를 수행하려는 생산 환경에서도 문제가됩니다. 이 오류는 변경된 패키지에 오류가없는 경우에도 발생합니다.

Thomas Jones-Low의 답변 외에도 패키지 본문 만 수정하면 종속 객체가 유효하지 않은 것으로 표시되지 않을 수 있습니다.

그러나 패키지 사양을 수정하자마자 발생해야합니다.

유효하지 않은 Oracle 패키지를 실행하려고하면 Oracle이 컴파일을 시도합니다. Oracle을 컴파일 한 후에도 유효하지 않은 경우에만 예외가 발생합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top