패키지의 기존 상태가 버려졌습니다 오류와 PRAGMA SERIALLY_REUSABLE 0 2 10,826

by 아라온 PRAGMA SERIALLY_REUSABLE [2015.03.26 16:03:08]


안녕하십니까!?  항상 도움받고 있는 개발자입니다^^

다름이 아니라 패키지 컴파일 후 현업에서 띄워놓은 C# 프로그램에서 오류가 발생하는 상황이 생겨 문의드립니다.

오류는 다음과 같습니다.
ORA-04068: 패키지의 기존 상태가 버려졌습니다
ORA-04061: package body "GAMA.PKG_KD001"의 기존상태가 무효화되었습니다
ORA-04065: 실행 불가, package body "
GAMA.PKG_KD001"이(가) 변경 또는 삭제되었습니다.
....

질문내용은 구글링을 하다가 오라클 Docs 에서 찾은 방식인데...
패키지 선언부와 바디에 각각  "PRAGMA SERIALLY_REUSABLE" 요놈을 넣으면 오류가 나지 않는것 같습니다.
아직 전체적인 현업 테스트는 하지 않았고 테스트환경에서 잠시 확인만 했는데 이게 무엇인지 궁금하네요.

CREATE OR REPLACE PACKAGE PKG_KD001 AS
    PRAGMA SERIALLY_REUSABLE;


CREATE OR REPLACE PACKAGE BODY PKG_KD001 AS
    PRAGMA SERIALLY_REUSABLE;

 

즉, "PRAGMA SERIALLY_REUSABLE" 요녀석이 정확히 어떤 역활을 하는것인지 궁금합니다.
영문내용이라 잘 이해가 안되서요..ㅠ.ㅠ  부탁드립니다... (__)

참조한 사이트는 이곳입니다.
http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/packages.htm#LNPLS99977

by 임상준 [2015.03.26 18:33:27]

잠깐 읽어봤는데 정확하지는 않지만 메모리 확보를 위해서 패키지 상태를 sga 에 공유 리소스로 두고 call 할 때마다 불러오는 개념인 것 같네요.. call 범위 안에서만 package state 가 유지(일반적으로는 세션 레벨에서 유지) 됨에 따라 발생하는 transaction 측면에서의 결과값 차이는 같은 문서에 예시 패키지로 나와 있으니 테스트 해 보시면 될 것 같습니다.

4061 에러는 패키지 스펙 부분에서 변수나 타입 같은거 썼을 때 한 세션에서 내용 바꾸고 컴파일하면 다른 세션들에서 처음 1회씩 에러가 납니다, 세션에서 유지하고 있던 정보들을 패키지가 바뀌었으므로 한번씩 무효화 시켜 줘야 해서...


by 아라온 [2015.04.01 09:39:42]
답변 감사합니다.^^
 
이 오류가 스펙부분에서 변수를 선언한 경우 1회씩 나는게..  패키지에서 사용할 전역변수가 있거든요.
이녀석이 있으면 1회씩 오류가 나는건가요???  ㅠ.ㅠ
 
그리고 무효화 시켜줘야 한다는 말씀을 하셧는데....  어떤식으로 해야되는건지 감이 좀 잡히지 않습니다. 조금만 더 상세히 말씀해주시면 안될까요? ( __)
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입