sql loader

sql loader的特点

1通过网络加载数据,意味着你可以在不同于服务端操作系统上的客户端运行sql loader

2在同一个加载会话中加载不同的数据文件

3在同一个加载会话中加载到不同表中

4指定数据的字符集

5有选择的加载数据

6在加载前,使用sql操纵数据

7在特定的列生成唯一顺序值

8使用操纵系统的文件系统访问数据文件

9从磁盘,磁带,或命名管道中加载

10生成精确地错误报告,有助于troubleshooting

11加载任意负载面向对象的数据

12对lobs和集合使用二级数据文件

13使用常规或直接路径加载,常规方式灵活,直接路径方式效率高

一个典型的会话有一个输入控制文件,控制sql loader的行为,还有一个或多个输入数据文件,输出时一个log file,bad file 和discard file

参数

参数可以放到一个文件件,使用parfile参数调用

也可以使用options在控制文件中指定特定参数

在命令行中的参数会覆盖参数文件及option的参数

控制文件

控制文件告诉去哪找数据,怎么解析和翻译数据,插入到哪里等。控制文件有三部分组成

1第一部分包含会话级别的信息,例如:

bindsize,rows,records to skip

infile指定输入数据在哪里

2第二部分包含了了更多了into table块,每一个块包含了要加载的数据的信息,像是表名和表列

3第三部分是可选的,如果有,就是包含的输入数据。

一些控制文件的语法

1语法是自由格式的

2大小写不敏感

3表名和列名不要包含constant和zone

4控制文件中的注释是两个中横线

输入数据和数据文件

sqlloader在控制文件中指定的文件中读取数据,在数据文件中的数据是以记录的方式来组织的,一个特定的数据文件可以使固定的记录格式,可变的记录格式,或是流记录格式,记录的格式可以再控制文件的infile参数中指定,如果没有记录格式指定,默认的就是流记录格式。

固定格式,记录的长度都是定长的。例子

控制文件中的内容:

load data
infile 'example.dat'  "fix 11"
into table example
fields terminated by ',' optionally enclosed by '"'
(col1, col2)

example.dat:
001,   cd, 0002,fghi,
00003,lmn,
1, pqrs,
0005,uvwx,

sqlldr test/test control=D:\load.ctl
SQL> select * from example;
COL1        COL2
----------- -----------
001         cd
0002        fghi
00003       lmn
1           pqrs
0005        uvwx

变长记录,infile "datafile_name" "var n",n指定了记录的前n个字节是记录的长度(长度控制数),如果n没有被指定,默认是5字节,n大于40会报错,注意n是记录的长度,分割符数量也算进来了,但是在插入的时候不会插入分隔符,terminated by标识了字段的分割符,例子

控制文件

load data
infile 'D:\load.dat'  "var 3"
into table load
fields terminated by ',' optionally enclosed by '"'
(col1 char(5),
 col2 char(7))

数据文件

009hello,cd,010world,im
012my,name is,,

SQL> desc load;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------


 COL1                                               CHAR(5)
 COL2                                               CHAR(7)

SQL> select * from load;
COL1  COL2
----- -------
hello cd
world im
my    name is

lobfiles和secondary datafiles

lob数据从logfile中加载,lob data仍然是被分域的,但是这些域不是被组织成记录,所以处理记录的开销就避免了。比如,你可以从主数据文件中读取名字,id,然后从lobfile中读取简历。你也可以再lobfile中加载xml数据,可以使用xml列来保存结构化模型数据。

secondary datafile就和主数据文件时一样的,包含一系列记录,每个记录有多个域组成,使用sdf参数指定该类型文件,sdf可以使具体的字符串,或是一个映射的包含多个具体字符串的filler域。

数据转换与数据类型

在常规的路径加载中,数据域被转换成列,有如下两步:

1用控制文件翻译数据文件的格式,解析输入数据,操作符合insert语句的数组

2数据接收数据执行insert命令

常规路径加载,直接路径加载,和外部表加载

常规路径加载,数据被拷贝到相应的绑定数组中,当数组满了就执行insert

直接路径加载,根据域的规格解析输入,转换输入数据成列类型,构造一个列数组,列数组被传输到块格式化器,在数据库中创建数据块,被格式化的数据直接写到数据库中,绕开了很多数据处理步骤,所以效率要高。

并行直接路径加载,这个可以开多个会话并发加载数据段。

外部表,使用外部表比常规路径加载及直接路径加载的优势如下:

1外部表加载数据尝试并行加载

2外部表allows在加载数据的时候,修改数据。

外部表不能远程加载。

sqlloader支持4中类型的lob加载

1blob,2clob,3nclob,4bfile

参数;

appned参数知道了在加载数据的时候表是非空的,如果没有这个参数,默认是insert,sqlloader在加载的时候要求表是空表,不是空表就报错

when指明一个或多个域条件,根据这些域条件决定是否加载数据

trailing nullcols告诉sqlloader在记录中没有对应的列设置成空

例如加载的数据如下

10 Accounting 

假设控制文件如下
 INTO TABLE dept 
    TRAILING NULLCOLS 
( deptno CHAR TERMINATED BY " ", 
  dname  CHAR TERMINATED BY WHITESPACE, 
  loc    CHAR TERMINATED BY WHITESPACE 

加载后的loc这个字段就是空的。

optionally enclosed by '"',指的是双引号内按字符串处理
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL*Loader是Oracle数据库的一个数据加载工具,它可以将数据从外部文件(如文本文件、CSV文件等)导入到Oracle数据库中。下面是SQL Loader的详细讲解: 1. SQL Loader的工作原理 SQL Loader的工作原理是将外部文件中的数据读入到内存缓冲区中,然后通过SQL语句将数据写入到Oracle数据库中。SQL Loader的主要组件有控制文件(Control File)、数据文件(Data File)、日志文件(Log File)和坏数据文件(Bad File)。 2. SQL Loader的控制文件 控制文件是SQL Loader的核心组件,它包含了SQL Loader的加载规则和指令。控制文件可以使用任何文本编辑器进行编辑,其中包含了如何解析数据、如何转换数据以及如何将数据写入到Oracle数据库中的指令。控制文件中定义了数据文件的格式、数据类型、分隔符、转义字符等信息。 3. SQL Loader的数据文件 数据文件是包含要加载到Oracle数据库中的数据的文件。它可以是文本文件、CSV文件或其他格式的文件。数据文件中的每一行都代表了要加载到数据库中的一条记录,每一列代表了记录中的一个字段。 4. SQL Loader的日志文件 日志文件用于记录SQL Loader的加载过程中发生的事件和错误信息。它可以帮助用户诊断加载问题。 5. SQL Loader的坏数据文件 坏数据文件用于存储在加载过程中无法解析或无法转换的数据。它可以帮助用户在加载完成后手动处理这些数据。 6. SQL Loader的使用步骤 使用SQL Loader需要以下步骤: (1)创建一个控制文件,定义要加载的数据文件的格式和加载规则。 (2)准备要加载的数据文件。 (3)使用SQL Loader命令行工具,指定控制文件和数据文件。 (4)查看日志文件和坏数据文件,处理错误和无法转换的数据。 以上就是SQL Loader的详细讲解,它可以帮助数据库管理员和开发人员更加方便地将外部数据导入到Oracle数据库中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值