본문 바로가기
컴퓨터관련/Oracle

[ORACLE]오라클에서 프로시저, 패키지 등 깨졌는지 확인 및 조치방법

by 빛과 어둠사이 2024. 8. 28.
728x90
반응형
SMALL

오늘은 ORACLE에서 패키지, 프로시저, 펑션등이 깨졌는지 확인하고

이를 조치할 수 있는 방법에 대해서 정리를 해보려고 합니다.

저는 오라클에서 PL/SQL을 많이 사용하고 있습니다.

그런데 이렇게 쓰다 보면 프로시저나 패키지, 펑션 등이 깨지는 경우가 자주 발생합니다.

수정했던 프로시저나 패키지 등을 참조하는 것들이 있다면

깨질 가능성이 높습니다.

그렇기 때문에 PL/SQL 수정하기 전에 현재 상황을 미리 알아놓고,

수정하고 난 다음에 체크를 해서 깨졌는지 안깨졌는지 확인을 하는 것이 

중요하다고 생각을 합니다.

 

그래서 만약 깨진것이 있다면

이 부분은 최대한 빠르게 재컴파일을 해서

조치를 해야 하는 상황이기 때문입니다.

 

그래서 오늘은

SEQUENCE, FUNCTION, PROCEDURE, PACKAGE, PACKAGE BODY, VIEW 등이

깨졌는지 확인을 하고,

일괄로 조치할 수 있는 방법에 대해서 정리를 해보고자 합니다.

 

728x90

 

1. 수정 전 확인

우선 PL/SQL을 수정하기 전에 먼저 현재 상황을 체크를 합니다.

저같은 경우에는 이미 깨진 것들이 있습니다

그런데 이것들은 현재는 사용하지 않고 있는 것들이 대부분입니다.

이러한 것들은 굳이 수정하지 않고 그냥 놔두고 있습니다.

그런데 이것들 외에 추가적으로 깨지거나

문제가 생긴 것이 있는지 확인을 하기 위해서

현재 상태에서 체크를 하는 것입니다.

 

현재 깨진 것들에 대해서 조회하는 쿼리는

다음과 같습니다.

 

select OBJECT_NAME, OBJECT_TYPE 
from dba_objects 
where owner = '오너명' 
and object_type in ('SEQUENCE', 'FUNCTION', 'PROCEDURE', 'PACKAGE', 'PACKAGE BODY', 'VIEW') 
and status = 'INVALID' 
order by OBJECT_TYPE, OBJECT_NAME
;

 

쿼리를 위와 같이 해주시면 되십니다.

위에 한글로 적은 '오너명' 이 부분에

현재 조회를 하고자 하는 오너명을 넣어주시면 되십니다.

그러면 해당 오너가 가지고 있는 것들 중

펑션, 프로시저, 패키지 등에서 깨진 것이 있는지

체크를 해서 나오게 되는 것입니다.

 

 

저는 위처럼 쿼리를 작성하였고,

실행을 해보았습니다.

오너명은 숨겨놓았습니다.

 

위처럼 쿼리를 작성하고 실행을 하게 되면

결과는 아래처럼 나오게 됩니다.

 

 

위처럼 나오게 되었습니다.

위처럼 FUNCTION, PACKAGE, PACKAGE BODY 등

깨진 것들이 나오게 되어있습니다.

 

현재 샘플로 한 것이 개발서버이기도 하고,

현재 사용 안하는 것들도 많아서 더 많이 나오는 것 같네요.

 

저는 이렇게 나오게 되면 해당 값을 복사해놓습니다.

그리고 나중에 비교를 위해 사용을 합니다.

비교하기 쉽게 하기 위해 저는 개인적으로 엑셀에 붙여넣기를 해놓습니다.

 

 

 

2. PL/SQL 수정

이제 PL/SQL, 프로시저, 패키지 등 

수정을 할 것을 수정을 해주시면 되십니다.

이 부분은 각자 맞게 수정을 하는 것이기 때문에

별도의 예제 같은 것도 없습니다.

 

 

 

반응형

 

3. 재확인

PL/SQL을 수정하였다면 이제 다시 재확인을 해봐야 합니다.

