原来用sql server比较多,数据多了的时候一般就分成多个数据库。如一个月一个库,甚至一天一个库,很方便。但是,现在想用oracle的话,只有一个数据库了,那些历史数据一般是怎么处理的?是不是就多建一些表,在表名的后面加后缀,如daylog_201101,daylog_201102,.....
或者说另外建一个用户名来放这些表,如 user_history_2011.daylogs_01,user_history_2011.daylogs_02,,user_history_2010.daylogs_02,...总之数据多了的话,总得想办法分开,不至于必须放在一张表里面吧 即使用上些分区函数,放在一张表里面恐怕太大了,主要是日积月累的,没个完

解决方案 »

  1.   

    也不一定。一般是给大表分区,但是我们的项目中,也有按不同的国家做表。
    比如说table_ZN, table_JP,这样的。
      

  2.   

    给你写个例子CREATE TABLE day_table
    (
        datetime              date
    )
    PARTITION BY RANGE (datetime)
      (PARTITION date_201110 VALUES LESS THAN (to_date('2011-11-01','yyyy-mm-dd')),
       PARTITION date_201111 VALUES LESS THAN (to_date('2011-12-01','yyyy-mm-dd')),
       PARTITION date_max VALUES LESS THAN (MAXVALUE))
    ;
    insert into day_table values(to_date('2011-10-01','yyyy-mm-dd'));
    insert into day_table values(to_date('2011-10-15','yyyy-mm-dd'));
    insert into day_table values(to_date('2011-10-31','yyyy-mm-dd'));
    insert into day_table values(to_date('2011-11-01','yyyy-mm-dd'));
    insert into day_table values(to_date('2011-11-15','yyyy-mm-dd'));
    commit;select * from day_table;
     
    DATETIME
    -----------
    2011-10-1
    2011-10-15
    2011-10-31
    2011-11-1
    2011-11-15select * from day_table partition(date_201110);
     
    DATETIME
    -----------
    2011-10-1
    2011-10-15
    2011-10-31select * from day_table partition(date_201111);
     
    DATETIME
    -----------
    2011-11-1
    2011-11-15select * from day_table partition(date_max);
     
    DATETIME
    -------------现在插入一条 12 月份的数据
    insert into day_table values(to_date('2011-12-01','yyyy-mm-dd'));
    commit;select * from day_table partition(date_max);
     
    DATETIME
    -----------
    2011-12-01--添加一个 201112 的分区
    alter table day_table split partition date_max at(to_date('2012-01-01','yyyy-mm-dd')) into (partition date_201201, partition date_max);select * from day_table partition(date_201112);
     
    DATETIME
    -----------
    2011-12-01select * from day_table partition(date_max);
     
    DATETIME
    -----------