以报单表 USER_ORDER 表为例进行所述,按月自动分区步骤如下:
1、停止系统服务,防止新数据继续产生造成数据漏失。
2 、 将 表 备 份 两 张 表 USER_ORDER_DATA 和 USER_ORDER_COPY, 其 中
USER_ORDER_DATA 表用作恢复表数据,而 USER_ORDER_COPY 用以恢复表结构,所
以需要将 USER_ORDER_COPY 表数据暂时清空,这一步是关键一步,是为了新增索引的
时候造成索引错乱。
3、用以下语句生成按月自动分区表 USER_ORDER,此时分区表只有一个初始分区
p_month_1,而‘2014-01-01’保证是服务系统的 USER_ORDER 表的 create_time 字段最
早的时间月或者更早的时间月
create table USER_ORDER partition by range(create_time)
interval (numtoyminterval(1,'month'))
(
partition p_month_1 values less than (to_date('2014-01-01','yyyy-
mm-dd'))
) as select * from USER_ORDER_COPY;
4、新增表的本地索引,目前搜索需要的字段暂时是 ID, USER_ID, ORDER_TYPE,
OL_ID, OL_NBR, TERMINAL_NUM, ACCESS_NUM, STORE_ID, ORDER_STATUS,
CREATE_TIME, OFFER_ID,索引将这些字段作为本地索引,脚本语句如下:
create index index_create_time on user_order(CREATE_TIME) local;
create index index_id on user_order(ID) local;
create index index_order_status on user_order(ORDER_STATUS) local;
create index index_order_type on user_order(ORDER_TYPE) local;
create index index_user_id on user_order(USER_ID) local;
create index index_ol_id on user_order(OL_ID) local;
create index index_ol_nbr on user_order(OL_NBR) local;
create index index_terminal_num on user_order(TERMINAL_NUM) local;
create index index_access_num on user_order(ACCESS_NUM) local;
create index index_store_id on user_order(STORE_ID) local;
create index index_offer_id on user_order(OFFER_ID) local;
5、将 USER_ORDER_DATA 表备份的数据恢复到 USER_ORDER 表
Insert into user_order select * from user_order_data;
6、查证分区和索引的情况语句和结果如下:
select table_name,partition_name,high_value,tablespace_name from
user_tab_partitions where table_name like 'USER_ORDER' ;
select INDEX_NAME,PARTITION_NAME,HIGH_VALUE,STATUS from
user_ind_partitions where INDEX_NAME like 'INDEX_ID%' ;