在一个Oracle 19 c数据库上,我正在迁移一个按范围分区的表,该表包含一堆按引用分区的详细信息表。由于一些遗留的复杂性,最简单的方法是取消对该表的分区,保留所有现有数据。我该怎么做?
我可以将所有现有的分区合并到一个分区中,但这仍然意味着表已分区(例如:我无法创建同名的新分区)。
这是我尝试的:
1.对具有未分区的临时表的主表使用DBMS_REDEFINITION。但是start_redef_table失败,并显示“ORA-23549:引用分区中涉及的表”
1.对详细信息表使用DBMS_REDEFINITION失败,并出现相同错误
1.删除细节表上的外键约束(这样我就可以在表上运行DBMS_REDEFINITION)。此操作失败,显示“ORA-14650:引用分区表不支持该操作”
1条答案
按热度按时间ffscu2ro1#
有一个技巧你可以用途:交换分区!
要执行此操作:
create table ... for exchange
命令cascade
选项将分区与新的父表交换。所有的行都在未分区的表中。参见下面的示例。
与
dbms_redefinition
不同,您需要复制约束、赠款等。数据也在新表中,因此您需要重命名它们/更新同义词/更改视图以使其对应用透明。