Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1828276
  • 博文数量: 323
  • 博客积分: 5970
  • 博客等级: 大校
  • 技术积分: 2764
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-03 23:13
文章分类

全部博文(323)

文章存档

2018年(2)

2017年(11)

2016年(10)

2015年(27)

2014年(2)

2013年(30)

2012年(197)

2011年(44)

分类: Oracle

2012-05-08 23:09:29

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


阅读(757) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~