通过SQL语句ALTER TABLE tablename_part1 SET TABLESPACE oss
将子分区表转冷存时,整个父分区表将被锁定,即在转存过程中无法对分区表进行读写操作。如果子分区表的数据量较大,转存所需的时间可能较长,长时间的锁表将对业务产生影响。为了解决此类问题,您可以通过DETACH
和ATTACH
的方式,实现子分区表在不锁表的情况下进行转冷存操作。
注意事项
当前方案仅适用于分区表中的子分区表转冷存场景,不适用于父分区表或非分区表。
仅支持范围分区,不支持列表分区以及HASH分区。
分区表上未创建全局索引。
转存过程中,仅对子分区表进行锁定,业务上需确保对该子分区表没有读写请求。转存完成后,可以正常进行读写操作。
操作步骤
此处以sales
表为例,假设sales
是一张按年分区的表。
先将
sales_2024
子分区卸载。ALTER TABLE sales DETACH PARTITION sales_2024;
卸载分区后,执行转冷存操作。在转存过程中,仅对
sales_2024
表本身进行锁定,父表及其他分区不受影响。ALTER TABLE sales_2024 SET TABLESPACE OSS;
转存完成后,将子分区重新挂载到父表。
ALTER TABLE sales ATTACH PARTITION sales_2024 FOR VALUES FROM ('2024-01-01') TO ('2025-01-01');
挂载分区后,子分区表即可通过父表进行正常的读写访问。
该文章对您有帮助吗?