暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

【测试方案】关于数据迁移工具sqlload的简易使用步骤

原创 Jose Chen 2021-11-01
1419

前言

今天主要学习下sqlload的简单实用方法,学习环境为Linux Oracle 11g。
这块学习内容属于数据库迁移的知识,sqlload工具适用于将文本文件导入到数据库,分为两种方式:常规导入和直接路径导入。常规导入等同于SQL语句的执行导入,如果数据量较大的话,会慢一点;而直接路径导入则等同于直接拷贝数据文件,速度会更快一点。
下面通过一个小实验,感受下这款数据导入工具的使用

实验步骤

实验一(数据和控制文件代码在一个文件)

  1. scott用户下,新建表dept1,将dept的数据导入
SQL> conn scott/scott
Connected.
SQL> create table dept1 as select * from dept where 1=2;

Table created.


2.使用vi编辑器编写sqlload的控制文件,内容如下

[oracle@localhost oracle]$ cat a.txt
LOAD DATA
INFILE *    #由于数据文件和控制文件在一起,故此处使用*
INTO TABLE DEPT1   #填写要插入的表名,前缀默认insert,对无数据的表进行插入数据;如果表已有数据,可使用append参数,在表里追加数据
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' #代表要插入数据的格式,使用逗号隔开,类似示例中“NEW YORK”这类中间带空格的,则使用双引号标注
(DEPTNO,     #括号内写入表的字段名
DNAME,
LOC)
BEGINDATA
10,ACCOUNTING,"NEW YORK"
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON

tips:强烈建议将代码多分开几行书写,不要堆砌在一起。这样运行的时候,linux的报错可以直接指出是哪一行出错,能更快速定位到我们的错误位置。本人便是因为代码里的一个中文括号,折腾了许久

3.运行sqlldr导入命令

[oracle@localhost oracle]$ sqlldr scott/scott control='/u01/oracle/a.txt'

SQL*Loader: Release 11.2.0.1.0 - Production on Mon Nov 1 19:01:51 2021

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

Commit point reached - logical record count 4

4.此时登录数据库,查看dept1的数据,可以看到导入成功了

SQL> set line 1000
SQL> select * from dept1;

    DEPTNO DNAME                       LOC
---------- -------------------- ---------------------------------------
        10 ACCOUNTING                  NEW YORK
        20 RESEARCH                    DALLAS
        30 SALES                       CHICAGO
        40 OPERATIONS                  BOSTON

实验二(控制文件和数据文件分开)

  1. 编辑控制文件和数据文件,内容如下
[oracle@localhost oracle]$ cat aa.txt
LOAD DATA
INFILE bb.txt   #由于数据文件在同目录,所以不需要指定路径
APPEND INTO TABLE DEPT1   #参数append代表追加数据
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(DEPTNO,
DNAME,
LOC)

[oracle@localhost oracle]$ cat bb.txt
10,ACCOUNTING,"NEW YORK"
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON

2.使用操作系统命令导入数据到数据库里

[oracle@localhost oracle]$ sqlldr scott/scott control='/u01/oracle/aa.txt'

SQL*Loader: Release 11.2.0.1.0 - Production on Mon Nov 1 20:33:38 2021

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

Commit point reached - logical record count 4

3.登入数据库,查看是否导入成功

SQL> select * from dept1;

    DEPTNO DNAME                                      LOC
---------- ------------------------------------------ ---------------------------------------
        10 ACCOUNTING                                 NEW YORK
        20 RESEARCH                                   DALLAS
        30 SALES                                      CHICAGO
        40 OPERATIONS                                 BOSTON
        10 ACCOUNTING                                 NEW YORK
        20 RESEARCH                                   DALLAS
        30 SALES                                      CHICAGO
        40 OPERATIONS                                 BOSTON

8 rows selected.

总结

本文举的例子算是最简单的使用了,在实际工作中,数据会以各种形式出现,只有了解sqlldr各项参数的含义,才可以写出适合自己的代码。
另外,数据的大小也是一个需要斟酌的因素。sqlldr导入的效率如果太差,就需要使用直接路径的导入方式,否则就该考虑换个工具。

最后修改时间:2021-12-22 14:37:57
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论