본문 바로가기
IT정보

오라클 Invalid Object

by 디노프랭키 2023. 5. 19.
728x90

오라클 Invalid Object란?

오라클 Invalid Object란 데이터베이스에서 정상적으로 컴파일이 되지 않은 데이터베이스 객체를 나타냅니다. Invalid Object가 발생할 수 있는 원인은 다양하게 있으나 그중 몇 가지 예를 들자면 참조하는 다른 객체가 없는 경우, 객체를 참조하는 권한이 변경되거나 삭제돼서 권한이 없는 경우, 객체를 변경, 삭제하는 경우, 객체를 참조하는 패키지가 변경되거나 삭제된 경우, 객체의 소유자가 변경이 된 경우 등이 있습니다.

오라클 Invalid Object ERROR

오라클 Invalid Object ERROR종류에 대해 살펴보겠습니다.

  • ORA-00942: table or view does not exist - 데이터베이스에서 테이블을 찾을 수 없다는 오류 입니다.
  • ORA-04068: existing state of packages has been discarded
    ORA-04061:existing state of package body "PACKAGE_NAME" has been invalidated
    ORA-04065: not executed, altered or dropped package body "PACKAGE_NAME" - 패키지나 프로시저를 실행할려고 할때 발생할 수 있는 오류이며 패키지나 프로시저의 BODY부분이 현재 유효하지 않은 상태이기 때문에 오류가 발생합니다. 패키니나 프로시저의 선언부(SPEC)가 변경,삭제 된 경우이거나 패키지나 프로시저가 참조하고 있는 다른 객체의 변경, 삭제가 발생한 경우에 이 같은 오류 메세지를 볼 수 있습니다. ORA-04068, ORA-04061, ORA-04065는 경우에 따라 중첩되어 발생할 수 있습니다.

오라클 Invalid Object 해결방법

오라클 Invalid Object를 해결하는 방법은 여러가지가 있지만 제가 주로 사용하기도 하고 쉽고 간편한 쿼리로 처리하는 방법을 알려드리겠습니다.

-- Invalid Object 조회
SELECT *
FROM dba_objects
WHERE object_type in
('VIEW','FUNCTION','TRIGGER','PROCEDURE','PACKAGE', 'PACKAGE BODY')
AND status='INVALID'
and owner IN ('계정명')

-- Invalid Object 실행 쿼리 작성
SELECT'alter '||DECODE(object_type,'PACKAGE BODY', 'PACKAGE',object_type)||' '||owner||'.'||object_name|| ' compile'|| DECODE(object_type,'PACKAGE BODY',' body;',';')
FROM dba_objects
WHERE object_type in
('VIEW','FUNCTION','TRIGGER','PROCEDURE','PACKAGE', 'PACKAGE BODY')
AND status='INVALID'
and owner IN ('계정명')
ORDER BY owner,decode (object_type,'VIEW','A','FUNCTION','B', 'TRIGGER','C','PROCEDURE','D', 'PACKAGE','E','PACKAGE BODY','F') ,object_name;

Invalid Object 실행 쿼리를 수행하면 alter 스크립트가 결과로 표시되는데 이걸 복사해서 다시 실행하면 Invalid Object를 재컴파일 할 수 있습니다. Spool 명령어를 이용하면 좀 더 간편하게 한번에 처리 할 수 있습니다. Spool 명령어를 이용하는 방법은 다음과 같습니다.

-- 저장할 공간을 만듭니다.
Spool on ./object_compile.sql;

-- 실행할 쿼리를 작성합니다.
SELECT'alter '||DECODE(object_type,'PACKAGE BODY', 'PACKAGE',object_type)||' '||owner||'.'||object_name|| ' compile'|| DECODE(object_type,'PACKAGE BODY',' body;',';')
FROM dba_objects
WHERE object_type in
('VIEW','FUNCTION','TRIGGER','PROCEDURE','PACKAGE', 'PACKAGE BODY')
AND status='INVALID'
and owner IN ('계정명')
ORDER BY owner,decode (object_type,'VIEW','A','FUNCTION','B', 'TRIGGER','C','PROCEDURE','D', 'PACKAGE','E','PACKAGE BODY','F') ,object_name;

-- Spool의 기록을 종료합니다.
Spool off;

-- 파일을 실행합니다.
@object_compile.sql;
728x90

'IT정보' 카테고리의 다른 글

이지블루 EASYBLUE 사용법  (34) 2023.05.23
오라클 오브젝트 비교 검증쿼리 만들기  (30) 2023.05.20
오라클 그룹순번 함수  (32) 2023.05.17
오라클 통계쌓기  (58) 2023.05.15
키보드 토글키 알림  (44) 2023.05.14

댓글