2013-10-18 66 views
1

我有一个包含大量信息的日志表。 我想将它分成两部分:第一部分是过去一个月的日志,因为它们通常被查看。第二部分是来自今年剩余时间的日志(压缩)。oracle 11g中的“动态”分区

我的问题是,分区哪里“直到2013年1月1日”,“比2013年1月1日更近”的所有例子 - 与固定日期...

我是什么寻找/期望是一种在上个月定义分区的方法,以便在日期发生变化时,将30天前的日志“自动”传输到压缩分区。

我想我可以创建另一个表,它是完全压缩的,并使用JOBS移动信息,但我希望有一个内置的解决方案。

谢谢。

回答

4

我想你想要基于日期的间隔分区。这会自动为你生成分区。例如,每月的分区将是:

create table test_data (
    created_date  DATE default sysdate not null, 
    store_id   NUMBER, 
    inventory_id  NUMBER, 
    qty_sold   NUMBER 
) 
PARTITION BY RANGE (created_date) 
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH')) 
(
    PARTITION part_01 values LESS THAN (TO_DATE('20130101','YYYYMMDD')) 
) 

当数据被插入,甲骨文将投入适当的分区或如果需要创建一个。分区名称会有点神秘(SYS_xxxx),但是您可以使用“partition for”子句只抓取您想要的月份。例如:

select * from test_data partition for (to_date('20130101', 'YYYYMMDD')) 
0

无法自动将数据传输到压缩分区。你可以,但是,安排一个简单的工作上个月的分区在每月的开始这种说法压缩:

ALTER TABLE some_table 
MOVE PARTITION FOR (add_months(trunc(SYSDATE), -1) 
COMPRESS; 

如果你想留下来,只有两个分区:当前月份和归档所有过去的交易,你也可以将分区与ALTER TABLE MERGE PARTITIONS合并,但就我而言,它会重建整个归档分区,所以我会劝阻这样做,并保持每个月在其独立分区中存储。