2020-12-23

3 篇文章 0 订阅

ORACLE导入大量数据的两种方式比较

(转载自:https://www.cnblogs.com/happy521/p/9146177.html

 不管是开发还是测试,工作中经常需要去批量新增测试数据,但是大量数据的新增速度有时候让我们苦不堪言,下面通过两种方式完成oracle数据的批量新增,比较两种方式的效率。

 

第一种方式:采用工具导入sql文件

以10w条数据为例,通过java程序生成insert语句,采用sqlplus进行导入

1、通过简单的JAVA程序生成sql脚本

 

复制代码

public class GenerateSQLFile {
    public static void main(String[] args) throws Exception {
      File file = new File("d:" + File.separator + "data.sql");  
      OutputStream out  = new FileOutputStream(file, true); 
      for (int i = 1; i <= 100000; i++) {
          String str = "insert into t_test(id,name) values(" + i
          + ",'hello world" + i + "');\r\n"; 
          byte b[] = str.getBytes(); 
          out.write(b); 
      }
      out.close();
    }
}    

复制代码

 

执行程序,生成的sql脚本如下所示:

insert into t_test_1(id,name) values(1,'hello world1');

insert into t_test_1(id,name) values(2,'hello world2');

insert into t_test_1(id,name) values(3,'hello world3');

... ...

2、新建表,导入数据

  以scott/tiger登录sqlplus;

  新建t_test表:create tablet_test_1(id int,name varchar2(255));

  创建表成功后执行:@D:\data.sql,逐行插入数据

3、测试结果

  以sqlplus执行sql脚本导入10W条数据的时间大约是5分钟

 

第二种方式:采用sql loader工具

sql loader可以将文本格式存放的数据导入到oracle,是一个进行数据迁移的非常方便而且通用的工具。

下面通过java程序生成csv文件,以100万条测试数据为例,通过sql loader进行数据导入

期望生成的csv数据文件格式如下:

1,hello1

2,hello2

3,hello3

... ...

 

1、生成数据文件

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

 

复制代码

  File file = new File("d:" + File.separator + "data.csv"); // 要操作的文件
    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(); 
        out.write(b); 
    }
out.close(); 

复制代码

 

 

2、创建表格t_test_2

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

3、建立控制文件test.ctl,脚本如下

load data

infile data.csv

into table t_test_2     

(

id char terminated by ',',

name char terminated by whitespace

)

 

参数说明: 

Infile data.csv:  指定数据源文件 这里我们省略了默认的 discardfile   result.dsc   badfile   result.bad   
into table t_test_2:默认是INSERT,也可以into   table   resultxt   APPEND为追加方式,或REPLACE   
terminated   by   ',':指用逗号进行字段的分隔   
terminated   by   whitespace: 表示结尾以空白分隔  

其它参数参考可使用命令:d:\>sqlldr   

 

4、导入数据:

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

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

5、测试结果:通过sql loader进行数据导入,10万条数据毫秒级导入,100万条数据耗时10秒

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值