oracle11g-date字段类型的分区表切换为自动分区表

问题描述

oracle11g存在字段date类型的range分区(按月划分分区表),由于早期是从oracle9i迁移到oracle11g,历史的分区表都是人工新增分区,先要改为自动分区,减少漏加分区导致的异常。

问题解决

00、查看当前用户下存在的分区表

#查看当前用户分区表及分区策略

SELECT p.table_name AS 表名,
       decode(p.partitioning_key_count, 1, '主分区') AS 分区类型,
       p.partitioning_type AS 分区类型,
       p.column_name AS 分区键,
       decode(nvl(q.subpartitioning_key_count, 0),
              0,
              '无子分区',
              1,
              '子分区') AS有无子分区,
       q.subpartitioning_type AS 子分区类型,
       q.column_name AS 子分区键
  FROM (SELECT a.table_name,
               a.partitioning_type,
               b.column_name,
               a.partitioning_key_count
          FROM user_part_tables a, user_part_key_columns b
         WHERE a.table_name = b.NAME
           AND b.object_type = 'TABLE') p,
       (SELECT a.table_name,
               a.subpartitioning_type,
               b.column_name,
               a.subpartitioning_key_count
          FROM user_part_tables a, user_subpart_key_columns b
         WHERE a.table_name = b.NAME
           AND a.subpartitioning_key_count <> 0
           AND b.object_type = 'TABLE') q
 WHERE p.table_name = q.table_name(+)
 ORDER BY 5, 4, 1;

01、查看当前用户下存在的自动分区表

select distinct(table_name) from user_tab_partitions where interval = 'YES';

存在max分区

01、查看max分区是否存在数据

select * from ZS_KKXX_JYLS partition(PART_202202);

02、存在数据则数据备份出来

create table ZS_KKXX_JYLS_bak_20220122 as select * from ZS_KKXX_JYLS partition(PART_202202);

03、删除max分区

alter table ZS_KKXX_JYLS drop PARTITION (PART_202202);

04、设置自动月度自动添加分区

alter table ZS_KKXX_JYLS SET INTERVAL (NUMTOYMINTERVAL(1,'MONTH'));

05、在线重建索引(只有max分区有数才需重建)

alter index PK_ZS_KKXX_JYLS  rebuild  online;

06、max分区的数据导入分区表

insert into ZS_KKXX_JYLS select * from ZS_KKXX_JYLS_bak_20220122;

不存在max分区

01、设置月度自动添加分区

alter table ZS_KKXX_JYLS SET INTERVAL (NUMTOYMINTERVAL(1,'MONTH'));
posted @ 2023-02-26 11:40  mvpbang  阅读(265)  评论(0编辑  收藏  举报