sqlloader 直接路径和常规路径_用SQL*Loader加载外部数据

SQL*Loader可用于批量上载某些第三方系统生成的数据集。DBA配置一个能够解释输入数据文件内容的SQL*Loader控制文件,SQL*Loader就可以读取输入文件,将数据插入到Oracle数据库表中。

SQL*Loader是一个客户端-服务器进程,可采用两种技术导入数据:常规方式或直接路径。

常规方式使用普通的INSERT语句。SQL*Loader用户进程构造VALUES子句中包含绑定变量的INSERT语句,然后读取源数据文件,为每个要插入的行执行一次INSERT。此方法使用数据库缓冲区缓存,并生成撤销和重做数据。

直接路径避开了数据库缓冲区缓存。SQL*Loader读取源数据文件,并将其内容发送到服务器进程。此后,服务器进程在其PGA中组装表数据的块,并将它们直接写入数据文件。写操作在表的高水位线上完成,称为数据保存。加载完成后,SQL*Loader移动高水位线,从而包含最新写入的数据块。此时不会生成撤销,因此直接路径加载极为快捷。

直接路径加载速度快,但存在以下问题:

操作期间必须删除或禁用引用完整性约束和check约束,只能实施unique、primary key和not null约束

不会激活INSERT触发器

针对其它会话的DML锁定表

无法为群集表使用直接路径

之所以存在以上限制,是因为加载期间缺少与SGA的交互。

SQL*Loader使用多种文件:

输入数据文件(input datafile):将要上载到数据库的源数据。

控制文件(control file):指示SQL*Loader如何解释输入文件的内容如何提取记录。

日志文件(log file):概述了作业的成功与失败及相关错误细节。

错误文件(bad file):违反规则而未能成功插入数据库的记录被写入该文件。

废弃文件(discardfile):提取记录成功但不匹配选择标准而被丢弃的记录写入该文件。

考虑下面的表:

SQL> desc dept

Name   Type

Nullable Default Comments

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

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

DEPTNO NUMBER(2)

DNAME  VARCHAR2(14) Y

LOC    VARCHAR2(13) Y

此源数据文件为e:\dept.txt:

60,liuln,nanjing

70,shenzj,jiaxing

80,chenyz,shanghai

用于加载此数据的SQL*Loader控制文件是e:\dept.ctl:

load data

infile 'e:\dept.txt'

badfile

'e:\dept.bad'

discardfile

'e:\dept.dsc'

append

into

tablescott.dept

fields terminated by ','

trailing nullcols

(deptno integer

external(2),

dname,

loc)

控制文件中指定了输入文件、错误文件、废弃文件,指定为表添加行而不是截断它,指定了插入的表、字段分割符,trailing nullcols表示如果缺少字段,就插入NULL值,最后指明了插入数据对应的列。

要执行加载,在操作系统提示符下执行以下命令

sqlldr

scott/tiger control=e:\dept.ctllog=e:\dept.logdirect=true

direct=true参数指示SQL*Loader使用直接路径,而不是默认的常规插入操作。操作结束后可以查看一下生成的日志文件信息,同时查询表dept确认数据被添加进来。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值