sqlload导入大量数据 步骤详解

 

一、加载txt文本 

1.在D盘建立sqlldr的控制文件,111.ctl 内容如下 

LOAD DATA 

INFILE 'd:\111.txt' 

INTO TABLE SALGRADE_TEST 

TRUNCATE 

FIELDS TERMINATED BY ',' 

(GRADE,LOSAL,HISAL) 

2.在D盘建立sqlldr的数据文件111.txt,内容如下格式 

1,700,1200 

2,1201,1400 

3,1401,2000 

4,2001,3000 

5,3001,9999 

3.在CMD的命令行模式执行加载操作 

sqlldr scott/tiger control=d:\111.ctl log=d:\111.log bad=d:\111.ba 

SQL*Loader: Release 11.2.0.1.0 - Production on 星期三 9月 14 10:58:35 2011 

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved 

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

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

4.登录数据库验证加载结果 

D:\window\server\mysql-5.1.51\bin>sqlplus scott/tiger 

连接到: 

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production 

With the Partitioning, OLAP, Data Mining and Real Application Testing options 

SQL> select * from SALGRADE_TEST; 

GRADE      LOSAL      HISAL 

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

         1        700       1200 

         2       1201       1400 

         3       1401       2000 

         4       2001       3000 

         5       3001       9999 

5.导入成功之后,查看111.log 

6.注释 

LOAD DATA 控制文件标识 

www.dbdream.org 

www.dbdream.org 

INFILE 'd:\111.txt'为数据文件地址和名称,此处如果是INFILE *表示要加载的数据就在

这个控制文件里,也就是BEGINDATA后面跟的内容。详见7 

INTO TABLE SALGRADE_TEST要往SALGRADE_TEST表里加载数据 

TRUNCATE如果表里有数据,先truncate表,然后再加载,TRUNCATE还可换成其他值,比如 

insert,为缺省方式,在数据装载开始时要求表为空,如果表中有数据,会报错而终止。 

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

append,在表中追加新记录,如果。表上有主键和唯一性约束,新加载的数据的相关字段值

不能重复 

replace,删除旧记录,替换成新装载的记录,要求有delete权限 

truncate,同上,要求有truncate权限       

FIELDS TERMINATED BY ',' 数据以逗号分隔,如果是TERMINATED BY WRITESPACE表示以空

白分隔,如果不指定FIELDS TERMINATED BY ',',需要为每一列都指定分隔符,如下: 

(GRADE [interger external] TERMINATED BY ',', 

LOSAL [interger external] TERMINATED BY ',', 

HISAL [interger external] TERMINATED BY ',') 

例如: 

LOAD DATA 

INFILE 'd:\111.txt' 

TRUNCATE 

INTO TABLE SALGRADE_TEST 

(GRADE TERMINATED BY ',', 

LOSAL TERMINATED BY ',', 

HISAL TERMINATED BY ',') 

  (GRADE,LOSAL,HISAL) 要加载到表中的这些字段,字段顺序需要和数据文件111.txt内

的数据对应,如果单独为每一列都指定了分隔符,此部分就不需要了。 

7.如果数据量不大,可以讲sqlload 的数据文件(111.txt)集成到sqlload 的控制文件

(111.ctl)内,例如: 

LOAD DATA 

INFILE * 

TRUNCATE 

INTO TABLE SALGRADE_TEST 

FIELDS TERMINATED BY ',' 

(GRADE,LOSAL,HISAL) 

BEGINDATA 

www.dbdream.org 

www.dbdream.org 

1,700,1200 

2,1201,1400 

3,1401,2000 

4,2001,3000 

5,3001,9999 

加载 

D:\>sqlldr scott/tiger control=d:\111.ctl 

SQL*Loader: Release 11.2.0.1.0 - Production on 星期三 9月 14 17:03:53 2011 

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved. 

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

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

登录数据库验证加载结果 

D:\>sqlplus scott/tiger 

连接到: 

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production 

With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> 

SELECT * FROM SALGRADE_TEST; 

GRADE      LOSAL      HISAL 

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

         1        700       1200 

         2       1201       1400 

         3       1401       2000 

         4       2001       3000 

         5       3001       9999 

二、加载csv格式的数据 

1.建立测试表 

D:\>sqlplus scott/tiger 

连接到: 

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production 

With the Partitioning, OLAP, Data Mining and Real Application Testing options 

SQL> create table dept_test as select * from dept where 1=2; 

表已创建。 

2.建立sqlload的数据文件111.csv,内容如下 

10 ACCOUNTING  NEW YORK 

20 RESEARCH  DALLAS 

30 SALES  CHICAGO 

40 OPERATIONS  BOSTON 

3.建立sqlload的控制文件111.ctl,内容如下 

LOAD DATA 

INFILE 'd:\111.csv' 

TRUNCATE 

www.dbdream.org 

www.dbdream.org 

INTO TABLE DEPT_TEST 

FIELDS TERMINATED BY ',' 

(DEPTNO,DNAME,LOC) 

4.执行加载操作 

D:\>sqlldr scott/tiger control=d:\111.ctl log=d:\111.log 

SQL*Loader: Release 11.2.0.1.0 - Production on 星期四 9月 15 09:47:44 2011 

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved. 

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

5.登录数据库查询 

D:\>sqlplus scott/tiger 

连接到: 

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production 

With the Partitioning, OLAP, Data Mining and Real Application Testing options 

SQL> select * from dept_test; 

DEPTNO      DNAME          LOC 

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

        10 ACCOUNTING     NEW YORK 

        20 RESEARCH       DALLAS 

        30 SALES          CHICAGO 

        40 OPERATIONS     BOSTON 

三、加载图片到数据库 

1.创建测试表,由于图片在数据库中以blob 的形式保存,这里是有了11g 的新特性,

securefiles LOB的形式存储图片。 

SQL> create table t_load_sf (id number, full_name varchar2(100), 

  2  create_date date, contents blob, constraint pk_t_load_sf primary key(id)) 

  3  lob (contents) store as securefile; 

表已创建。 

2.创建sqlload的数据文件111.txt,内容如下: 

1,DSC00086.JPG 

2,DSC00122.JPG 

3,DSC00145.JPG 

4,DSC00146.JPG 

5,psu.jpg 

3.创建sqlload的控制文件111.ctl,内容如下: 

LOAD DATA 

INFILE '111.txt' 

INTO TABLE T_LOAD_SF 

TRUNCATE 

FIELDS TERMINATED BY ',' 

(ID CHAR(255), 

www.dbdream.org 

www.dbdream.org 

FULL_NAME CHAR(255), 

CREATE_DATE SYSDATE, 

CONTENTS LOBFILE(FULL_NAME) TERMINATED BY EOF) 

4.加载 

D:\test>sqlldr scott/tiger control=D:\111.ctl log=d:\111.log 

SQL*Loader: Release 11.2.0.1.0 - Production on 星期四 9月 15 11:29:13 2011 

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved. 

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

5.登录数据库验证 

SQL> select * from t_load_sf where rownum=1; 

ID FULL_NAME       CREATE_DATE    CONTENTS 

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

1 DSC00086.JPG    15-9月 -11     FFD8FFE1538045786966000049492A00080 

                                 000000B000E01020020000000920000000F 

                                 01020005000000B20000001001020008000 

                                 000B8000000120103000100000001000000 

                                 1A01050001000000C000 

如果使用plsqldev工具,可以看到加载进数据库的图片

你可能感兴趣的:(sqlload导入大量数据 步骤详解)