CREATE OR REPLACE PACKAGE TPS_CASH_DB_MNTASPROCEDURE DB_STATS(V_DEGREE IN VARCHAR2 DEFAULT 8);PROCEDURE REBUILD_INDEX(V_ONLINE IN VARCHAR2 DEFAULT NULL);PROCEDURE REBUILD_INDEX(V_TAB_NAME IN VARCHAR2, V_ONLINE IN VARCHAR2 DEFAULT NULL );END TPS_CASH_DB_MNT;/CREATE OR REPLACE PACKAGE BODY TPS_CASH_DB_MNTASPROCEDURE DB_STATS(V_DEGREE IN VARCHAR2 DEFAULT 8)ASBEGIN DBMS_STATS.GATHER_SCHEMA_STATS(OWNNAME => USER, CASCADE => TRUE, OPTIONS => 'GATHER AUTO', ESTIMATE_PERCENT => DBMS_STATS.AUTO_SAMPLE_SIZE, METHOD_OPT => 'for all columns size repeat', DEGREE => V_DEGREE );END DB_STATS;PROCEDURE REBUILD_INDEX(V_ONLINE IN VARCHAR2 DEFAULT NULL)ASls_index_name VARCHAR2(40) ;ls_part_type VARCHAR2(40) ;ls_part_name VARCHAR2(40) ;ls_sql VARCHAR2(400) ;ls_nop VARCHAR2(400) ;ld_start_date DATE ;ln_SECONDS NUMBER(10) ;CURSOR cur_indexes IS SELECT UI.INDEX_NAME, DECODE(UIP.COMPOSITE, 'NO', ' PARTITION ', 'YES', ' SUBPARTITION ', NULL) PARTITION_TYPE, DECODE(UIP.COMPOSITE,'NO',UIP.PARTITION_NAME, 'YES', UIS.SUBPARTITION_NAME, NULL) PARTITION_NAME FROM USER_INDEXES UI LEFT JOIN USER_IND_PARTITIONS UIP ON UI.INDEX_NAME = UIP.INDEX_NAME LEFT JOIN USER_IND_SUBPARTITIONS UIS ON UI.INDEX_NAME = UIS.INDEX_NAME WHERE UI.INDEX_NAME NOT LIKE 'SYS_IL%' AND UI.INDEX_TYPE 'IOT - TOP' ORDER BY UI.TABLE_NAME, UI.INDEX_NAME, UIP.PARTITION_POSITION, UIS.PARTITION_NAME, UIS.SUBPARTITION_POSITION;BEGIN SELECT SYSDATE INTO ld_start_date FROM DUAL; DBMS_OUTPUT.PUT_LINE('Rebuild INDEX at '||TO_CHAR(SYSDATE, 'YYYY-Mon-DD HH24:MI:SS')||CHR(10)); FOR cur_1 IN cur_indexes LOOP ls_index_name := cur_1.INDEX_NAME; ls_part_type := cur_1.PARTITION_TYPE; ls_part_name := cur_1.PARTITION_NAME; ls_sql := 'ALTER INDEX '||ls_index_name||' REBUILD'||ls_part_type||ls_part_name||' PARALLEL '||V_ONLINE; ls_nop := 'ALTER INDEX '||ls_index_name||' NOPARALLEL '; --DBMS_OUTPUT.PUT_LINE(ls_sql||';'); -- Execute BEGIN EXECUTE IMMEDIATE ls_sql; EXECUTE IMMEDIATE ls_nop; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(ls_sql||'; '||SQLERRM); DBMS_OUTPUT.PUT_LINE(ls_nop||'; '||SQLERRM); END; END LOOP; SELECT (SYSDATE - ld_start_date)*24*3600 INTO ln_SECONDS FROM DUAL; DBMS_OUTPUT.PUT_LINE('COMPLETED... at '||TO_CHAR(SYSDATE, 'YYYY-Mon-DD HH24:MI:SS')||CHR(10));END REBUILD_INDEX;PROCEDURE REBUILD_INDEX(V_TAB_NAME IN VARCHAR2, V_ONLINE IN VARCHAR2 DEFAULT NULL)ASls_index_name VARCHAR2(40) ;ls_part_type VARCHAR2(40) ;ls_part_name VARCHAR2(40) ;ls_sql VARCHAR2(400) ;ls_nop VARCHAR2(400) ;ld_start_date DATE ;ln_SECONDS NUMBER(10) ;CURSOR cur_indexes IS SELECT UI.INDEX_NAME, DECODE(UIP.COMPOSITE, 'NO', ' PARTITION ', 'YES', ' SUBPARTITION ', NULL) PARTITION_TYPE, DECODE(UIP.COMPOSITE,'NO',UIP.PARTITION_NAME, 'YES', UIS.SUBPARTITION_NAME, NULL) PARTITION_NAME FROM USER_INDEXES UI LEFT JOIN USER_IND_PARTITIONS UIP ON UI.INDEX_NAME = UIP.INDEX_NAME LEFT JOIN USER_IND_SUBPARTITIONS UIS ON UI.INDEX_NAME = UIS.INDEX_NAME WHERE UI.INDEX_NAME NOT LIKE 'SYS_IL%' AND UI.INDEX_TYPE 'IOT - TOP' AND UI.TABLE_NAME = V_TAB_NAME ORDER BY UI.TABLE_NAME, UI.INDEX_NAME, UIP.PARTITION_POSITION, UIS.PARTITION_NAME, UIS.SUBPARTITION_POSITION;BEGIN SELECT SYSDATE INTO ld_start_date FROM DUAL; DBMS_OUTPUT.PUT_LINE('Rebuild INDEX for '||V_TAB_NAME||' at '||TO_CHAR(SYSDATE, 'YYYY-Mon-DD HH24:MI:SS')||CHR(10)); FOR cur_1 IN cur_indexes LOOP ls_index_name := cur_1.INDEX_NAME; ls_part_type := cur_1.PARTITION_TYPE; ls_part_name := cur_1.PARTITION_NAME; ls_sql := 'ALTER INDEX '||ls_index_name||' REBUILD'||ls_part_type||ls_part_name||' PARALLEL '||V_ONLINE; ls_nop := 'ALTER INDEX '||ls_index_name||' NOPARALLEL '; --DBMS_OUTPUT.PUT_LINE(ls_sql||';'); -- Execute BEGIN EXECUTE IMMEDIATE ls_sql; EXECUTE IMMEDIATE ls_nop; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(ls_sql||'; '||SQLERRM); DBMS_OUTPUT.PUT_LINE(ls_nop||'; '||SQLERRM); END; END LOOP; SELECT (SYSDATE - ld_start_date)*24*3600 INTO ln_SECONDS FROM DUAL; DBMS_OUTPUT.PUT_LINE('COMPLETED... at '||TO_CHAR(SYSDATE, 'YYYY-Mon-DD HH24:MI:SS')||CHR(10));END REBUILD_INDEX;END TPS_CASH_DB_MNT;/ 09-26 23:48