数据库中失效对象编译的方法教程
本篇内容介绍了“数据库中失效对象编译的方法教程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
----------------------------------------------------------DDLforTableRECOMPILE_LOG--------------------------------------------------------CREATETABLE"RECOMPILE_LOG"("RDATE"DATE,"ERRMSG"VARCHAR2(200BYTE));----------------------------------------------------------DDLforTableRECOMPILE_TYPE_INFO--------------------------------------------------------CREATETABLE"RECOMPILE_TYPE_INFO"("TYPE"VARCHAR2(30BYTE),"PROCESS_MODE"VARCHAR2(30BYTE),"BASE_TABLE"VARCHAR2(30BYTE));InsertintoEODA.RECOMPILE_TYPE_INFO(TYPE,PROCESS_MODE,BASE_TABLE)values('TRIGGER','COMPILE','DBA_DEPENDENCIES');InsertintoEODA.RECOMPILE_TYPE_INFO(TYPE,PROCESS_MODE,BASE_TABLE)values('PROCEDURE','COMPILE','DBA_DEPENDENCIES');InsertintoEODA.RECOMPILE_TYPE_INFO(TYPE,PROCESS_MODE,BASE_TABLE)values('FUNCTION','COMPILE','DBA_DEPENDENCIES');InsertintoEODA.RECOMPILE_TYPE_INFO(TYPE,PROCESS_MODE,BASE_TABLE)values('PACKAGE','COMPILE','DBA_DEPENDENCIES');InsertintoEODA.RECOMPILE_TYPE_INFO(TYPE,PROCESS_MODE,BASE_TABLE)values('TYPE','COMPILE','DBA_DEPENDENCIES');InsertintoEODA.RECOMPILE_TYPE_INFO(TYPE,PROCESS_MODE,BASE_TABLE)values('INDEX','REBUILDONLINE','DBA_INDEXES');----------------------------------------------------------DDLforProcedureRECOMPILE_OBJECTS--------------------------------------------------------setdefineoff;CREATEORREPLACEEDITIONABLEPROCEDURE"RECOMPILE_OBJECTS"(RIO_OWNERVARCHAR2,RIO_OBJECT_NAMEVARCHAR2)ASCOMPILE_SQLVARCHAR2(500);P_OWNERVARCHAR2(30):=UPPER(RIO_OWNER);P_OBJECT_NAMEVARCHAR2(30):=UPPER(RIO_OBJECT_NAME);BEGINFORRIO_TYPEIN(SELECTTYPE,PROCESS_MODE,BASE_TABLEFROMRECOMPILE_TYPE_INFO)LOOPIFRIO_TYPE.BASE_TABLE='DBA_DEPENDENCIES'THENFORDBA_DEPIN(SELECTOWNER,NAMEFROMDBA_DEPENDENCIESWHERETYPE=RIO_TYPE.TYPEANDREFERENCED_OWNER=P_OWNERANDREFERENCED_NAME=P_OBJECT_NAME)LOOPFORDBA_OBJIN(SELECTSTATUSFROMDBA_OBJECTSWHEREOWNER=DBA_DEP.OWNERANDOBJECT_NAME=DBA_DEP.NAME)LOOPIFDBA_OBJ.STATUS='INVALID'THENBEGINCOMPILE_SQL:='ALTER'||RIO_TYPE.TYPE||''||DBA_DEP.OWNER||'.'||DBA_DEP.NAME||''||RIO_TYPE.PROCESS_MODE;EXECUTEimmediateCOMPILE_SQL;EXCEPTIONWHENOTHERSTHENINSERTINTOrecompile_log(rdate,errmsg)VALUES(sysdate,COMPILE_SQL);END;ENDIF;ENDLOOP;ENDLOOP;ENDIF;IFRIO_TYPE.BASE_TABLE='DBA_INDEXES'THENFORDBA_INDIN(SELECTOWNER,INDEX_NAME,PARTITIONED,STATUSFROMDBA_INDEXESWHERETABLE_OWNER=P_OWNERANDTABLE_NAME=P_OBJECT_NAME)LOOPIFDBA_IND.PARTITIONED='NO'ANDDBA_IND.STATUS='INVALID'THENBEGINCOMPILE_SQL:='ALTER'||RIO_TYPE.TYPE||''||DBA_IND.OWNER||'.'||DBA_IND.INDEX_NAME||''||RIO_TYPE.PROCESS_MODE;EXECUTEimmediateCOMPILE_SQL;EXCEPTIONWHENOTHERSTHENINSERTINTOrecompile_log(rdate,errmsg)VALUES(sysdate,COMPILE_SQL);END;ENDIF;IFDBA_IND.PARTITIONED='YES'THENFORIND_PARIN(SELECTPARTITION_NAME,STATUSFROMDBA_IND_PARTITIONSWHEREINDEX_OWNER=DBA_IND.OWNERANDINDEX_NAME=DBA_IND.INDEX_NAME)LOOPIFIND_PAR.STATUS='UNUSABLE'THENBEGINCOMPILE_SQL:='ALTER'||RIO_TYPE.TYPE||''||DBA_IND.OWNER||'.'||DBA_IND.INDEX_NAME||'PARTITION'||IND_PAR.PARTITION_NAME||'ONLINE';EXECUTEimmediateCOMPILE_SQL;EXCEPTIONWHENOTHERSTHENINSERTINTOrecompile_log(rdate,errmsg)VALUES(sysdate,COMPILE_SQL);END;ENDIF;ENDLOOP;ENDIF;ENDLOOP;ENDIF;ENDLOOP;END;/
“数据库中失效对象编译的方法教程”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。