数据库中失效对象编译的方法教程
本篇内容介绍了“数据库中失效对象编译的方法教程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

10余年的安平网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整安平建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联公司从事“安平网站设计”,“安平网站推广”以来,每个客户项目都认真落实执行。
--------------------------------------------------------
-- DDL for Table RECOMPILE_LOG
--------------------------------------------------------
CREATE TABLE "RECOMPILE_LOG"
( "RDATE" DATE,
"ERRMSG" VARCHAR2(200 BYTE)
) ;
--------------------------------------------------------
-- DDL for Table RECOMPILE_TYPE_INFO
--------------------------------------------------------
CREATE TABLE "RECOMPILE_TYPE_INFO"
( "TYPE" VARCHAR2(30 BYTE),
"PROCESS_MODE" VARCHAR2(30 BYTE),
"BASE_TABLE" VARCHAR2(30 BYTE)
) ;
Insert into EODA.RECOMPILE_TYPE_INFO (TYPE,PROCESS_MODE,BASE_TABLE) values ('TRIGGER','COMPILE','DBA_DEPENDENCIES');
Insert into EODA.RECOMPILE_TYPE_INFO (TYPE,PROCESS_MODE,BASE_TABLE) values ('PROCEDURE','COMPILE','DBA_DEPENDENCIES');
Insert into EODA.RECOMPILE_TYPE_INFO (TYPE,PROCESS_MODE,BASE_TABLE) values ('FUNCTION','COMPILE','DBA_DEPENDENCIES');
Insert into EODA.RECOMPILE_TYPE_INFO (TYPE,PROCESS_MODE,BASE_TABLE) values ('PACKAGE','COMPILE','DBA_DEPENDENCIES');
Insert into EODA.RECOMPILE_TYPE_INFO (TYPE,PROCESS_MODE,BASE_TABLE) values ('TYPE','COMPILE','DBA_DEPENDENCIES');
Insert into EODA.RECOMPILE_TYPE_INFO (TYPE,PROCESS_MODE,BASE_TABLE) values ('INDEX','REBUILD ONLINE','DBA_INDEXES');
--------------------------------------------------------
-- DDL for Procedure RECOMPILE_OBJECTS
--------------------------------------------------------
set define off;
CREATE OR REPLACE EDITIONABLE PROCEDURE "RECOMPILE_OBJECTS" (RIO_OWNER VARCHAR2,
RIO_OBJECT_NAME VARCHAR2) AS
COMPILE_SQL VARCHAR2(500);
P_OWNER VARCHAR2(30) := UPPER(RIO_OWNER);
P_OBJECT_NAME VARCHAR2(30) := UPPER(RIO_OBJECT_NAME);
BEGIN
FOR RIO_TYPE IN (SELECT TYPE, PROCESS_MODE, BASE_TABLE
FROM RECOMPILE_TYPE_INFO) LOOP
IF RIO_TYPE.BASE_TABLE = 'DBA_DEPENDENCIES' THEN
FOR DBA_DEP IN (SELECT OWNER, NAME
FROM DBA_DEPENDENCIES
WHERE TYPE = RIO_TYPE.TYPE
AND REFERENCED_OWNER = P_OWNER
AND REFERENCED_NAME = P_OBJECT_NAME) LOOP
FOR DBA_OBJ IN (SELECT STATUS
FROM DBA_OBJECTS
WHERE OWNER = DBA_DEP.OWNER
AND OBJECT_NAME = DBA_DEP.NAME) LOOP
IF DBA_OBJ.STATUS = 'INVALID' THEN
BEGIN
COMPILE_SQL := 'ALTER ' || RIO_TYPE.TYPE || ' ' ||
DBA_DEP.OWNER || '.' || DBA_DEP.NAME || ' ' ||
RIO_TYPE.PROCESS_MODE;
EXECUTE immediate COMPILE_SQL;
EXCEPTION
WHEN OTHERS THEN
INSERT INTO recompile_log
(rdate, errmsg)
VALUES
(sysdate, COMPILE_SQL);
END;
END IF;
END LOOP;
END LOOP;
END IF;
IF RIO_TYPE.BASE_TABLE = 'DBA_INDEXES' THEN
FOR DBA_IND IN (SELECT OWNER, INDEX_NAME, PARTITIONED, STATUS
FROM DBA_INDEXES
WHERE TABLE_OWNER = P_OWNER
AND TABLE_NAME = P_OBJECT_NAME) LOOP
IF DBA_IND.PARTITIONED = 'NO' AND DBA_IND.STATUS = 'INVALID' THEN
BEGIN
COMPILE_SQL := 'ALTER ' || RIO_TYPE.TYPE || ' ' ||
DBA_IND.OWNER || '.' || DBA_IND.INDEX_NAME || ' ' ||
RIO_TYPE.PROCESS_MODE;
EXECUTE immediate COMPILE_SQL;
EXCEPTION
WHEN OTHERS THEN
INSERT INTO recompile_log
(rdate, errmsg)
VALUES
(sysdate, COMPILE_SQL);
END;
END IF;
IF DBA_IND.PARTITIONED = 'YES' THEN
FOR IND_PAR IN (SELECT PARTITION_NAME, STATUS
FROM DBA_IND_PARTITIONS
WHERE INDEX_OWNER = DBA_IND.OWNER
AND INDEX_NAME = DBA_IND.INDEX_NAME) LOOP
IF IND_PAR.STATUS = 'UNUSABLE' THEN
BEGIN
COMPILE_SQL := 'ALTER ' || RIO_TYPE.TYPE || ' ' ||
DBA_IND.OWNER || '.' || DBA_IND.INDEX_NAME ||
' PARTITION ' || IND_PAR.PARTITION_NAME ||
' ONLINE';
EXECUTE immediate COMPILE_SQL;
EXCEPTION
WHEN OTHERS THEN
INSERT INTO recompile_log
(rdate, errmsg)
VALUES
(sysdate, COMPILE_SQL);
END;
END IF;
END LOOP;
END IF;
END LOOP;
END IF;
END LOOP;
END;
/“数据库中失效对象编译的方法教程”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!
分享题目:数据库中失效对象编译的方法教程
文章出自:http://www.jxjierui.cn/article/jsijpg.html


咨询
建站咨询
