출처 :  https://kr.forums.oracle.com/forums/thread.jspa?messageID=1528813&



SAP같은 erp시스템의 경우에는 segment가 3만개나 할 정도로 복잡한 시스템입니다.
invalid object를 하나를 해결하면 다른 object가 invalid되곤 하기도 합니다. 그래서 참 해결하기가 어렵지요.

대부분 테이블이나 프로시저등이 변경되면 invalid object가 생깁니다.
하지만 invalid object를 recompie할 경우에 또다시 reference 관계가 있는 다른 object가 invalid되곤 합니다.
 
이러한 복잡한 시스템일 경우에는 어쩔 수 없이 utlrp.sql을 수행해서 재컴파일 하는 방법이 가장 편합니다.
물론 invalid object에 대해서 기존에 invalid된 것이 valid로 하더라도 서비스에 문제가 없어야겠지요.

만약 utlrp.sql로 수행이 안될 경우에는 여러번 수행하면 재컴파일 됩니다.

SQL> @?/rdbms/admin/utlrp.sql


INVALID OBJECT에 대해서 대해서 재컴파일 하는 스크립트는 아래를 수행해서 재컴파일 할 수 있습니다.
--------------------------------------------------------------------------------

## invalidobject_recompile.sql

set heading off
set feedback off
set pages 1000
set verify off
spool allcompile.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'
ORDER BY owner,decode
(object_type,'VIEW','A','FUNCTION','B',
'TRIGGER','C','PROCEDURE','D',
'PACKAGE','E','PACKAGE BODY','F')
,object_name
/
spool off

글 수정:
민천사 (민연홍)




+ Recent posts