본문 바로가기

오라클/이론 및 정보

[펌]Invalid Object란?

반응형

 

1. invalid object란

=> procedure/ function /trigger 등은 스크립트 언어지만 작성후에

컴파일하게되어 있습니다. invalid 란 컴파일 상태가 해제된(?) 거라고 생각하시면 됩니다. 즉 실행이 안되는 스크립트지요.

 

2. 그리고 대표적으로 어떤 이유로 발생하는 지

=> object( table, sequence, view 등등 ) 이 alter , drop 되었을 경우

해당 object 를 사용하는 script 는 invalid 상태가 됩니다.

 

3. 정기점검시에 체크하면 어떤 좋은 점이 있는지 알고 싶습니다.

=> invalid 되면 실행이 안되니.. 정기적으로 체크하는게 좋겠죠?

다만 invalid 가 있는지 없는지 체크하는것도 좋지만

$ORACLE_HOME/rdbms/admin/utlirp.sql 를 실행해서

모든 script 를 일괄 compile 하는것도 좋은 방법이겠네요

왕만두님이 2006-11-24 12:06:33에 작성한 댓글입니다.

왕만두님이 설명 잘해 주셨네요.
오타가 하나 있어서리...
$ORACLE_HOME/rdbms/admin/utlirp.sql -> $ORACLE_HOME/rdbms/admin/utlrp.sql

실행방법은
os 상에서
cd $ORACLE_HOME/rdbms/admin
sqlplus "/as sysdba"
SQL> @utlrp
하시면 Invalid Object 를 일괄 Recompile 하실 수 있습니다.

천재재남(jnyang)님이 2006-11-24 13:23:10에 작성한 댓글입니다.
컬럼추가등 alter 구문을 사용하여 테이블을 변경하게되면...

LAST DDL TIME이 변하게 됩니다. 그러면 뭔가 의존관계가 깨어진 것이므로...

그 테이블에 부속된 패키지나 프로시져, 트리거들이 invalid 상태로 빠집니다. 그러나 대개는 실행시 자동으로 컴파일이 됩니다.(오류가 없는 이상, 오류가 있다면 컴파일이 안되고 에러가 나겠죠.)

그러나 프로시져등에서 DB Link등을 사용한다면 자동 컴파일이 되지 않더군요. (수동으로 다시 컴파일하여 valid 상태로 만들어주여야함.)

보통 업무적으로 아주 중요한 테이블 이를 테면 주문 같은 테이블은 엄청나게 트랜잭션도 많고 의존된 프로시져등이 많으므로 잘못 변경 작업을 하게 되면 바로 의존관계에 있는 객체들이 invalid 로 빠지게 되면서 장애의 원인을 제공하기도 합니다. 다시 컴파일이 되려면 내부적으로 lock 등으로 처리가 되므로 (수행과 컴파일은 동시에 진행되지 못함) 잘못하면 internal dead lock 상황에 빠집니다.

따라서 High Transaction 테이블의 경우 주의가 요망되고 작업시 테이블의 업무성격이나 트랜잭션 빈도, 작업을 해도 안전한 시간대 등을 검토하여야 합니다. 업무 중에는 이러한 변경작업을 하지 않는게 원칙이구요.
김주현님이 2006-11-24 17:34:51에 작성한 댓글입니다

 

 

 

 

출처 : http://database.sarang.net/?inc=read&aid=28841&criteria=oracle&subcrit=&id=&limit=20&keyword=&page