不能。SWITCH PARTITION仅交换分区元数据,不移动或删除数据;归档需配合预建结构对齐的空归档表及后续清理,且须满足同库、同文件组、结构一致、归档表为空四大条件。
SWITCH PARTITION 能不能直接归档历史数据?
不能。SWITCH PARTITION 本身不移动数据、不删除数据,也不写入新表;它只是快速交换分区元数据(比如将一个分区从主表“切”到空的归档表中)。真正完成归档,必须配合提前建好的归档表结构 + 分区对齐 + 事后清理逻辑。
执行 SWITCH 前必须满足的 4 个硬性条件
缺一不可,否则报错 The ALTER TABLE SWITCH statement failed:
- 源分区表和目标归档表必须在同一个数据库、同一文件组(或都启用
DATA_COMPRESSION且压缩设置一致) - 两表结构完全一致:列名、顺序、类型、NULL 性、排序规则、约束(但主键/索引可不同)
- 归档表必须为空,且已按相同分区函数和方案创建(即用
CREATE TABLE ... ON [ps_archive](partition_col)) - 源分区当前不能处于正在拆分(
SPLIT)或合并(MERGE)过程中
典型归档流程:三步不可颠倒
以按月分区的 sales_order 表为例,归档 2022 年及以前数据:
1. 准备归档表
CREATE TABLE sales_order_archive (
order_id INT,
order_date DATE,
amount DECIMAL(10,2)
) ON ps_archive(order_date);
2. 切换最老分区(假设是第 1 分区)