按小时分区,2小时或者3小时,每个区控制在千万记录级别使用一个表,是没什么问题的管理和查询也都比较方便truncate partition

解决方案 »

  1.   

    最好是能在数据插入时,格式化data列去掉秒,转化为number型
      

  2.   

    biti_rainy(biti_rainy)说的很好,这么大的数据量应该尽可能地细化分区。按照小时分区当然是可以的,如果你愿意,还可以根据分钟、秒来分区,这在技术上不是问题。参考如下的语句:
    SQL> CREATE TABLE QSUN.t_part_test
      2  ( a NUMBER,
      3   b NUMBER,
      4   c DATE)
      5  PARTITION BY RANGE (c)
      6    ( PARTITION part_1 VALUES LESS THAN (to_date('10/20/2002 10:00','MM/DD/YYYY HH24:MI')) 
      7      TABLESPACE TS_PART1 NOLOGGING, 
      8      PARTITION part_2 VALUES LESS THAN (to_date('10/20/2002 12:00','MM/DD/YYYY HH24:MI')) 
      9      TABLESPACE TS_PART2 NOLOGGING);使用alter table truncate partitiion 来删除分区也非常方便。
      

  3.   

    谢谢大家!
    用分区是没有什么疑问的。
    怎么用它还是有点问题的?
    假设一个月一个表
    按照一个分区rowcount<10,000,000原则。
    假设一亿条/天,一天十个分区,一个月300分区(不知是否合理?)
    按照弱水兄介绍例子来分区的话,PARTITION part_1 VALUES LESS THAN (to_date('10/20/2002 10:00','MM/DD/YYYY HH24:MI'))
    这个比较时间('10/20/2002 10:00')是固定的. 每次新建分区时,都得手工指定时间,新建象我这样的一个分区,得指定300个时间的。(有好的办法吗?)
      

  4.   

    一点建议:创建一个表来存储跟分区有关信息,可循环使用也可LESS THAN (to_date('10/20/2002 10:00','MM/DD/YYYY HH24:MI')):to_date() 是一个函数
    既然是函数,那么你也可以换成自己写的一个函数
    那你一定能通过函数返回你想要的结果
    你想要的结果一定可以通过 sysdate(或者某个序号) /  某个字典信息表中的信息来决定(也就是说你可以按照预先构想的分区范围,把相关时间分段存储在字典表中,然后每次重新创建分区的时候只是按照这个时间分段一步一步往下走,如果出现异常,则人为的也可以调整)是不是?
      

  5.   

    谢谢biti_rainy(biti_rainy) !
    您认为按照我上面的办法进行分区,合理吗?
    能有别的分区的办法吗?
    比如一天建一个分区?或者别的?
      

  6.   

    到底怎么分区好最好是结合的你业务和数据特点
    充分利用分区所可能带来的优点但我还是建议你仔细读一读相关文档
    然后读一读别人的经验上的东西再结合自己应用来决定了asktom.oracle.com
    www.cnoug.org  (这个论坛上有一些文章也不错,我没有做广告的意思,只因为上面有几个热衷于oracle 的朋友经常写一些经验体会,也许对大家有帮助)
    www.ixora.com.au你都可以去搜一搜看一看