`

SQL Loader使用小结

阅读更多

最近使用SQL Loader实现从CSV文件导入数据库表的功能。SQL Loader使用比较简单,功能也比较强大。但是一些细节需要注意,这里总结一下,以备日后参考。

 

网上有很多资料,这里整理一下:

 

关于SQL Loder的基本介绍可以参考

SQL*Loader is a bulk loader utility used for moving data from external files into the Oracle database . Its syntax is similar to that of the DB2 load utility, but comes with more options. SQL*Loader supports various load formats, selective loading, and multi-table loads.

SQL*Loader (sqlldr) is the utility to use for high performance data loads. The data can be loaded from any text file and inserted into the database.

参考文献:http://www.orafaq.com/wiki/SQL*Loader_FAQ

 

SQL Loader的使用介绍

http://blog.chinaunix.net/u/7040/showart.php?id=287430

Oracle 的SQL*LOADER可以将外部数据加载到数据库表中。下面是SQL*LOADER的基本特点:

1)能装入不同数据类型文件及多个数据文件的数据
2)可装入固定格式,自由定界以及可度长格式的数据
3)可以装入二进制,压缩十进制数据
4)一次可对多个表装入数据
5)连接多个物理记录装到一个记录中
6)对一单记录分解再装入到表中
7)可以用 数对制定列生成唯一的KEY
8)可对磁盘或 磁带数据文件装入制表中
9)提供装入错误报告
10)可以将文件中的整型字符串,自动转成压缩十进制并装入列表中。

1.2控制文件
控制文件是用一种语言写的文本文件,这个文本文件能被SQL*LOADER识别。SQL*LOADER根据控制文件可以找到需要加载的数据。并且分析和解释这些数据。控制文件由三个部分组成:

a) 全局选件,行,跳过的记录数等;
b) INFILE子句指定的输入数据; (如果使用sqlldr的data参数,这里用*, "INFILE *" )
c)  数据特性说明。

 

SQL Loader使用实例可参考

http://www.blogjava.net/Unmi/archive/2009/01/05/249956.html

sqlldr 的使用,有两种使用方法:
1. 只使用一个控制文件,在这个控制文件中包含数据; (用BEGINDATA设置数据)
2. 使用一个控制文件(作为模板) 和一个数据文件.

 

第二种方式比较常用,因为它比较灵活,模版和数据分离。

这里要了解一下控制文件control file 的用法

 

http://www.cs.umbc.edu/portal/help/oracle8/server.815/a67792/ch05.htm

 

sql loader 的基本语法格式可以参考http://blog.csdn.net/youjianbo_han_87/archive/2009/03/17/3998958.aspx

 

个人建议用关键字的方式,而不是默认位置的方式,这样比较清楚,比如

>>sqlldr userid=username/password@sid control=path/file.ctl data=path/data.csv

 

在unix上使用sql loader,可以把sqlldr需要的参数配置在环境文件evironment file中,比如.sqlldr_param.env

 

export LOG_FILE_PATH=/home/loader/logs

export LOG_FILE_NAME=loadfile

export DB_USERNAME="mydb"

export DB_PASSWORD="123456"

export DB_SID="testDB"

 

这样可以用shell脚步来调用,实现参数的灵活配置。比如

#!/usr/bin/ksh

#########################

##   loadfile.sh

## param1 $1  environment file name

## param2 $2  input file name

#########################

. ${1}

 

Log()

{

      echo `date`: $* >> "${LOG_FILE_PATH}"/"${LOG_FILE_NAME}_`date +%Y%m%d`.log"

}

 

Log "****Begin to load file******"

 

v_input_file_name=${2}

 

sqlldr ${DB_USERNAME}/${DB_PASSWORD}@{DB_SID } control=${CONTROL_FILE_PATH}${CONTROL_FILE_NAME} data=${INPUT_FILE_PATH}/${v_input_file_name}

 

然后就可以调用sql loader了。

>>sh loadfile.sh envpath/.sqlldr_param.env employee.csv

 

在使用sql loader的过程中经常会遇到的问题是control file控制文件的写法

control file 默认是字符类型,对于数据库中的数值类型,也可以用默认字符类型处理,例如

 

OPTIONS(SKIP=1)

LOAD DATA

INFILE *

TRUNCATE

INTO TABLE EMPLOYEE

FIELDS TERMINATED BY ','  
OPTIONALLY ENCLOSED BY
'"'  

TRAILING NULLCOLS            

{

    NAME    "trim(:NAME)",

    AGE       "trim(:AGE)",

    JOIN_DATE  SYSDATE 

}

 

如果数据库表EMPLOYEE中的字段JOIN_DATE是Date类型,可以如上所示用SYSDATE来插入系统当前日期。如果JOIN_DATE是TIMESTAMP类型,用SYSDATE就会出错。这时需要写成

 

JOIN_DATE EXPRESSION "CURRENT_TIMESTAMP(3)"

 

trim()的用法是先插入记录,再修改成trim(:NAME)。因此会出现导入时数据库异常,解决方法是创建一个临时表,字段长度大一些,SQL Loader执行成功后,再导入主表。可以用存储过程来执行导入操作。

 

分享到:
评论

相关推荐

    SQL LOADER错误小结

    在使用SQL*LOADER装载数据时,由于平面文件的多样化和数据格式问题总会遇到形形色色的一些小问题,下面是工作中累积、整理记录的遇到的一些形形色色错误。希望能对大家有些用处。(今天突然看到自己以前整理的这些...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:...

    高性能动态SQL Oracle数据安全 Oracle 数据库的聚簇技术 等等

    oracle9i小结 46 Oracle 数据库的聚簇技术 61 数据库、服务名、实例 63 Oracle内存结构 64 sys用户和system用户 67 Oracle SQL语句 67 GROUPING SETS分组 74 Oracle外部程序触发 75 Oracle数据库的备份与恢复 77 ...

    OCA认证考试指南(1Z0-052)

    18.1 描述和使用数据移动方法(sql loader、目录对象和外部表) 18.2 解释oracle data pump的一般体系结构 18.3 使用data pump导出和导入在oracle数据库之间移动数据 18.4 小结 18.5 本章测试题 第19章 增强...

    数据库 ORACLE_8_初学者指南1.rar

    1.2.2 开端小结 1.2.3 今天的Oracle 1.3 Oracle8服务器 1.3.1 为什么Oracle拥有今天的地位 1.3.2 Oracle7/8服务器的组件 1.4 SQL*Plus—友好的用户接口 1.5 Oracle Forms—前端产品 1.6 Oracle Reports—报表生成器 ...

    数据库 ORACLE_8_初学者指南2

    1.2.2 开端小结 1.2.3 今天的Oracle 1.3 Oracle8服务器 1.3.1 为什么Oracle拥有今天的地位 1.3.2 Oracle7/8服务器的组件 1.4 SQL*Plus—友好的用户接口 1.5 Oracle Forms—前端产品 1.6 Oracle Reports—报表生成器 ...

    Oracle_Database_11g完全参考手册.part3/3

    第23章 用SQL*Loader加载数据 第24章 使用Data Pump Export和Data Pump Import 第25章 访问远程数据 第26章 使用物化视图 第27章 使用Oracle Text进行文本搜索 第28章 使用外部表 第29章 使用闪回查询 第30章 闪问:...

    Oracle_Database_11g完全参考手册.part2/3

    第23章 用SQL*Loader加载数据 第24章 使用Data Pump Export和Data Pump Import 第25章 访问远程数据 第26章 使用物化视图 第27章 使用Oracle Text进行文本搜索 第28章 使用外部表 第29章 使用闪回查询 第30章 闪问:...

    Oracle 9i&10g编程艺术:深入数据库体系结构(全本)含脚本

    15.1 SQL*Loader 655 15.1.1 用SQLLDR加载数据的FAQ 660 15.1.2 SQLLDR警告 686 15.1.3 SQLLDR小结 686 15.2 外部表 687 15.2.1 建立外部表 688 15.2.2 处理错误 693 15.2.3 使用外部表加载不同的文件 697 ...

    让Oracle跑得更快 Oracle 10g性能分析与优化思路.part2.rar

    1.4 小结 19 第2章 锁和阻塞 20 2.1 关于锁 20 2.2 锁和阻塞 22 2.3 引起阻塞的其他情况 30 2.3.1 select for update 30 2.3.2 外键和索引 36 第3章 latch和等待 44 3.1 共享池中的latch争用 45 .3.2 数据缓冲池...

    让Oracle跑得更快 Oracle 10g性能分析与优化思路.part1.rar

    1.4 小结 19 第2章 锁和阻塞 20 2.1 关于锁 20 2.2 锁和阻塞 22 2.3 引起阻塞的其他情况 30 2.3.1 select for update 30 2.3.2 外键和索引 36 第3章 latch和等待 44 3.1 共享池中的latch争用 45 .3.2 数据缓冲池...

    ActionScript开发技术大全

    1.3小结 8 第2章搭建ActionScript3.0开发环境 9 2.1搭建基于FlashCS3IDE的开发环境 9 2.1.1安装FlashCS3ID 9 2.1.2安装FlashCS3IDEupdate9.0.2 11 2.1.3在FlashCS3IDE下创建ActionScript3.0项目 11 2.2搭建基于Flex...

    ORACLE9i_优化设计与系统调整

    §12.8 使用SQL_Trace和TKPROF 151 §12.8.1 设置跟踪初始化参数 152 §12.8.2 启用SQL_Trace实用工具 152 §12.8.3 用TKPROF格式化跟踪文件 153 §12.8.4 解释TKPROF输出文件 155 §12.8.5 解释计划(Explain Plan)...

    二十三种设计模式【PDF版】

    使用工厂模式就象使用 new 一样频繁. 设计模式之 Builder 汽车由车轮 方向盘 发动机很多部件组成,同时,将这些部件组装成汽车也是一件复杂的工作,Builder 模式就是将这两 种情况分开进行。 设计模式之 ...

    Oracle编程艺术

    1.4 小结....................................................................................121 第 2章体系结构概述........................................................................123 2.1 定义...

Global site tag (gtag.js) - Google Analytics