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'));
相关推荐
Flying pigs~~8 小时前
RAG智慧问答项目
数据库·人工智能·缓存·微调·知识库·rag
misL NITL9 小时前
mysql之如何获知版本
数据库·mysql
许彰午9 小时前
CacheSQL(二):主从复制——OpLog 环形缓冲区与故障自动恢复
java·数据库·缓存
2401_8323655210 小时前
JavaScript中rest参数(...args)取代arguments的优势
jvm·数据库·python
2301_7796224110 小时前
Go语言怎么用信号量控制并发_Go语言semaphore信号量教程【入门】
jvm·数据库·python
2301_7662834411 小时前
c++如何将控制台输出保存到文件_cout重定向到txt【详解】
jvm·数据库·python
北极的冰箱11 小时前
MySQL Ver 8.0.41 for macos14.7密码遗忘
数据库·mysql
XDH_CS11 小时前
MySQL 8.0 安装与 MySQL Workbench 使用全流程(超详细教程)
开发语言·数据库·mysql
treacle田12 小时前
达梦数据库-统计信息收集-记录
数据库·达梦数据库统计信息收集
审判长烧鸡12 小时前
PostgreSQL之索引/函数/触发器
数据库·postgresql·触发器·函数·索引