Oracle - 如何使用条件子句最好地实现分区

时间:2014-02-21 01:51:53

标签: sql oracle database-design partitioning

我们的系统有许多表需要分区以支持数据维护。我们来谈谈一个表来简化问题。如果表中的数据达到100GB,则OLTP系统开始变慢。我们建议客户将数据从OLTP系统移动到OLAP系统。我们按年或月使用分区(基于数据插入率)来促进这一举措。

以下是表定义的示例:

create table myPartionedTable
(
  object_id        number ,
  object_type      varchar2(18),
  RETIREDTIMESTAMP   timestamp
)    
partition by range (RETIREDTIMESTAMP)
(
partition WM_2010 values less than(TO_DATE('01/01/2011','MM/DD/YYYY')),
partition WM_2011 values less than(TO_DATE('01/01/2012','MM/DD/YYYY')),
partition WM_2012 values less than(TO_DATE('01/01/2013','MM/DD/YYYY')),
partition WM_2013 values less than(TO_DATE('01/01/2014','MM/DD/YYYY')),
partition WM_2014 values less than(TO_DATE('01/01/2015','MM/DD/YYYY')),
partition WM_ACTIVE values less than(MAXVALUE)
)
tablespace MYDATE;

重要的一点是,数据需要保留在WM_ACTIVE分区中,直到数据被认为是RETIRED。退役后,数据将移至相应的分区,然后有资格从OLTP进入PARTITION_MOVE并进入OLAP。

这是一个好方法吗?有没有更好的方法来管理这个要求列表?

1 个答案:

答案 0 :(得分:0)

间隔分区可能会有所帮助。 Oracle可以根据需要自动创建分区。

可能没有必要担心主动与非主动,因为很容易使用所有分区的最小范围。

create table myPartionedTable
(
  object_id        number ,
  object_type      varchar2(18),
  RETIREDTIMESTAMP   timestamp
)    
partition by range (RETIREDTIMESTAMP) INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
(
    --You still need to specify the lowest possible partition.
    partition WM_2010 values less than(date '2011-01-01')
);