大批量导入导出数据的一点体会。

 今天我测试了下批量导入导出数据。

 

首先,我用spool从A数据库中导出数据到一个文本文件,但是发现速度有些慢。因为表中数据有120多万条。后来就用pl/sql里面的export query将数据导出到csv文件,这样速度是快。可是这样导出的文件,用sqlldr导入到新库中去的时候,老是报错。而我查了数据,数据是没有问题的。最后,我用toad里面的"Save Grid Contents",导出文件格式为txt,这个时候,数据才没有问题。可以顺利的导入到新库中去。只是导入速度上还不是特别满意,但是还凑合着用了。估计是我机器性能不是太好的原因。

 

Save Grid Contents的按钮如下:

 

 

示例:

1,exp_customer.sql。   查询数据。这个用过,但是速度不行。还不如用toad导出数据为txt。

set echo off            --是否显示执行的命令内容 
set feedback off       --是否显示 *   rows   selected 
set heading off        --是否显示字段的名称
set verify off         --是否显示替代变量被替代前后的语句。fil
set trimspool off      --去字段空格
set pagesize 50000     --页面大小
set linesize 50           --linesize设定尽量根据需要来设定,大了生成的文件也大
define fil= 'E:/1120/customer_data.txt'
spool &fil
select customerid || '@@' || customername || '@@' || sex || '@@' ||
       customertype || '@@' || papertype || '@@' || paperno || '@@' ||
       customerclass || '@@' || industry || '@@' || status || '@@' ||
       postlevel || '@@' || operatorcode || '@@' ||
       to_char(createtime, 'yyyy-mm-dd hh24:mi:ss') || '@@' || remark || '@@' ||
       busipassword || '@@' || customerprops || '@@' ||
       to_char(statusupdatetime, 'yyyy-mm-dd hh24:mi:ss') || '@@' ||
       passwdlevel
  from t_customerinfo ci;
spool off

2,customer.ctl。控制文件。为sqlldr所用。

OPTIONS (ROWS=10000)
LOAD DATA
INFILE 'cust_20091120.txt'
BADFILE 'customer.bad'
replace
INTO TABLE t_customerinfo
FIELDS TERMINATED BY "@@"
(customerid,customername,sex,customertype,papertype,paperno,customerclass,industry,status,postlevel,operatorcode,createtime"TO_DATE(:createtime,'yyyy-mm-dd hh24:mi:ss')",remark,busipassword,customerprops,statusupdatetime"TO_DATE(:statusupdatetime,'yyyy-mm-dd hh24:mi:ss')",passwdlevel)

3,customerimp.cmd。批处理文件,执行导入。

sqlldr lzf/lzf@testdb control=customer.ctl

 

 


最后,需要提醒的是,在导入之前,表上面最好不要有主键、索引之类的,因为会非常影响速度。

我刚开始没有删除主键、索引,所以速度很慢,删除这些东西后,导入进去120多万条数据,只需要1分多钟。

等到数据全部导入之后,在在表上建主键、索引。 我测试的结果是,120w条数据,建立主键所花费的时间是17秒。

索引则更快些。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值