分类: Oracle
2012-05-08 23:09:29
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 导出的数据文件。
首先创建一个控制文件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 |