Oracle千万数量级的Insert操作

Posted by bluesky blog on February 27, 2012

目录



源数据两8千万左右,目标表为一组合分区表

使用dmp导出,然后导入,卡住,不报错,就一直卡住。

改变策略,新建临时表,导入,约10分钟作业,全部导入成功。

尝试交换分区,无奈失败,目标分区是组合分区,报的错网上鲜有解决方法。

将源数据导出为txt,尝试用sqlldr进行导入,速度保持在1分钟2万条作业。

速度不能接受。

于是只能做insert操作了,

8千万,insert上一定要小心。

脚本如下: #!/bin/bash sqlplus app_data/app_data@jrdb1 «EOF alter session enable parallel dml; set echo off; set serveroutput on; set timing on; set autocommit 200000; alter session enable parallel dml; insert into t98_sav_acct_bal_daily_stat nologging select * from dmp_data.t98_sav_acct_bal_daily_stat commit; set autocommit off; /

首先,采用并行,加快速度。其次为20万一次commit防止意外。其次使用nologging避免写日志。

执行结果如下:

SQL*Plus: Release 10.2.0.4.0 - Production on 星期一 2月 27 15:24:47 2012
Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
SQL>
会话已更改。
SQL> SQL> SQL> SQL> SQL>
会话已更改。
已用时间:  00: 00: 00.00
SQL>   23 
已创建81282003行。
已用时间:  00: 12: 39.46
SQL> SQL> SQL>
已创建81282003行。
已用时间:  00: 11: 00.71

用时11分钟左右,完全能够接受。