很多DBA可能都有过这种经历:核心订单表按月份做了分区,三年前的分区从来没挪过地方,主库存储眼看就要报警,开发天天催扩容,可真正有业务价值的查询永远只集中在最近半年。把历史分区整体搬到另一个归档表空间、底层数据文件落在SATA磁盘上,是我处理这类问题最常用的手段。它不需要改业务SQL,不需要停库,本质上只是把分区从“高阶存储”搬到“廉价存储”,一次性缓解表空间扩容压力,同时保留数据在线查询能力。
这篇文章我会把完整流程拆开讲:从筛选归档分区、规划SATA表空间,到执行 MOVE PARTITION,再到索引重建、统计信息刷新和真实故障复盘。如果你手里也有一张动辄几百GB的分区表,正头疼于活动表空间持续吃紧,这篇文章可以直接当作操作手册参考。
1. 归档前先把分区边界想清楚:哪些数据才配迁到慢盘
1.1 分区移动的本质:一次段级物理搬迁
首先需要对齐一个认知:ALTER TABLE ... MOVE PARTITION ... TABLESPACE ... 不是把表里的数据一行行 UPDATE 到新位置,而是对整个分区段做一次重建。执行过程大致可以理解为三步:先在目标表空间里新建一个同结构的段对象,然后把源分区数据以直接路径写入新段,最后把元数据切换过去并回收旧段空间。
理解了这一点,你就会明白
