? ? 对于目前数据量较大的表,REPORT_AP_STAT_HOUR(2个月有1900万),CLIENT_OFFLINE_HISTORY(2个月有4800万),如果保存超过一年数据将达数亿,对这种级别的数据索引优化已经达不到要求的(15秒之内完成查询),因此需要进行按月分表,使用ORACLE11G的新特性interval按月进行自动分表。
分区表建表语句如下:
?
?
CREATE TABLE CLIENT_OFFLINE_HISTORY_IN( "CLIENT_OFFLINE_ID" NUMBER(20) NOT NULL , "AP_ID" NUMBER(20) NULL , CONSTRAINT "PK_CLIENT_INTERVAL" PRIMARY KEY ("CLIENT_OFFLINE_ID") )PARTITION BY RANGE (CREATE_TIME) INTERVAL ( NUMTOYMINTERVAL (1, 'MONTH') ) (PARTITION part1 VALUES LESS THAN (TO_DATE ('2013-08-01', 'yyyy-MM-dd')))
?
?
??
由于ORACLE不能直接将表修改为分区表,对于已经部署的系统需要先将分区表建立,然后将老表中的数据迁移至分区表。
?
普通表与分区表之间的数据迁移目前有三种方案:
(1)? ? ? ?使用INSERT INTO SELECT?语句,速度较慢
?
INSERT INTO CLIENT_OFFLINE_HISTORY_IN SELECT * FROM CLIENT_OFFLINE_HISTORY
?
?
(2)? ? ? ?使用expdp/impdp工具,速度较快
? ? ? 查看目录:
SELECT * FROM dba_directories;
?
创建dir dba权限:
?
CREATE DIRECTORY DPDATA AS '/home/oracle/dump';
? ? ?执行导出语句
?
?
expdp wlan/wlan1o2o DUMPFILE=history.dmp TABLES=CLIENT_OFFLINE_HISTORY DIRECTORY=dpdata
?
?
执行导入语句
?
impdp wlan/wlan1o2o DIRECTORY=dpdata DUMPFILE=history.dmp TABLES=CLIENT_OFFLINE_HISTORY REMAP_TABLE=CLIENT_OFFLINE_HISTORY:CLIENT_OFFLINE_HISTORY_IN TABLE_EXISTS_ACTION=APPEND
?
?
(3)???????使用交换分区速度最快,原理迁移不做任何的IO操作只是更改数据字典,限制条件是普通表内数据必须符合分区中的一个分区
?
ALTER TABLE TEST_INTERVAL_PAR EXCHANGE PARTITION PART1 WITH TABLE TEST_INTERVAL WITHOUT VALIDATION;
?
具体使用的时候可以根据实际需要进行相应的迁移操作。