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'));
相关推荐
做运维的阿瑞4 分钟前
mysql数据库视图笔记:创建、修改、删除与适用场景
数据库·笔记·mysql
Seraphina3613 分钟前
DVWA(SQL Injection-High,XSS Reflected-Medium,XSS Stored-Medium)
数据库·经验分享·sql·网络安全·xss
@Mike@14 分钟前
12-数据库学习笔记(五种连接算法)
数据库·笔记·学习
Omics Pro27 分钟前
之江实验室NAR|虚拟细胞3阶段训练范式
数据库·人工智能·算法·机器学习·自然语言处理
龙亘川31 分钟前
探索智慧文化服务:建设初衷、整体架构、技术支撑、发展现状与实践影响
大数据·数据库·架构
风早爽太35 分钟前
Python 学习笔记:数据库迁移工具 ‌Alembic
数据库·python·fastapi·alembic
java1234_小锋1 小时前
【技术专题】Mysql8 数据库 - Mysql8 数据库基本操作
数据库·mysql
其实防守也摸鱼1 小时前
DeepSeek Harness 开源贡献手记:从 Issue 到 Merge 的完整旅程
android·数据库·学习·ai·oracle·自动化
jason.zeng@15022072 小时前
canal做mysql的异步传输工具
数据库·mysql·linq
Ivanqhz2 小时前
BURG(自底向上重写生成器)
服务器·数据库·人工智能·深度学习·算法