Oracle11g中的自动分区

use*_*949 2 oracle oracle11g database-partitioning

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

Mat*_*Mat 5

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

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

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

您还必须使用分区键列,该列必须是类型DATENUMBER其他一些内容(请参阅该注释).

您可以按照创建分区文档中的示例来了解语法:

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

通过上述操作,只要您在今年或以后插入具有日期值的行,就会创建一个新分区.2013年之前的日期不会创建新分区.

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

select *
from foo
partition for (<the day you're interested in>);
Run Code Online (Sandbox Code Playgroud)

请参阅示例:Oracle Interval Partitioning Tips.