Oracle普通分区表转自动分区表

1.创建测试表

sql 复制代码
-- 普通分区表,且分区已经增加到26年9月份,当前时间是26年1月份
CREATE TABLE MONKEY.NORMALPAR_TO_AUTOPAR
(
   ID         NUMBER,
   NAME       VARCHAR2 (100),
   ADD_DATE   DATE
)
PARTITION BY RANGE (ADD_DATE)
   (PARTITION DCS_P202512 VALUES LESS THAN(TO_DATE (' 2026-01-01 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN')),
   PARTITION DCS_P202601 VALUES LESS THAN(TO_DATE (' 2026-02-01 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN')),
   PARTITION DCS_P202602 VALUES LESS THAN(TO_DATE (' 2026-03-01 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN')),
   PARTITION DCS_P202603 VALUES LESS THAN(TO_DATE (' 2026-04-01 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN')),
   PARTITION DCS_P202604 VALUES LESS THAN(TO_DATE (' 2026-05-01 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN')),
   PARTITION DCS_P202605 VALUES LESS THAN(TO_DATE (' 2026-06-01 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN')),
   PARTITION DCS_P202606 VALUES LESS THAN(TO_DATE (' 2026-07-01 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN')),
   PARTITION DCS_P202607 VALUES LESS THAN(TO_DATE (' 2026-08-01 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN')),
   PARTITION DCS_P202608 VALUES LESS THAN(TO_DATE (' 2026-09-01 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN')),
   PARTITION DCS_P202609 VALUES LESS THAN(TO_DATE (' 2026-10-01 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN')),
    PARTITION DCS_MAX VALUES LESS THAN (MAXVALUE))
ENABLE ROW MOVEMENT;
SQL 复制代码
-- 创建一个全局索引和分区索引,后面可以测试分区中有数据的情况下,删除分区会导致全局索引失效
CREATE UNIQUE INDEX MONKEY.IX_NORMALPAR_TO_AUTOPAR_ID ON MONKEY.NORMALPAR_TO_AUTOPAR(ID);
CREATE INDEX MONKEY.IX_NORMALPAR_TO_AUTOPAR_NAME ON MONKEY.NORMALPAR_TO_AUTOPAR(NAME) LOCAL;
sql 复制代码
-- 插入几笔测试数据,会落在25/12,26/01和max分区中
INSERT INTO MONKEY.NORMALPAR_TO_AUTOPAR VALUES (1,'AA',TO_DATE('202512020800','YYYYMMDDHH24MI'));
INSERT INTO MONKEY.NORMALPAR_TO_AUTOPAR VALUES (2,'BB',TO_DATE('202601020800','YYYYMMDDHH24MI'));
INSERT INTO MONKEY.NORMALPAR_TO_AUTOPAR(ID,NAME) VALUES (3,'BB');
COMMIT;

2.查看分区是否为空

普通分区表修改为自动分区表需要删除 MAX 分区,同时,为了尽快让自动分区表生效,也会删除其他多余分区(本例是26/2-26/9)

sql 复制代码
SELECT COUNT(1) FROM MONKEY.NORMALPAR_TO_AUTOPAR PARTITION(DCS_P202602)
UNION ALL
SELECT COUNT(1) FROM MONKEY.NORMALPAR_TO_AUTOPAR PARTITION(DCS_P202603)
UNION ALL
SELECT COUNT(1) FROM MONKEY.NORMALPAR_TO_AUTOPAR PARTITION(DCS_P202604)
UNION ALL
SELECT COUNT(1) FROM MONKEY.NORMALPAR_TO_AUTOPAR PARTITION(DCS_P202605)
UNION ALL
SELECT COUNT(1) FROM MONKEY.NORMALPAR_TO_AUTOPAR PARTITION(DCS_P202606)
UNION ALL
SELECT COUNT(1) FROM MONKEY.NORMALPAR_TO_AUTOPAR PARTITION(DCS_P202607)
UNION ALL
SELECT COUNT(1) FROM MONKEY.NORMALPAR_TO_AUTOPAR PARTITION(DCS_P202608)
UNION ALL
SELECT COUNT(1) FROM MONKEY.NORMALPAR_TO_AUTOPAR PARTITION(DCS_P202609)
UNION ALL
SELECT COUNT(1) FROM MONKEY.NORMALPAR_TO_AUTOPAR PARTITION(DCS_MAX);

3.处理有数据分区

有数据分区需要处理,第一,数据是宝贵的,删除之前需要保存下来。第二,有数据的分区被删除,会导致全局索引失效。

3.1.导出分区数据
sh 复制代码
expdp \'/ as sysdba\' directory=monkey dumpfile=MONKEY_NORMALPAR_TO_AUTOPAR_DCS_MAX_%U.dmp filesize=4G tables=MONKEY.NORMALPAR_TO_AUTOPAR:DCS_MAX CONTENT=DATA_ONLY parallel=10 COMPRESSION=ALL logfile=MONKEY_NORMALPAR_TO_AUTOPAR_DCS_MAX.log
3.2.删除分区数据
sql 复制代码
delete from MONKEY.NORMALPAR_TO_AUTOPAR partition(DCS_MAX);
commit;
3.3.删除分区
sql 复制代码
alter table MONKEY.NORMALPAR_TO_AUTOPAR drop partition DCS_P202602;
alter table MONKEY.NORMALPAR_TO_AUTOPAR drop partition DCS_P202603;
alter table MONKEY.NORMALPAR_TO_AUTOPAR drop partition DCS_P202604;
alter table MONKEY.NORMALPAR_TO_AUTOPAR drop partition DCS_P202605;
alter table MONKEY.NORMALPAR_TO_AUTOPAR drop partition DCS_P202606;
alter table MONKEY.NORMALPAR_TO_AUTOPAR drop partition DCS_P202607;
alter table MONKEY.NORMALPAR_TO_AUTOPAR drop partition DCS_P202608;
alter table MONKEY.NORMALPAR_TO_AUTOPAR drop partition DCS_P202609;
alter table MONKEY.NORMALPAR_TO_AUTOPAR drop partition DCS_MAX;

4.修改为自动分区

sql 复制代码
ALTER TABLE MONKEY.NORMALPAR_TO_AUTOPAR SET INTERVAL ( NUMTOYMINTERVAL(1,'MONTH'));
相关推荐
MediaTea2 小时前
Python OOP 设计思想 13:封装服务于演化
linux·服务器·前端·数据库·python
清风拂山岗 明月照大江2 小时前
MySQL 基础篇
数据库·sql·mysql
古城小栈2 小时前
后端接入大模型实现“自然语言查数据库”
数据库·ai编程
IvorySQL2 小时前
拆解 PostgreSQL 连接机制:从进程模型到通信协议
数据库·postgresql
Dxy12393102162 小时前
MySQL连表更新讲解:从基础到高级应用
数据库·mysql
阿拉伯柠檬2 小时前
MySQL复合查询
linux·数据库·mysql·面试
YongCheng_Liang2 小时前
数据库核心概念深度解析:从基础原理到 SQL 分类
运维·数据库·sql
鲨莎分不晴2 小时前
HBase 基本使用详解
大数据·数据库·hbase
霖霖总总2 小时前
[小技巧28]MySQL 窗口函数详解:原理、用法与最佳实践
数据库·sql·mysql