按范围创造碎片

时间:2017-03-03 07:28:00

标签: database informix

任何人都可以帮我在INFORMIX中的现有表格上创建FRAGMENT BY RANGE(GENERATED_DATE)吗?

我试过,但我不能

ALTER FRAGMENT ON TABLE neura_biahmis_prod.episode_service_rendered_tbl INIT
   FRAGMENT BY RANGE(GENERATED_DATE) 
      INTERVAL (NUMTOYMINTERVAL(6,'MONTH')) 
PARTITION Q1_EPSIODE_SERVICES VALUES > DATE('2016-01-01') AND VALUES <= DATE('2016-06-01') IN datadbs1,
PARTITION Q2_EPSIODE_SERVICES VALUES > DATE('2016-06-01') AND VALUES <= DATE('2016-12-01') IN datadbs2,
PARTITION Q3_EPSIODE_SERVICES VALUES > DATE('2016-12-01') AND VALUES <= DATE('2017-01-01') IN datadbs3;

1 个答案:

答案 0 :(得分:0)

PARTITION子句只能包含1个不等式运算符,即较小的运算符(<)。

根据手册(FRAGMENT BY clause):

   .-,-----------------------------------------------------------.   
   V                                                             |   
>----PARTITION--partition--+-VALUES <  range_expr-+--IN--dbspace-+--|
                           |  (2)                 |                  
                           '-------VALUES IS NULL-'                

所以你必须将你的分区条款更改为:

PARTITION Q1_EPISODE_SERVICES VALUES < DATE('2016-07-01') IN datadbs1,
PARTITION Q2_EPISODE_SERVICES VALUES < DATE('2017-01-01') IN datadbs2,
PARTITION Q3_EPISODE_SERVICES VALUES < DATE('2017-07-01') IN datadbs3;

请注意,使用INIT子句,表将重建。确保你有足够的磁盘空间(如果你的数据库被记录,这将是一个单独的事务,你可能会遇到一个长事务。)