重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 21|回复: 0
打印 上一主题 下一主题

[Oracle] Oracle 普通表转分区表 标准方案文档

[复制链接]
跳转到指定楼层
楼主
发表于 2026-6-7 23:37:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
适用版本:11gR2、12c、19c、23c



目标:将普通堆表(非分区)在线 / 离线转换为分区表,保留数据、索引、约束、依赖





一、适用场景


表数据量大、查询慢、删除历史数据困难
需要按时间 / 地区 / 类型做分区裁剪、分区交换、分区归档
运维需要:快速删除分区、备份分区、优化 IO




二、普通表转分区表 5 种主流方法


按推荐优先级排序:



方法 1:DBMS_REDEFINITION(在线重定义)【企业首选】


优点:



✅ 在线转换、业务几乎不停



✅ 保留索引、约束、触发器、权限



✅ 支持分区键任意选择



✅ 11g 及以上通用



缺点:



需要额外存储空间(原表 1 倍)



核心步骤:



检查是否可重定义







EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE('USER','TABLE');




创建目标分区表(空表)
开始重定义
sql






EXEC DBMS_REDEFINITION.START_REDEF_TABLE(...);




同步数据(可选多次)







EXEC DBMS_REDEFINITION.SYNC_INTERIM_TABLE(...);




完成重定义







EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE(...);






适用:生产核心表、不能停机。





方法 2:CREATE TABLE ... AS SELECT + 交换分区(CTAS + EXCHANGE)


最快、最简单,适合停机窗口允许的场景。



步骤:



创建分区表(结构相同)
插入数据







INSERT INTO 分区表 SELECT * FROM 原表;




重建索引、约束
改名切换(可选)


优点:简单、速度快



缺点:停机、需重建索引约束





方法 3:Exchange Partition(分区交换)【超快】


适合:原表数据就是一个分区的范围(如全是 2025 年)



步骤:



建分区表(含对应分区)
交换分区(秒级)







ALTER TABLE 分区表 EXCHANGE PARTITION p2025
WITH TABLE 原表;






优点:秒级、几乎无 IO



缺点:数据必须刚好匹配一个分区





方法 4:EXP/IMP 或 EXPDP/IMPDP(数据泵)


适合:跨版本、跨平台、大表迁移 + 分区改造一起做



步骤:



目标库建分区表
导出原表
导入到分区表(PARTITION_OPTIONS)


优点:安全、可断点续传



缺点:慢、停机





方法 5:Oracle 12cR2+ 新特性:ALTER TABLE ... MODIFY TO PARTITION


12cR2 最爽语法:一行命令转分区










ALTER TABLE table_name
MODIFY TO PARTITION BY RANGE (create_time)
(
  PARTITION p2024 VALUES LESS THAN (TO_DATE('2025-01-01','YYYY-MM-DD')),
  PARTITION p2025 VALUES LESS THAN (MAXVALUE)
) ONLINE;




优点:



✅ 在线



✅ 一行命令



✅ 保留索引约束



✅ 官方最佳



缺点:需 12cR2 及以上





三、方案对比表(最实用)


表格




方法                             在线        难度        速度        版本        推荐度
12cR2 ALTER 转分区        ✅        极低        快        12cR2+        ⭐⭐⭐⭐⭐
DBMS_REDEFINITION        ✅        中        中        11g+        ⭐⭐⭐⭐
CTAS + INSERT                ❌        低        快        全版本        ⭐⭐⭐
Exchange Partition        ✅        低        极快        全版本        ⭐⭐⭐⭐
EXPDP/IMPDP                ❌        中        慢        全版本        ⭐⭐




四、转换前必做检查(重要)



表是否有主键(重定义需要)
空间是否足够(1.5~2 倍原表)
选择分区键:时间字段优先
禁止业务 DDL 期间操作
提前备份表
转换后重建 / 验证索引

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2026-6-18 00:50 , Processed in 0.397167 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表