2

我有一张包含大量数据的表格。我需要每天自动进行分区。我需要分区的名称是 sysdate 的日期。我该怎么做呢?

4

1 回答 1

5

当前 (11gR2) 无法为间隔分区表中的自动生成分区指定名称。请参阅有关间隔分区的常见问题 [ID 1479115.1](需要 Oracle 支持帐户):

自动创建的间隔分区的名称是什么?

[...] 目前无法为分区名称指定掩码或模板,但系统生成的名称可以重命名 [...]

您还受限于必须为DATEor类型的分区键列NUMBER,以及其他一些内容(请参阅该注释)。

您可以按照创建分区文档中的示例获取语法:

create table foo (date_created date, ...)
  partition by range(date_created)
  interval(numtodsinterval(1, 'DAY'))
  (partition one values less than (to_date('01012013', 'DDMMYYYY')));

使用上述方法,每当您插入具有今年或以后日期值的行时,都会创建一个新分区。不会为 2013 年之前的日期创建新分区。

要解决分区名称问题(如果有必要),您可以根据HIGH_VALUEin重命名分区USER_TAB_PARTITIONS,尽管这听起来不太好。
另一种选择是根本不重命名它们并在要查询特定分区时使用此语法:

select *
from foo
partition for (<the day you're interested in>);

例如,参见:Oracle 间隔分区技巧

于 2013-01-04T09:14:23.123 回答