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'));
相关推荐
jiayou641 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
李广坤2 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
爱可生开源社区3 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1773 天前
《从零搭建NestJS项目》
数据库·typescript
加号34 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏4 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐4 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再4 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip
tryCbest4 天前
数据库SQL学习
数据库·sql
jnrjian4 天前
ORA-01017 查找机器名 用户名 以及library cache lock 参数含义
数据库·oracle