日期:2014-05-16  浏览次数:20484 次

ORACLE创建分区表及分区表的数据迁移

? ? 对于目前数据量较大的表,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;

?

具体使用的时候可以根据实际需要进行相应的迁移操作。