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'));
相关推荐
gjc5923 分钟前
踩坑实录:MySQL服务器CPU爆高,元凶竟是SELinux的setroubleshootd?
运维·服务器·数据库·mysql·adb
2401_846341656 分钟前
Python Lambda(匿名函数):简洁之道
jvm·数据库·python
2401_879693879 分钟前
进阶技巧与底层原理
jvm·数据库·python
知识分享小能手11 分钟前
Redis入门学习教程,从入门到精通, Redis Stack 完整语法知识点及使用指南(7)
数据库·redis·学习
小仓桑16 分钟前
【Agent智能体项目实战三】LangChain调用通义千问保姆级教程
数据库·阿里云·langchain·agent
GIS阵地23 分钟前
QgsDataSourceUri解析
数据库·c++·qt·开源软件·qgis
yunyun3212332 分钟前
自动化与脚本
jvm·数据库·python
暮冬-  Gentle°33 分钟前
使用PyTorch构建你的第一个神经网络
jvm·数据库·python
setmoon21434 分钟前
构建一个基于命令行的待办事项应用
jvm·数据库·python
IndulgeCui1 小时前
金仓数据库(KINGBASEES)敏感数据物理级销毁功能:配置、实操与验证全指南
数据库