如何理解SQL*Loader工具

如何理解SQL*Loader工具,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

创新互联公司服务项目包括五家渠网站建设、五家渠网站制作、五家渠网页制作以及五家渠网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,五家渠网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到五家渠省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!


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

下面是一张SQL*Loader工具的结构图:
如何理解SQL*Loader工具


          上图中描述了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 hh34:mi:ss')",
#以(符号开始表示表的字段,由于是日期字段,所以需要使用函数进行转换,函数必须用双引号引起来,:appliedtime是跟前面的APPLIEDTIME相对应。

applieddate "to_date(:applieddate,'yyyy-mm-dd hh34:mi:ss')",

psvcode,
#如果字段没有指定存储类型,默认为CHAR(255),超过长度会收到Fileld in data file exceeds maximum length的报错,只需要根据长度指定类型,例如,CHAR(1000)。

hzpsvcode,

pointindex,

appliedhour "to_date(:appliedhour,'yyyy-mm-dd hh34: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等等方式完成数据的卸载。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。


当前文章:如何理解SQL*Loader工具
浏览路径:http://pwwzsj.com/article/pegdoc.html