Oracle数据库自动删除或增加表分区(写日志版)
spool test.log -- 检查 TBL_PROC_ERRMSG 表是否存在,如果不存在则创建 DECLARE v_table_count NUMBER; BEGIN SELECT COUNT(*) INTO v_table_count FROM all_tables WHERE table_name = 'TBL_PROC_ERRMSG'; IF v_table_count = 0 THEN EXECUTE IMMEDIATE 'CREATE TABLE TBL_PROC_ERRMSG ( PROC_NAME VARCHAR2(100), ERR_LINE VARCHAR2(1000), ERR_CODE VARCHAR2(10), MSG VARCHAR2(4000), CRT_TM DATE DEFAULT SYSDATE )'; END IF; END; / -- 检查 AUTO_ADD_TABLEPART 表是否存在,如果不存在则创建 DECLARE v_table_count NUMBER; BEGIN SELECT COUNT(*) INTO v_table_count FROM all_tables WHERE table_name = 'AUTO_ADD_TABLEPART'; IF v_table_count = 0 THEN EXECUTE IMMEDIATE 'CREATE TABLE AUTO_ADD_TABLEPART ( table_name VARCHAR2(50), execute_sql VARCHAR2(200), message VARCHAR2(200), addtime DATE DEFAULT SYSDATE )'; END IF; END; / --保存错误信息的存过 CREATE OR REPLACE PROCEDURE PROC_SAVE_ERRMSG( PROCNAME IN VARCHAR2, ERRORLINE IN VARCHAR2, ERRORCODE IN VARCHAR2, MSG IN VARCHAR2) IS /*必须要使用自治事务,否则commit会影响调用程序事务*/ PRAGMA AUTONOMOUS_TRANSACTION; BEGIN INSERT INTO TBL_PROC_ERRMSG (PROC_NAME,ERR_LINE, ERR_CODE, MSG) VALUES (PROCNAME,ERRORLINE, ERRORCODE, MSG); COMMIT ; END ; / DECLARE o_dept NUMBER; BEGIN SELECT count(1) INTO o_dept FROM user_tables t where t.table_name='ACS_DINFO_TF_A'; IF o_dept = 1 THEN execute immediate 'DROP table ACS_DINFO_TF_A'; END IF; END; / --创建临时表 create table ACS_DINFO_TF_A tablespace EVCOM_DATA as select * from ACS_DINFO_TF; commit; --只有ACS_DINFO_TF_A已经存在才删除ACS_DINFO_TF DECLARE o_dept NUMBER; BEGIN SELECT count(1) INTO o_dept FROM user_tables t where t.table_name='ACS_DINFO_TF_A'; IF o_dept = 1 THEN execute immediate 'DROP table ACS_DINFO_TF'; END IF; END; / --重建ACS_DINFO_TF表为分区表,分区是2021年至2030年,以月为粒度 CREATE TABLE ACS_DINFO_TF ( acs_id INTEGER not null, acs_functioncode INTEGER, acs_time DATE not null, acs_recvtime DATE not null, acs_uid VARCHAR2(50), acs_name VARCHAR2(30), acs_sex VARCHAR2(10), acs_department VARCHAR2(50), acs_event VARCHAR2(500), acs_doorid VARCHAR2(50), acs_stationid INTEGER ) PARTITION BY RANGE (acs_time) -- 按 acs_time 做范围分区 ( partition ACS_DINFO_TF_202101 values less than (to_date('2021-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202102 values less than (to_date('2021-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202103 values less than (to_date('2021-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202104 values less than (to_date('2021-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202105 values less than (to_date('2021-06-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202106 values less than (to_date('2021-07-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202107 values less than (to_date('2021-08-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202108 values less than (to_date('2021-09-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202109 values less than (to_date('2021-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202110 values less than (to_date('2021-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202111 values less than (to_date('2021-12-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202112 values less than (to_date('2022-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202201 values less than (to_date('2022-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202202 values less than (to_date('2022-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202203 values less than (to_date('2022-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202204 values less than (to_date('2022-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202205 values less than (to_date('2022-06-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202206 values less than (to_date('2022-07-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202207 values less than (to_date('2022-08-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202208 values less than (to_date('2022-09-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202209 values less than (to_date('2022-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202210 values less than (to_date('2022-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202211 values less than (to_date('2022-12-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202212 values less than (to_date('2023-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202301 values less than (to_date('2023-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202302 values less than (to_date('2023-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202303 values less than (to_date('2023-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202304 values less than (to_date('2023-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202305 values less than (to_date('2023-06-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202306 values less than (to_date('2023-07-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202307 values less than (to_date('2023-08-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202308 values less than (to_date('2023-09-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202309 values less than (to_date('2023-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202310 values less than (to_date('2023-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202311 values less than (to_date('2023-12-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202312 values less than (to_date('2024-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202401 values less than (to_date('2024-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202402 values less than (to_date('2024-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202403 values less than (to_date('2024-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202404 values less than (to_date('2024-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202405 values less than (to_date('2024-06-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202406 values less than (to_date('2024-07-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202407 values less than (to_date('2024-08-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202408 values less than (to_date('2024-09-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202409 values less than (to_date('2024-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202410 values less than (to_date('2024-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202411 values less than (to_date('2024-12-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202412 values less than (to_date('2025-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202501 values less than (to_date('2025-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202502 values less than (to_date('2025-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202503 values less than (to_date('2025-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202504 values less than (to_date('2025-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202505 values less than (to_date('2025-06-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202506 values less than (to_date('2025-07-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202507 values less than (to_date('2025-08-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202508 values less than (to_date('2025-09-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202509 values less than (to_date('2025-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202510 values less than (to_date('2025-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202511 values less than (to_date('2025-12-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202512 values less than (to_date('2026-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202601 values less than (to_date('2026-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202602 values less than (to_date('2026-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202603 values less than (to_date('2026-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202604 values less than (to_date('2026-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202605 values less than (to_date('2026-06-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202606 values less than (to_date('2026-07-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202607 values less than (to_date('2026-08-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202608 values less than (to_date('2026-09-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202609 values less than (to_date('2026-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202610 values less than (to_date('2026-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202611 values less than (to_date('2026-12-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202612 values less than (to_date('2027-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202701 values less than (to_date('2027-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202702 values less than (to_date('2027-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202703 values less than (to_date('2027-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202704 values less than (to_date('2027-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202705 values less than (to_date('2027-06-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202706 values less than (to_date('2027-07-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202707 values less than (to_date('2027-08-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202708 values less than (to_date('2027-09-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202709 values less than (to_date('2027-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202710 values less than (to_date('2027-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202711 values less than (to_date('2027-12-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202712 values less than (to_date('2028-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202801 values less than (to_date('2028-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202802 values less than (to_date('2028-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202803 values less than (to_date('2028-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202804 values less than (to_date('2028-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202805 values less than (to_date('2028-06-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202806 values less than (to_date('2028-07-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202807 values less than (to_date('2028-08-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202808 values less than (to_date('2028-09-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202809 values less than (to_date('2028-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202810 values less than (to_date('2028-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202811 values less than (to_date('2028-12-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202812 values less than (to_date('2029-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202901 values less than (to_date('2029-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202902 values less than (to_date('2029-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202903 values less than (to_date('2029-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202904 values less than (to_date('2029-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202905 values less than (to_date('2029-06-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202906 values less than (to_date('2029-07-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202907 values less than (to_date('2029-08-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202908 values less than (to_date('2029-09-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202909 values less than (to_date('2029-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202910 values less than (to_date('2029-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202911 values less than (to_date('2029-12-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_202912 values less than (to_date('2030-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_203001 values less than (to_date('2030-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_203002 values less than (to_date('2030-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_203003 values less than (to_date('2030-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_203004 values less than (to_date('2030-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_203005 values less than (to_date('2030-06-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_203006 values less than (to_date('2030-07-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_203007 values less than (to_date('2030-08-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_203008 values less than (to_date('2030-09-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_203009 values less than (to_date('2030-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_203010 values less than (to_date('2030-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_203011 values less than (to_date('2030-12-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')), partition ACS_DINFO_TF_203012 values less than (to_date('2031-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')) ) TABLESPACE CONFIG_DATA PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINExtENTS 1 MAXExtENTS UNLIMITED ); -- 创建本地分区索引(按 acs_time) CREATE INDEX INDX_ACS_DINFO_TF_ACS_TIME ON ACS_DINFO_TF (ACS_TIME) LOCAL -- LOCAL 表示本地分区索引 TABLESPACE CONFIG_INDX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINExtENTS 1 MAXExtENTS UNLIMITED ); -- 添加全局主键约束(acs_id 是独立主键,不依赖分区键) ALTER TABLE ACS_DINFO_TF ADD CONSTRAINT ACS_DINFO_TF_PK PRIMARY KEY (ACS_ID) USING INDEX TABLESPACE CONFIG_DATA PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINExtENTS 1 MAXExtENTS UNLIMITED ); insert into ACS_DINFO_TF select * from ACS_DINFO_TF_A; --删除临时表 --DROP table ACS_DINFO_TF_A; create or replace procedure P_ADD_DELETE_PARTITIONS (p_keep_month int --分区保留月份 ) as v_sql varchar2(300); VMESSAGE VARCHAR(250); v_delete_part_date varchar2(64); v_add_part_date varchar2(64); v_num number default 0; begin -- DROP指定月份之前的所有分区 for i in (select table_name, min(partition_name) as min_part_name from user_tab_partitions where table_name not like '%$%' group by table_name) loop v_delete_part_date := substr(i.min_part_name, instr(i.min_part_name, '_',-1) + 1); while months_between(sysdate, to_date(v_delete_part_date, 'yyyymm')) > p_keep_month loop begin v_sql := 'ALTER TABLE ' || i.table_name || ' DROP PARTITION ' || i.table_name || '_' || v_delete_part_date ||' update global indexes'; execute immediate v_sql; VMESSAGE := 'The partition ' || i.table_name || '_' || v_delete_part_date ||' of the table '||i.table_name||' was successfully deleted.'; INSERT INTO AUTO_ADD_TABLEPART VALUES (i.table_name, v_sql, VMESSAGE, SYSDATE); EXCEPTION WHEN OTHERS THEN PROC_SAVE_ERRMSG('P_ADD_DELETE_PARTITIONS',DBMS_UTILITY.format_error_backtrace,sqlcode,SQLERRM); v_delete_part_date := to_char(add_months(to_date(v_delete_part_date,'yyyymm'),1),'yyyymm'); end; end loop; end loop; --alter table ev_combined drop partition EV_COMBINED_202103 update global indexes -- add partition for i in (select table_name, max(partition_name) as max_part_name from user_tab_partitions where table_name not like '%$%' group by table_name) loop v_add_part_date := substr(i.max_part_name, instr(i.max_part_name, '_',-1) + 1); --当表的最大分区小于3个月后,就给表多新增3个月的分区 if months_between(to_date(v_add_part_date, 'yyyymm'),sysdate) < 3 then for j in 1..3 loop v_num := v_num +1; v_add_part_date := to_char(add_months(to_date(v_add_part_date,'yyyymm'),1),'yyyymm'); begin v_sql := 'ALTER TABLE ' || i.table_name || ' add PARTITION ' || i.table_name || '_' || v_add_part_date; execute immediate v_sql; VMESSAGE := 'The partition ' || i.table_name || '_' || v_add_part_date ||' of the table '||i.table_name||' was successfully Add.'; INSERT INTO AUTO_ADD_TABLEPART VALUES (i.table_name, v_sql, VMESSAGE, SYSDATE); EXCEPTION WHEN OTHERS THEN PROC_SAVE_ERRMSG('P_ADD_DELETE_PARTITIONS',DBMS_UTILITY.format_error_backtrace,sqlcode,SQLERRM); end; end loop; end if; end loop; end; / declare job_id int; begin select max(job) into job_id from user_jobs where WHAT='p_add_delete_partitions(12);'; if job_id>0 then dbms_job.remove(job_id); commit; end if; end; / DECLARE JOB NUMBER; BEGIN DBMS_JOB.SUBMIT( JOB => JOB, WHAT => 'p_add_delete_partitions(12);', NEXT_DATE =>TRUNC(SYSDATE + 1) + 2/24, INTERVAL => 'TRUNC(LAST_DAY(SYSDATE) + 1)', no_parse => FALSE ); END; / exit; spool off
spool test.log-- 检查 TBL_PROC_ERRMSG 表是否存在,如果不存在则创建DECLARE v_table_count NUMBER;BEGIN SELECT COUNT(*) INTO v_table_count FROM all_tables WHERE table_name = 'TBL_PROC_ERRMSG';
IF v_table_count = 0 THEN EXECUTE IMMEDIATE 'CREATE TABLE TBL_PROC_ERRMSG ( PROC_NAME VARCHAR2(100), ERR_LINE VARCHAR2(1000), ERR_CODE VARCHAR2(10), MSG VARCHAR2(4000), CRT_TM DATE DEFAULT SYSDATE )'; END IF;END;/
-- 检查 AUTO_ADD_TABLEPART 表是否存在,如果不存在则创建DECLARE v_table_count NUMBER;BEGIN SELECT COUNT(*) INTO v_table_count FROM all_tables WHERE table_name = 'AUTO_ADD_TABLEPART';
IF v_table_count = 0 THEN EXECUTE IMMEDIATE 'CREATE TABLE AUTO_ADD_TABLEPART ( table_name VARCHAR2(50), execute_sql VARCHAR2(200), message VARCHAR2(200), addtime DATE DEFAULT SYSDATE )'; END IF;END;/--保存错误信息的存过CREATE OR REPLACE PROCEDURE PROC_SAVE_ERRMSG(PROCNAME IN VARCHAR2,ERRORLINE IN VARCHAR2,ERRORCODE IN VARCHAR2,MSG IN VARCHAR2) IS/*必须要使用自治事务,否则commit会影响调用程序事务*/PRAGMA AUTONOMOUS_TRANSACTION;BEGININSERT INTO TBL_PROC_ERRMSG(PROC_NAME,ERR_LINE, ERR_CODE, MSG)VALUES(PROCNAME,ERRORLINE, ERRORCODE, MSG);COMMIT ;END ;/DECLARE o_dept NUMBER;BEGINSELECT count(1) INTO o_dept FROM user_tables t where t.table_name='ACS_DINFO_TF_A';IF o_dept = 1 THENexecute immediate 'DROP table ACS_DINFO_TF_A';END IF;END;/--创建临时表create table ACS_DINFO_TF_A tablespace EVCOM_DATA as select * from ACS_DINFO_TF;
commit;--只有ACS_DINFO_TF_A已经存在才删除ACS_DINFO_TFDECLARE o_dept NUMBER;BEGINSELECT count(1) INTO o_dept FROM user_tables t where t.table_name='ACS_DINFO_TF_A';IF o_dept = 1 THENexecute immediate 'DROP table ACS_DINFO_TF';END IF;END;/
--重建ACS_DINFO_TF表为分区表,分区是2021年至2030年,以月为粒度
CREATE TABLE ACS_DINFO_TF( acs_id INTEGER not null, acs_functioncode INTEGER, acs_time DATE not null, acs_recvtime DATE not null, acs_uid VARCHAR2(50), acs_name VARCHAR2(30), acs_sex VARCHAR2(10), acs_department VARCHAR2(50), acs_event VARCHAR2(500), acs_doorid VARCHAR2(50), acs_stationid INTEGER)PARTITION BY RANGE (acs_time) -- 按 acs_time 做范围分区(partition ACS_DINFO_TF_202101 values less than (to_date('2021-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202102 values less than (to_date('2021-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202103 values less than (to_date('2021-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202104 values less than (to_date('2021-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202105 values less than (to_date('2021-06-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202106 values less than (to_date('2021-07-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202107 values less than (to_date('2021-08-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202108 values less than (to_date('2021-09-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202109 values less than (to_date('2021-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202110 values less than (to_date('2021-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202111 values less than (to_date('2021-12-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202112 values less than (to_date('2022-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202201 values less than (to_date('2022-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202202 values less than (to_date('2022-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202203 values less than (to_date('2022-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202204 values less than (to_date('2022-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202205 values less than (to_date('2022-06-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202206 values less than (to_date('2022-07-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202207 values less than (to_date('2022-08-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202208 values less than (to_date('2022-09-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202209 values less than (to_date('2022-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202210 values less than (to_date('2022-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202211 values less than (to_date('2022-12-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202212 values less than (to_date('2023-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202301 values less than (to_date('2023-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202302 values less than (to_date('2023-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202303 values less than (to_date('2023-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202304 values less than (to_date('2023-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202305 values less than (to_date('2023-06-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202306 values less than (to_date('2023-07-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202307 values less than (to_date('2023-08-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202308 values less than (to_date('2023-09-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202309 values less than (to_date('2023-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202310 values less than (to_date('2023-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202311 values less than (to_date('2023-12-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202312 values less than (to_date('2024-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202401 values less than (to_date('2024-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202402 values less than (to_date('2024-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202403 values less than (to_date('2024-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202404 values less than (to_date('2024-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202405 values less than (to_date('2024-06-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202406 values less than (to_date('2024-07-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202407 values less than (to_date('2024-08-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202408 values less than (to_date('2024-09-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202409 values less than (to_date('2024-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202410 values less than (to_date('2024-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202411 values less than (to_date('2024-12-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202412 values less than (to_date('2025-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202501 values less than (to_date('2025-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202502 values less than (to_date('2025-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202503 values less than (to_date('2025-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202504 values less than (to_date('2025-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202505 values less than (to_date('2025-06-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202506 values less than (to_date('2025-07-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202507 values less than (to_date('2025-08-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202508 values less than (to_date('2025-09-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202509 values less than (to_date('2025-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202510 values less than (to_date('2025-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202511 values less than (to_date('2025-12-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202512 values less than (to_date('2026-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202601 values less than (to_date('2026-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202602 values less than (to_date('2026-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202603 values less than (to_date('2026-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202604 values less than (to_date('2026-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202605 values less than (to_date('2026-06-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202606 values less than (to_date('2026-07-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202607 values less than (to_date('2026-08-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202608 values less than (to_date('2026-09-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202609 values less than (to_date('2026-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202610 values less than (to_date('2026-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202611 values less than (to_date('2026-12-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202612 values less than (to_date('2027-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202701 values less than (to_date('2027-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202702 values less than (to_date('2027-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202703 values less than (to_date('2027-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202704 values less than (to_date('2027-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202705 values less than (to_date('2027-06-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202706 values less than (to_date('2027-07-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202707 values less than (to_date('2027-08-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202708 values less than (to_date('2027-09-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202709 values less than (to_date('2027-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202710 values less than (to_date('2027-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202711 values less than (to_date('2027-12-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202712 values less than (to_date('2028-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202801 values less than (to_date('2028-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202802 values less than (to_date('2028-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202803 values less than (to_date('2028-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202804 values less than (to_date('2028-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202805 values less than (to_date('2028-06-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202806 values less than (to_date('2028-07-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202807 values less than (to_date('2028-08-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202808 values less than (to_date('2028-09-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202809 values less than (to_date('2028-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202810 values less than (to_date('2028-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202811 values less than (to_date('2028-12-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202812 values less than (to_date('2029-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202901 values less than (to_date('2029-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202902 values less than (to_date('2029-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202903 values less than (to_date('2029-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202904 values less than (to_date('2029-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202905 values less than (to_date('2029-06-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202906 values less than (to_date('2029-07-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202907 values less than (to_date('2029-08-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202908 values less than (to_date('2029-09-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202909 values less than (to_date('2029-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202910 values less than (to_date('2029-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202911 values less than (to_date('2029-12-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_202912 values less than (to_date('2030-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_203001 values less than (to_date('2030-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_203002 values less than (to_date('2030-03-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_203003 values less than (to_date('2030-04-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_203004 values less than (to_date('2030-05-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_203005 values less than (to_date('2030-06-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_203006 values less than (to_date('2030-07-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_203007 values less than (to_date('2030-08-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_203008 values less than (to_date('2030-09-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_203009 values less than (to_date('2030-10-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_203010 values less than (to_date('2030-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_203011 values less than (to_date('2030-12-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')),partition ACS_DINFO_TF_203012 values less than (to_date('2031-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')))TABLESPACE CONFIG_DATA PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINExtENTS 1 MAXExtENTS UNLIMITED );
-- 创建本地分区索引(按 acs_time)CREATE INDEX INDX_ACS_DINFO_TF_ACS_TIME ON ACS_DINFO_TF (ACS_TIME) LOCAL -- LOCAL 表示本地分区索引 TABLESPACE CONFIG_INDX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINExtENTS 1 MAXExtENTS UNLIMITED );
-- 添加全局主键约束(acs_id 是独立主键,不依赖分区键)ALTER TABLE ACS_DINFO_TF ADD CONSTRAINT ACS_DINFO_TF_PK PRIMARY KEY (ACS_ID) USING INDEX TABLESPACE CONFIG_DATA PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINExtENTS 1 MAXExtENTS UNLIMITED );
insert into ACS_DINFO_TFselect * from ACS_DINFO_TF_A;
--删除临时表--DROP table ACS_DINFO_TF_A;
create or replace procedure P_ADD_DELETE_PARTITIONS(p_keep_month int --分区保留月份)as v_sql varchar2(300); VMESSAGE VARCHAR(250); v_delete_part_date varchar2(64); v_add_part_date varchar2(64); v_num number default 0;begin
-- DROP指定月份之前的所有分区 for i in (select table_name, min(partition_name) as min_part_name from user_tab_partitions where table_name not like '%$%' group by table_name) loop
v_delete_part_date := substr(i.min_part_name, instr(i.min_part_name, '_',-1) + 1);
while months_between(sysdate, to_date(v_delete_part_date, 'yyyymm')) > p_keep_month loop
begin v_sql := 'ALTER TABLE ' || i.table_name || ' DROP PARTITION ' || i.table_name || '_' || v_delete_part_date ||' update global indexes';
execute immediate v_sql;
VMESSAGE := 'The partition ' || i.table_name || '_' || v_delete_part_date ||' of the table '||i.table_name||' was successfully deleted.';
INSERT INTO AUTO_ADD_TABLEPART VALUES (i.table_name, v_sql, VMESSAGE, SYSDATE);
EXCEPTION WHEN OTHERS THEN
PROC_SAVE_ERRMSG('P_ADD_DELETE_PARTITIONS',DBMS_UTILITY.format_error_backtrace,sqlcode,SQLERRM);
v_delete_part_date := to_char(add_months(to_date(v_delete_part_date,'yyyymm'),1),'yyyymm'); end; end loop; end loop;--alter table ev_combined drop partition EV_COMBINED_202103 update global indexes -- add partition for i in (select table_name, max(partition_name) as max_part_name from user_tab_partitions where table_name not like '%$%' group by table_name) loop
v_add_part_date := substr(i.max_part_name, instr(i.max_part_name, '_',-1) + 1); --当表的最大分区小于3个月后,就给表多新增3个月的分区 if months_between(to_date(v_add_part_date, 'yyyymm'),sysdate) < 3 then for j in 1..3 loop v_num := v_num +1; v_add_part_date := to_char(add_months(to_date(v_add_part_date,'yyyymm'),1),'yyyymm'); begin v_sql := 'ALTER TABLE ' || i.table_name || ' add PARTITION ' || i.table_name || '_' || v_add_part_date; execute immediate v_sql; VMESSAGE := 'The partition ' || i.table_name || '_' || v_add_part_date ||' of the table '||i.table_name||' was successfully Add.'; INSERT INTO AUTO_ADD_TABLEPART VALUES (i.table_name, v_sql, VMESSAGE, SYSDATE);
EXCEPTION WHEN OTHERS THEN
PROC_SAVE_ERRMSG('P_ADD_DELETE_PARTITIONS',DBMS_UTILITY.format_error_backtrace,sqlcode,SQLERRM); end; end loop; end if; end loop;
end;/declare job_id int;beginselect max(job) into job_id from user_jobs where WHAT='p_add_delete_partitions(12);';if job_id>0 thendbms_job.remove(job_id);commit;end if;end;/
DECLAREJOB NUMBER;BEGINDBMS_JOB.SUBMIT(JOB => JOB,WHAT => 'p_add_delete_partitions(12);',NEXT_DATE =>TRUNC(SYSDATE + 1) + 2/24,INTERVAL => 'TRUNC(LAST_DAY(SYSDATE) + 1)',no_parse => FALSE);END;/exit;spool off
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号