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 |
댓글