特定子分区的分区交换加载

时间:2011-08-12 08:59:22

标签: sql database oracle oracle11g database-partitioning

查看存档策略 - 我们必须存档特定数据集。

而不是插入/删除例程 - 我正在考虑使用分区交换。

待存档表是按日期划分的区间范围,在国家/地区有一个列表子分区。

我希望对特定国家进行分区交换。

create table 
test_table
(tbl_id number,
country varchar2(2),
sales_dt date,
volume number)
partition by range (sales_dt) interval (NUMTOYMINTERVAL(1,'Month'))
subpartition by list (country)
Subpartition template
(subpartition p_ireland values ('IR'),
subpartition p_france values ('FR'),
subpartition p_other values (DEFAULT))
(partition before_2008 values less than (to_date('01-JAN-2008','DD-MON-YYYY')));

加载的数据正确地落入分区和子分区。所有分区名称都是系统生成的。

当我为所有'FR'子分区进行分区交换时 - 我无法确定逻辑。

使用

Alter table test_table
exchange subpartition system_generated_name
with table TEST_TABLE_ARCH;

我可以换掉一个特定的“已知”子分区。

我知道您可以在Oracle 11g中使用'for'逻辑,但无法使语法生效。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我们过去对此进行了测试,并认为我们必须提出一个正确的程序。目标是做两个分区交换:一个在源表和空交换表之间,另一个在你现在填充的交换表和归档表之间。

Prereqs:创建一个空交换表,与源表进行分区交换。此外,还要创建一个将进行分区的归档表。

高级流程:

  • 在存档表中创建新的空分区。
  • 在交换表和要归档的源分区之间进行分区交换 (结果:源表中的空分区,交换表中的归档分区)
  • 在归档表中交换表和新的空分区之间进行分区交换; (结果:原始源表分区现在是归档表中的一个分区,交换表又变回为空)
  • 在源表中删除空分区(假设您不想重复使用它)

我们从未对此进行编码,因此这个过程可能需要调整,但我们认为如果我们采取这样的策略,这就是我们必须要做的事情。

相关问题