use*_*949 2 oracle oracle11g database-partitioning
我有一张包含大量数据的表格.我需要每天自动进行分区.我需要分区的名称是sysdate的日期.我该怎么做呢?
目前(11gR2)无法为间隔分区表中的自动生成分区指定名称.请参阅关于间隔分区的常见问题[ID 1479115.1](需要Oracle支持帐户):
自动创建的间隔分区的名称是什么?
[...]目前无法为分区名称指定掩码或模板,但系统生成的名称可以重命名[...]
您还必须使用分区键列,该列必须是类型DATE
或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')));
Run Code Online (Sandbox Code Playgroud)
通过上述操作,只要您在今年或以后插入具有日期值的行,就会创建一个新分区.2013年之前的日期不会创建新分区.
要解决分区名称问题(如果有必要的话),您可以基于HIGH_VALUE
in 重命名分区USER_TAB_PARTITIONS
,尽管这听起来不是很好.
另一种选择是根本不重命名它们,并在想要查询特定分区时使用此语法:
select *
from foo
partition for (<the day you're interested in>);
Run Code Online (Sandbox Code Playgroud)
请参阅示例:Oracle Interval Partitioning Tips.