SQL*Loader工具简介


        SQL*Loader工具是Oracle非常强大的外部数据加载工具。这篇文章将简单讨论一下SQL*Loader工具的结构,配置以及突出特性。

下面是一张SQL*Loader工具的结构图:
bb


          上图中描述了SQL*Loader工作使用的物理文件,包括输入的文本文件,输出的数据库;SQL*Loader工具工作需要至少一个控制文件,控制文件中包含了数据加载的描述性信息,SQL*Loader根据控制文件中的描述来加载、转换数据,写入数据库。控制文件中除了包含数据加载的描述性信息外,还可以包含参数信息和加载的数据。参数信息包括,直接路径加载参数等,可以通过sqlldr工具的parfile参数指定单独的配置文件,这里需要注意的是,在sqlldr命令行指定的参数将覆盖在控制文件中指定的参数。单独的数据文件是通过控制文件中的INFILE属性指定的。

        SQL*Loader工具运行后会产生3个文件,一个是日志文件,日志文件中详细记录了数据的加载情况和加载结果,并会另外指定两个文件Bad FIles和Discard Files,Bad Files保存的是加载导致SQL错误(也就是说,输入数据是“坏的”)的数据,Discard Files保存的是加载过程抛弃的数据。加载完毕对这些文件的验证能够了解加载情况,判断加载是否成功。

        SQL*Loader支持传统路径和直接路径加载,传统路径加载SQL*Loader工具会将数据转换成SQL语句执行,会产生相应的undo和redo数据,直接路径加载是直接操作数据块,不会产生相应的undo和redo数据,特别适合大数据量的加载工作。

        通过上面的讨论可以了解到SQL*Loader工具最核心的是控制文件,控制文件中最核心的配置是对加载数据的定义。下面通过一个简单的例子讨论控制文件中的配置:

/***************************************/

Load DATA
#表示加载数据。

INFILE 'C:\sqlldr\olap.date_time_15_min.txt'
#INFILE指定数据文件,如果是INFILE *,表示加载的数据保存在控制文件中。

INTO TABLE test.date_time_15_min
#数据加载到的具体表名。

APPEND|REPLACE|TRUNCATE
#如果没有这行,默认是INSERT操作,要求表必须为空,TRUNCATE操作非传统意义上的TRUNCATE TABLE DATE_TIME_15_MIN,而是执行TRUNCATE TABLE DATE_TIME_15_MIN REUSE STORAGE操作,这点需要注意。

FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
#数据的存储是以,符号作为分割,"符号引起来的表示字符串,这是定界加载,这是最传统的方式,另外还可以定长加载,这里我们不讨论。

TRAILING NULLCOLS
#如果输入的数据不存在某列的数据,SQLLOADER就会为该列绑定一个NULL值。

(APPLIEDTIME "to_date(:appliedtime,'yyyy-mm-dd hh24:mi:ss')",
#以(符号开始表示表的字段,由于是日期字段,所以需要使用函数进行转换,函数必须用双引号引起来,:appliedtime是跟前面的APPLIEDTIME相对应。

applieddate "to_date(:applieddate,'yyyy-mm-dd hh24:mi:ss')",
psvcode,
#如果字段没有指定存储类型,默认为CHAR(255),超过长度会收到Fileld in data file exceeds maximum length的报错,只需要根据长度指定类型,例如,CHAR(1000)。
hzpsvcode,
pointindex,
appliedhour "to_date(:appliedhour,'yyyy-mm-dd hh24:mi:ss')"
)
BEGINDATA
#下面是加载的数据,对应上面的INFILE *设置。
........

/***************************************/


        控制文件除了定义数据加载方式外,还可以保存SQLLOADER参数和加载的数据。

        另外,从Oracle 9i开始,Oracle推出了外部表的功能,外部表是另一种快速加载数据的方式,沿用了SQL*Loader的参数,用于替代SQL*Loader工具,它比SQL*Loader工具有更好的灵活性,能够更灵活的处理、筛选数据(SQL语句方面),调度数据的加载,学习的知识也相对更少。

        从Oracle Database 10g开始,Oracle推出外部表卸载功能ORACLE_DATAPUMP能够非常方便的将数据卸载到平面文件,通过平面文件的传递可以快速加载到其他数据库。Oracle没有提供专门工具用于将数据库的数据卸载到平面文件中,可以用SQL语句、外部表卸载功能、PL/SQL等等方式完成数据的卸载。


参考文档:
        《Oracle Database 9i/10g/11g编程艺术深入数据库体系结构(第2版)》第15章。

        《Oracle Database Utilities 10g Release 2 (10.2)》: http://docs.oracle.com/cd/B19306_01/server.102/b14215/ldr_concepts.htm#g1013706


--end--


fj.pngsut81088.gif

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23135684/viewspace-763296/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23135684/viewspace-763296/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值