大批量导入导出数据的一点体会。
2009-11-20 17:34
253 查看
今天我测试了下批量导入导出数据。
首先,我用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秒。
索引则更快些。
首先,我用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秒。
索引则更快些。
相关文章推荐
- SPOOL、SQLLOADER数据导出导入的一点小总结(超全!!)
- mysql的大批量导入数据sql语句的一点优化
- 关于postgis导入导出shp文件数据的一点心得,可以复制正文到记事本并保存成bat文件
- ASP.NET大批量数据处理,97-2003Excel导入、导出
- 运用BCP导出数据库大批量数据以及导入大批量数据到数据库
- 大批量数据导出导入的一些经验总结
- 大批量快速导入导出数据[SqlServer+批处理]
- Oracle导入导出大批量数据的一种做法
- sqlserver自带的导入导出工具,分别导入大批量mysql和oracle数据时的感受
- SPOOL、SQLLOADER数据导出导入的一点小总结
- Oracle用imp和exp实现数据的导入和导出
- 数据的导出和导入工具:mysqldump
- SQL Server数据库之间进行数据导入导出
- 轻松实现SQL Server与Access、Excel数据表间的导入导出
- SQL SERVER2000教程-第五章 处理数据 第十四节 数据导入导出
- SQL数据导入导出问题总结
- Oracle数据导入导出imp/exp命令(10g以上expdp/impdp命令)
- ORACLE数据库导入、导出数据命令
- mysql 利用mysqldump 导入导出表结构、数据、存储过程及函数
- oracle数据导出和导入(exp,imp)