需求:生产环境中,从A表中(3000万记录),按条件读取1000万条记录插入到B表中.
要求对生产环境的影响降到最低。
思路:
1.由于需求不是很紧急,因此选择在业务不繁忙的中午进行。
2.使用数据泵expdp 的query 按指定的条件将A表的1000万条记录导出为dmp文件。
3.使用impdp导入dmp。
下面模拟一下实现过程:
一、授予导出用户report 对目录DATA_PUMP_DIR的读/写权限。
C:/Users/Liangwei>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on 星期二 3月 1 20:24:20 2011
Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> col owner for a5;
SQL> col DIRECTORY_NAME for a13;
SQL> col DIRECTORY_PATH for a41;
SQL> SELECT * FROM dba_directories WHERE directory_name='DATA_PUMP_DIR';
OWNER DIRECTORY_NAM DIRECTORY_PATH
----- ------------- -----------------------------------------
SYS DATA_PUMP_DIR d:/oracle/Liangwei/admin/liangwei/dpdump/
SQL> grant read ,write on directory DATA_PUMP_DIR to report;
授权成功。
SQL> exit
二、编写导出脚本
1.编写参数文件
如要导出的表的查询条件如下:
SELECT * FROM test WHERE object_type='TABLE';
SELECT * FROM wflog WHERE logno=2;
参数文件test.par 内容如下:
DUMPFILE=test.dmp DIRECTORY=DATA_PUMP_DIR JOB_NAME=JOB02 TABLES= ( TEST, WFLOG ) QUERY= ( wflog:"where logno=2", test:"where OBJECT_TYPE='TABLE'" )
2.编写导出命令
D:/oracle>expdp report/report parfile=test.par
Export: Release 11.2.0.1.0 - Production on 星期二 3月 1 20:48:51 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
启动 "REPORT"."JOB02": report/******** parfile=test.par
正在使用 BLOCKS 方法进行估计...
处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计: 128 KB
处理对象类型 TABLE_EXPORT/TABLE/TABLE
处理对象类型 TABLE_EXPORT/TABLE/INDEX/FUNCTIONAL_AND_BITMAP/INDEX
处理对象类型 TABLE_EXPORT/TABLE/INDEX/STATISTICS/FUNCTIONAL_AND_BITMAP/INDEX_STATISTICS
处理对象类型 TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . 导出了 "REPORT"."TEST" 13.60 KB 44 行
. . 导出了 "REPORT"."WFLOG" 25.63 KB 18 行
已成功加载/卸载了主表 "REPORT"."JOB02"
******************************************************************************
REPORT.JOB02 的转储文件集为:
D:/ORACLE/LIANGWEI/ADMIN/LIANGWEI/DPDUMP/TEST.DMP
作业 "REPORT"."JOB02" 已于 20:49:23 成功完成
二、导入数据
D:/oracle/>impdp report/report DUMPFILE=test.dmp DIRECTORY=DATA_PUMP_DIR JOB_NAME=JOB02
Import: Release 11.2.0.1.0 - Production on 星期二 3月 1 20:54:12 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
已成功加载/卸载了主表 "REPORT"."JOB02"
启动 "REPORT"."JOB02": report/******** DUMPFILE=test.dmp DIRECTORY=DATA_PUMP_DIR JOB_NAME=JOB02
处理对象类型 TABLE_EXPORT/TABLE/TABLE
处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA
. . 导入了 "REPORT"."TEST" 13.60 KB 44 行
. . 导入了 "REPORT"."WFLOG" 25.63 KB 18 行
处理对象类型 TABLE_EXPORT/TABLE/INDEX/FUNCTIONAL_AND_BITMAP/INDEX
处理对象类型 TABLE_EXPORT/TABLE/INDEX/STATISTICS/FUNCTIONAL_AND_BITMAP/INDEX_STATISTICS
处理对象类型 TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
作业 "REPORT"."JOB02" 已于 20:54:20 成功完成