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'));