如何从表中分离分区并将其附加到Oracle中的另一个分区?

pb3skfrl  于 2023-04-20  发布在  Oracle
关注(0)|答案(2)|浏览(174)

我有一个表,里面有5年的大量数据(比如说数百万条记录,这只是一个案例研究!),每一年都有一个分区。现在我想保留过去2年的数据,并将剩下的3年数据转移到一个名为archive的新表?
什么是理想的方法,具有最小的停机时间和高性能?

hsvhsicv

hsvhsicv1#

alter table exchange partition

这是答案。这个命令交换一个分区的段与一个表的段。它是光速的,因为它只做一些引用交换。所以,你需要一些临时表,因为AFAIK你不能直接交换它们。
类似于:

create table tmp_table(same columns);
Add partition p_2011 in table ARCH_TABLE;

ALTER TABLE CURR_TABLE EXCHANGE PARTITION P_2011 WITH TABLE tmp_table;
ALTER TABLE ARCH_TABLE EXCHANGE PARTITION P_2011 WITH TABLE tmp_table;

请在运行前测试您的代码。

v1uwarro

v1uwarro2#

如果你的表是用RANGE、INTERVAL或HASH分区的,那么使用分区交换应该不会有太大的问题:

ALTER TABLE <partitioned table>
EXCHANGE PARTITION <partition name>
WITH TABLE <non-partitioned temporary table>

可选指令WITHOUT VALIDATIONUPDATE GLOBAL INDEXES在末尾。
但是,请记住,如果要移动使用PARTITION BY REFERENCE的表的分区,或者移动按引用分区的表中具有按引用使用的数据的父表的分区,则必须使用Oracle Server版本12.1或更高版本。在Oracle Server 11 gR 2中,按引用分区的表的分区交换并不完全受支持,您可能会遇到日期/引用完整性错误

ORA-02266: unique/primary keys in table referenced by enabled foreign keys
ORA-14128: FOREIGN KEY constraint mismatch in ALTER TABLE EXCHANGE PARTITION

或者如果要禁用或删除受影响的约束

ORA-14650: operation not supported for reference-partitioned tables

如果您不能/不愿升级到Oracle Server 12.1+,则给予将数据复制到存档表,并将从原始表中删除作为唯一选项。

相关问题