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;

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

猜你喜欢

转载自qsjiangs.iteye.com/blog/1941428
今日推荐