我可以在具有相同名称的分区的两个表之间交换分区吗?

Sam*_*han 2 performance oracle oracle-11g-r2 plsql partitioning performance-tuning

我正在尝试从备份表中恢复一个分区。两个表都有同名的分区。我的目标是从备份表分区 x 中抓取数据并将其放入原始表分区 x。x 是分区的名称。

我试图通过使用辅助表来做到这一点。有没有办法直接交换它们或任何其他性能更好的解决方案?

Han*_*non 7

你见过这个吗? https://community.oracle.com/thread/889338?start=0&tstart=0

它指出您只能将分区从分区表交换到非分区表,反之亦然。

您需要暂时将分区交换到临时的非分区表中,然后再交换到目标分区表中。

上面广泛阐述的规则有一些有趣的皱纹;请参阅以下摘自 Oracle 文档的摘录:

exchange_partition_subpart

使用 EXCHANGE PARTITION 或 EXCHANGE SUBPARTITION 子句交换以下数据和索引段:

  • 一张未分区的表,其中包含:

    1. 一个范围、列表或哈希分区

    2. 一个范围、列表或散列子分区

  • 一个范围分区表,具有范围范围或列表范围复合分区表分区的范围子分区

  • 一个散列分区表,其中包含范围散列或列表散列复合分区表分区的散列子分区

  • 一个列表分区表,其中包含范围列表或哈希列表复合分区表分区的列表子分区

在所有情况下,表的结构和被交换的分区或子分区,包括它们的分区键,都必须相同。在列表分区和子分区的情况下,相应的值列表也必须匹配。