1번의 쿼리를 돌려서 확인을 하는 것입니다.

그래서 나온 결과를 1번에서의 결과와 비교를 합니다.

 

그래서 1번에서 나왓던 결과에는 없었는데

3번에서 동일한 쿼리로 돌렸는데 나온다면

해당 프로시저, 패키지 등이 깨진 것입니다.

 

그러면 이 것들에 대해서 조치를 취해야 하는 것입니다.

이제 조치 방법에 대해서 확인을 해보도록 하겠습니다.

 

 

 

4. 조치하기

3번에서 확인을 해서 추가적으로 깨진 것들을 확인을 했습니다.

그러면 이제 조치를 취해야 합니다.

조치를 취하기 전에 우선적으로 해야 하는 것이 있습니다.

OBJECT_TYPE이 PACKAGE BODY였다면, PACKAGE로 변경을 해주는 것입니다.

컴파일을 할 때 PACKAGE BODY를 컴파일 할 필요 없이

PACAKAGE만 COMPILE 해주시면 해더와 바디 모두 컴파일이 되기 때문입니다.

그렇기 때문에 해당 부분은 패키지로 변경을 해주시면 되십니다.

 

저는 3번에서 쿼리르 돌려서

나온 것들이 아래처럼 나오게 되었습니다.

 

위처럼 1번에는 없었는데 3번에만 나온 것들이 이렇게 있는 것입니다.

보면 PROCEDURE와 PACAAGE BODY 이렇게 있네요.

이 중 PACKAGE BODY는 PACKAGE로 변경을 해줍니다.

 

위처럼 변경을 해주었습니다.

이렇게만 해도 되기 때문에 이렇게 해주시면 되십니다.

 

그리고 해당 값들을 바탕으로 아래처럼 쿼리를 작성해주시면 되십니다.

ALTER OBJECT_TYPE OBJECT_NAME COMPILE;

 

위 쿼리는 해당 오브젝트를 재컴파일 하는 명령어입니다.

위에서 OBJECT_TYPE은 PACKAGE, PROCEDURE 등을 넣어주시면 되시고,

PACAGE NAME은 재컴파일 해야 하는 프로시저, 패키지 등의

이름을 넣어주시면 되십니다.

 

 

위처럼 쿼리를 작성해주시면 되십니다.

이렇게 일괄로 작성을 하고 실행을 하면 되십니다.

 

 

그러면 해당 프로시저, 패키지 등이 재 컴파일이 되면서

깨졌던 것들은 조치가 되었을 것입니다.

만약, 이렇게 재 컴파일을 했는데도 깨져있다면

그건 해당 프로시저, 패키지, 펑션 등의 문제이니 이건 확인이 필요한 상황입니다.

 

 

 

위 쿼리를 돌리고 난 다음에 1번에서의 확인 쿼리를 다시 돌립니다.

그래서 1번에서의 결과와 같거나, 적어진다면 문제가 있던 것들은

조치가 완료된 것으로 볼 수가 있습니다.

 

 

SMALL

 

 

오늘은 ORACLE에서 PL/SQL 등을 수정할 때

프로시저, 패키지, 펑션 등 깨진 것을 일괄로 확인하고

조치하는 방법에 대해서 정리를 해보았습니다.

 

이것은 그냥 여러개 깨진것 같아 보일 때도 돌려도 되는 것이고,

저처럼 PL/SQL 수정 전/후 비교를 하는데 사용을 해도 되는 것입니다.

수정 전/후 비교해서 동일하면 상관이 없는데

만약 깨진 것이 있다면 빠른 조치를 할 수 있기 때문에

해당 내용을 하는 것이 저는 개인적으로 좋다고 생각합니다.

 

 

 

 

 

이상으로 오라클에서 프로시저, 패키지, 펑션 등

깨진 것을 확인하고 조치하는 방법이였습니다~

 

 

 

 

 

 

Do it! 오라클로 배우는 데이터베이스 입문:비전공자도 기초부터 확실하게!, 이지스퍼블리싱

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

 

 

 

 

 

728x90
반응형
LIST