Oracle 大容量导入操作之一

Oracle 大容量导入操作
2011-03-13 16:12

Oracle 通过运行 sqlldr 程序来完成大容量导入操作。

 

首先需要一个控制文件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/test123control=test_main.ctl

SQL*Loader: Release 10.2.0.1.0- Production on 星期日 3 13 14:58:22 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL*Loader-601:  对于 INSERT 选项表必须为空。表TEST_MAIN 上出错

 

 SQL Plus 中,

SQL> truncate table test_main;

表被截断。

以后,再次测试执行

 

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

 


SQL Server bcp 工具导出的数据,通过SQL*Loader 导入到Oracle中。

 

这里是用的数据文件为 SQL Server BCP 导出的数据文件。

SQL Server 大容量导入/导出操作

 

首先创建一个控制文件test_main_c.ctl,内容如下:

LOAD DATA

INTO TABLE test_main

FIELDS TERMINATED BY WHITESPACE

(ID, VALUE)

 

这里的TERMINATEDBY WHITESPACE

WHITESPACE 意味着空白字符,包含制表/空格/换行

 

首先在SQL Plus 中,truncate table test_main,然后执行sqlldr


D:\temp>sqlldr userid=test/test123 control=test_main_c.ctldata=test_main_c.dat

SQL*Loader: Release 10.2.0.1.0- Production on 星期日 3 13 15:18:23 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

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


如果Oracle表中,已经有部分数据,且不希望被删除,只希望做追加的操作

首先创建一个控制文件test_main_c2.ctl,内容如下:

LOAD DATA

INTO TABLE test_main

APPEND

FIELDS TERMINATED BY WHITESPACE

(ID, VALUE)

 

SQL Plus 中,更新主键,以实现追加一条、主键重复一条的处理。

SQL> update test_main set id = id+1;

已更新2行。

SQL> commit;

提交完成。

 

执行sqlldr

D:\temp>sqlldr userid=test/test123control=test_main_c2.ctl data=test_main_c.dat

SQL*Loader: Release 10.2.0.1.0- Production on 星期日 3 13 15:48:12 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

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

 

SQL Plus 中核对结果:

SQL> select * from test_main;

       ID VALUE

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

        2 ONE

        3 TWO

        1 ONE

 

发现2 TWO 的记录因为主键冲突,无法插入

 

在当前目录下,有一个test_main_c.bad的文件,内容为:

2     TWO


<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(308) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值