Oracle 패키지가 유효하지 않게 되는 상황은 무엇입니까?
이 질문을 작성한 시나리오:
다른 패키지의 종속성인 패키지가 있으며, "상위" 패키지를 변경하면 종속 패키지가 무효화될 수 있지만 그렇지 않을 수도 있습니다.
그것은 전에 우리를 놀라게 한 적이 있습니다.
무효화의 원인을 간단히 파악하여 예측/계획할 수 있도록 하는 것이 매우 유용할 것입니다.
패키지가 의존하는 개체(예: 테이블, 보기, 트리거, 기타 패키지)를 변경하면 패키지가 자동으로 유효하지 않은 것으로 표시됩니다.위의 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
모든 종속성이 표시됩니다.개체에 대해 user_dependencies를 쿼리합니다.
저는 Thomas Jones-Low의 의견에 동의하지만 긴 세션 및 재컴파일과 관련하여 몇 가지 문제가 더 있습니다.
세션에서 패키지를 참조하고 해당 패키지(또는 종속 패키지)가 동일한 세션 중에 다시 컴파일되면 "ORA-06508: PL/SQL: 호출 중인 프로그램 유닛을 찾을 수 없습니다"라는 오류 메시지가 표시됩니다.
세션에서 패키지를 참조한 후에는 일반적으로 해당 세션에 대해 패키지를 무효화하지 않고는 패키지를 변경할 수 없습니다.이는 패키지가 자주 변경되는 개발 환경의 경우 특히 문제가 되지만 전체 환경을 중단하지 않고 작은 패치를 수행하려는 프로덕션 환경의 경우에도 문제가 됩니다.이 오류는 변경된 패키지에 오류가 없는 경우에도 발생합니다.
그나저나, 내가 상황에 대해 완전히 틀렸다면...사전 사과
깜짝 놀랐나요?
그게 무슨 뜻인지는...
생산 과정에서 뭔가 고장이 났습니까?
정확히 무슨 일이 일어났습니까?
제가 질문하는 이유는 모든 가능한 변화의 결과를 이해하는 것이 결과를 다루는 것보다 훨씬 어렵기 때문입니다.무효화가 문제가 되는 이유는 무엇입니까?애플리케이션에서 "기존 패키지 상태가 삭제되었습니다" 오류가 발생했기 때문인 것 같습니다.그게 진짜 문제야?
다시 한 번 저는 그것이 그렇다고 생각합니다. 만약 그렇다면, 제가 의견을 넣었을 때 버전별로 특정한 변경 사항 목록 대신 그것만 처리합시다. (예를 들어 11g은 전체 테이블이 아닌 테이블의 열까지 종속성을 추적합니다.)
패키지 상태를 사용하지 않는 경우에는 이 오류가 중요한 오류로 보이지 않을 수 있습니다.만약 당신이 그랬다면 이것은 중요한 오류일 것이고 당신은 놀라지 않았을 것입니다. 그래서 저는 당신이 그렇지 않다고 생각합니다.
사용자가 아니기 때문에 이 오류는 무시해도 됩니다.이를 안전하게 무시할 수 있으므로 클라이언트 앱을 코딩하여 이 오류를 무시하고 호출을 다시 시도할 수 있습니다. 다른 사람들이 지적했듯이 Oracle이 패키지를 다시 컴파일할 것이기 때문입니다.이것은 가치 있는 운동입니다.왜냐하면 변경을 할 때 걱정해야 할 가능성이 있는 모든 것을 아는 것이 아니라, 비상시 수정 사항 중 하나를 잊어버렸을 때, 앱이 걱정 없이 처리하고 계속 진행할 것이기 때문입니다.
Thomas Jones-Low의 답변 외에도 패키지 BODY만 수정하면 종속 개체가 잘못된 것으로 표시되지 않을 수 있습니다.
그러나 패키지 사양을 수정하는 즉시 이러한 작업이 수행됩니다.
잘못된 Oracle 패키지를 실행하려고 하면 Oracle이 컴파일을 시도합니다.Oracle을 컴파일한 후에도 유효하지 않은 상태로 남아 있어야만 예외가 발생합니다.
언급URL : https://stackoverflow.com/questions/626267/what-situations-cause-oracle-packages-to-become-invalid
'programing' 카테고리의 다른 글
PowerShell 패키지 관리, 패키지 공급자를 제거하는 방법은 무엇입니까? (0) | 2023.08.29 |
---|---|
VBA - 모델이 없는 UserForm 인스턴스를 제대로 제거합니다. (0) | 2023.08.24 |
github에서 상호 참조 커밋 (0) | 2023.08.24 |
UserControl, WebControl, RenderedControl 및 CompositeControl의 차이점은 무엇입니까? (0) | 2023.08.24 |
PL/SQL: 테이블에서 연결 배열로 선택 (0) | 2023.08.24 |