ALTER TABLE <partitioned table>
EXCHANGE PARTITION <partition name>
WITH TABLE <non-partitioned temporary table>
可选指令WITHOUT VALIDATION和UPDATE 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+,则给予将数据复制到存档表,并将从原始表中删除作为唯一选项。
2条答案
按热度按时间hsvhsicv1#
这是答案。这个命令交换一个分区的段与一个表的段。它是光速的,因为它只做一些引用交换。所以,你需要一些临时表,因为AFAIK你不能直接交换它们。
类似于:
请在运行前测试您的代码。
v1uwarro2#
如果你的表是用RANGE、INTERVAL或HASH分区的,那么使用分区交换应该不会有太大的问题:
可选指令
WITHOUT VALIDATION
和UPDATE GLOBAL INDEXES
在末尾。但是,请记住,如果要移动使用PARTITION BY REFERENCE的表的分区,或者移动按引用分区的表中具有按引用使用的数据的父表的分区,则必须使用Oracle Server版本12.1或更高版本。在Oracle Server 11 gR 2中,按引用分区的表的分区交换并不完全受支持,您可能会遇到日期/引用完整性错误
或者如果要禁用或删除受影响的约束
如果您不能/不愿升级到Oracle Server 12.1+,则给予将数据复制到存档表,并将从原始表中删除作为唯一选项。