0

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

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

待归档表是按日期划分的区间范围,按国家/地区划分列表子分区。

我要对特定国家/地区进行分区交换。

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”逻辑,但无法使语法正常工作。

有任何想法吗?

4

1 回答 1

0

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

先决条件:创建一个空交换表来与源表进行分区交换。此外,创建一个也将被分区的存档表。

高级流程:

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

我们从未对此进行编码,因此此过程可能需要调整,但我们认为如果我们采用这样的策略,我们将不得不这样做。

于 2011-09-28T13:06:22.360 回答