현상
패키지 호출 시 다음과 같은 오류가 발생하며 실행이 중단되는 현상이 발생합니다.
THROW. ec=ERROR_PKG_INSTANCE_INVALID(-14004)
[ Package instance 'PA_SF_SBSN_TR_SFWWORKMT' is invalid.]
SQL
복사
원인
패키지를 사용하는 경우, 각 세션에 해당 패키지가 인스턴스화되어 저장됩니다.
이후 다른 세션에서 해당 패키지가 DDL을 통해 변경되더라도, DDL이 끝난 후에도 기존 세션에는 변경사항이 즉시 반영되지 않습니다. (lazy flush)
이에 따라 다른 세션에서 패키지가 호출되면, 해당 패키지의 인스터스는 old 버전으로 세션에 저장되어 있으므로 새롭게 변경된 패키지로 다시 인스턴스화를 따로 해주어야합니다.
티베로는 패키지 변경 시 새로운 세션에 인스턴스 업데이트를 바로 하지 않기 때문입니다.
호출 시점에 패키지(pkg)와 패키지 인스턴스(pkg instance) 간 불일치가 발생하면, 티베로는 현재 세션의 패키지만 flush한 후 오류(-14004)를 반환하는 현상이 발생합니다.
해결
파라미터 _PSM_NO_PKG_INVAL_ERROR 값을 조정하여 오류 처리 방식을 변경할 수 있습니다.
_PSM_NO_PKG_INVAL_ERROR 값을 Y로 설정하면, 패키지를 인스턴스화하고 바로 재생성하여 정상 수행할 수 있습니다.
•
_PSM_NO_PKG_INVAL_ERROR = Y
◦
패키지 호출 시 패키지(pkg)와 패키지 인스턴스(pkg instance)가 불일치하면, 즉시 패키지 인스턴스를 재생성하여 오류 없이 수행하며, 트랜잭션을 보장합니다.
•
_PSM_NO_PKG_INVAL_ERROR = N (기본값)
◦
패키지 호출 시 불일치가 감지되면 14004 오류가 발생합니다.
◦
이후 다시 호출하면 새로 인스턴스화되어 정상적으로 수행됩니다.