ORACLE sql loader 导入大数据的方式


sql loader 工具它可以把一些以文本格式存放的数据顺利的导入到oracle数据库中,是一种在不同数据库之间进行数据迁移的非常方便而且通用的工具。缺点就速度比较慢(比直接INSERT INTO快多了),另外对blob等类型的数据就有点麻烦了 用法: SQLLDR keyword=value [,keyword=value,...]


1. sql loader 工具导入

(以100W条测试数据)

1.1. 新建test.csv数据文件

格式如下:

1,hello1

2,hello2

3,hello3

... ...

 

十万条数据的csv文件同样由java小程序生成:

    File file = new File("d:" + File.separator + "demo.txt"); // 要操作的文件

    OutputStream out = null// 声明字节输出流

    out = new FileOutputStream(file, true); // 通过子类实例化

    for (int i = 1; i <= 100000; i++) {

        String str = i+","+"hello"+i+"\r\n"// 要输出的信息

        byte b[] = str.getBytes(); // 将String变为byte数组

        out.write(b); // 写入数据

    }

out.close(); // 关闭

 

1.2. 建立表格

create table test(id varchar2(255),name varchar2(255));

 

1.3. 建立控制文件test.ctl

load data

infile demo.csv

into table test     

(

id char terminated by ',',

name char terminated by whitespace

)

 

PS: infile 指数据源文件 这里我们省略了默认的 discardfile   result.dsc   badfile   result.bad   
         into   table   test 默认是INSERT,也可以into   table   resultxt   APPEND为追加方式,或
REPLACE   
         terminated   by   ',' 指用逗号分隔
   
         terminated   by   whitespace 结尾以空白分隔
  


 

1.4. 导入数据

ctl文件和csv文件放置在D盘根目录下,命令行中运行:

 D:\>sqlldr   userid=scott/tiger  control=test.ctl  

1.5. 测试结果

急速,10W条数据转眼导入结束,100W条数据耗时10s


sql*loader 是一个程序, 用来把 文本文件里面的数据, 导入到 Oracle 数据库里面。


sql loader使用例子

a)SQLLoader将 Excel 数据导出到 Oracle
1.创建SQL*Loader输入数据所需要的文件,均保存到C:\,用记事本编辑: 
控制文件:input.ctl,内容如下:

load data --1、控制文件标识 
infile 'test.txt' --2、要输入的数据文件名为test.txt 
append into table test --3、向表test中追加记录 
fields terminated by X'09' --4、字段终止于X'09',是一个制表符(TAB) 
(id,username,password,sj) -----定义列对应顺序

a、insert,为缺省方式,在数据装载开始时要求表为空 
b、append,在表中追加新记录 
c、replace,删除旧记录,替换成新装载的记录 
d、truncate,同上

在DOS窗口下使用SQL*Loader命令实现数据的输入

C:\>sqlldr userid=system/manager control=input.ctl 
默认日志文件名为:input.log 
默认坏记录文件为:input.bad

2.还有一种方法:可以把EXCEL文件另存为CSV(逗号分隔)(*.csv),控制文件就改为用逗号分隔 
LOAD DATA 
INFILE 'd:\car.csv' 
APPEND INTO TABLE t_car_temp 
FIELDS TERMINATED BY "," 
(phoneno,vip_car)



参考:http://hi.baidu.com/poyundao/item/c36ee8f22682b8c10dd1c8bb


延伸:
下面是一个简单的例子:

SQL*Loader

首先需要一个 控制文件test_main.ctl,内容如下:
LOAD DATA
INFILE *
INTO TABLE test_main
FIELDS TERMINATED BY ','
(ID, VALUE)
BEGINDATA
1,Test

其中,
第一行LOAD DATA意思是告诉SQL*Loader,要干啥? 这里是加载数据。
第二行INFILE *意思是数据从哪里来? 这里是包含在控制文件中。
第三行INTO TABLE 意思是数据要导到哪里? 这里是要到 test_main 表。
第四行FIELDS TERMINATED BY意思是数据之间用什么符号分隔? 这里是用 逗号 分隔。
第五行是数据要按什么顺序写到列里面
第六行BEGINDATA是告诉SQL*Loader,后面的都是数据了。

然后开始运行 sqlldr 程序

D:\temp>sqlldr userid=test/test123 control=test_main.ctl
SQL*Loader: Release 10.2.0.1.0 - Production on 星期日 3月 13 14:58:56 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.

达到提交点 - 逻辑记录计数 1

导入

csv

文件



比喻数据库里有表t_province   字段1:province  字段2:city  
CSV文件存放路径:f:\test.csv    列需与数据库保持一致  
还需要编写一个test.ctl文件,内容如下:  
load data  
infile 'f:\城市.csv'  
into table "T_PROVINCE"  
fields terminated by ','  
(province,city)  
然后在cmd下,输入:sqlldr userid=clevergirl/clevergirl@ORCL_192.168.128.129 control=f:test.ctl   然后回车即可


----------------------------------


还有一种方法:http://www.itdatum.net/db/oracle/2014/09/7948.shtml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值