Oracle Sqlloader

本文详细介绍了Oracle SQLLoader的基本组成及其使用方法。包括批处理文件(.bat)、参数文件(.par)、控制文件(.ctl)等组成部分的功能与配置。此外,还提供了不同导入模式的选择与注意事项。

clip_image001

属于Oracle用于数据迁移、将加载非Oracle DB格式的数据导入到数据库中。


基本的组成由:

*.bat (bat是windows;linux系统下,是一个可执行文件,例如sh)

*.par (.par文件可以不要,但需要把里面的内容直接写在.bat)

*.ctl

*.bad (自动生成)

*.log (自动生成)

*.dis

文件组成。


.bad 文件

坏数据文件,导入文件出现错误的记录会存放到这个文件中,执行bat后自动生成。


.log 文件

日志文件,可以查看导入的情况,非常有用,执行bat后自动生成。


.bat 文件

说明:是window批处理文件,里面写着.par文件的指向,linux系统则一般是sh

举例:sqlldr parfile=import.par


.par 文件

说明:里面写着所连接的数据库及各种文件

举例:

userid=用户名/密码@服务器本地命名

control=import.ctl

bad=import.bad

log=import.log

discard=import.dis

rows=1000 --每次提交的记录数

errors=1000 --允许错误的记录数

skip=0

direct=true -多文件插入

parallel=true --并发模式

注意:服务器本地命名,xp下可在,开始菜单->选择本地ORACLE客户段->配置和移植工具->服务命名,里面设置。


.ctl 文件

说明:控制文件,里面写着导进去的文件和导到哪些表及字段

例如:

unrecoverable --作用是不生成归档日志,与par文件的direct=true通用

OPTIONS (skip=1,rows=128) --sqlldr 命令显示的选项可以写到这里边来,skip=1 用来跳过数据中的第一行

LOAD DATA

INFILE 'jine.txt'

infile 'jine2.txt' --可以infile多个文件,同时导入一张表,但后面的表格无法返回预定的bad文件

--这里还可以使用 BADFILE、DISCARDFILE 来指定坏数据和丢弃数据的文件,

APPEND INTO TABLE tmp_excel --向表中追加数据

FIELDS TERMINATED BY "|" OPTIONALLY ENCLOSED BY '"' --数据文件的字段分隔符和字段限定符(如果是'需要转换,应该写成\')

railing nullcols --表中的字段没有对应的值时填充空值

(

id integer external, --integer external 表示插入的数据是string,如果只保留integer,表示插入的数据是二进制

name "upper(:name)", --将插入的值转换为大写

con ":id||:name", --表中CON列的值是ID和NAME的组合值

FILLER_1 FILLER, --filler关键字的意思是不加载的列,附件中的

dt date "yyyy-mm-dd", --插入日期型数据

school_name char(400), --sqlldr对于字符类型默认长度为255,如果超过255需要指定长度

class_name char(4000) "substr(:class_name,1,2000)" --sqlldr可以用Oracle的参数,格式是用"",里面变量前要加:

)


注意:

1. 可以infile多个文件,同时导入一张表,但后面的表格无法返回指定的bad文件

2.模式选择

APPEND 原先的表有数据 就加在后面

INSERT 装载空表 如果原先的表有数据 sqlloader会停止,是默认值

REPLACE 原先的表有数据 原先的数据会全部删除(用 delete from table 语句)

TRUNCATE 指定的内容和replace的相同会用truncate语句删除现存数据

3.分隔符选择

如果是制表符(以tab键结尾),所以是 terminated by x'09'

如果是逗号,可以 terminated by ','

如果是空格,可以 terminated by whitespace


其中:

replace和truncate模式,均不能使用并发(par文件的parallel=true参数)

如果没声明FIELDS TERMINATED BY ',' 时,可以用下面两种方式实现同样功能:

1.为每一列指定分隔符

(

col_1 [interger external] TERMINATED BY ',' ,

col_2 [date "dd-mon-yyy"] TERMINATED BY ',' ,

col_3 [char] TERMINATED BY ',' OPTIONALLY ENCLOSED BY 'lg'

)

2.用位置告诉字段装载数据

(

col_1 position(1:2),

col_2 position(3:10),

col_3 position(*:16), // 这个字段的开始位置在前一字段的结束位置

col_4 position(1:16),

col_5 position(3:10) char(8) // 指定字段的类型

resultid char terminated by ',',

website char terminated by ',',

ipport char terminated by ',',

status char terminated by whitespace)


数据传输过程极大的依靠网络的稳定,假使中途断了零点几秒也会导致记录丢失,丢失的记录会在.bad文件中找到。

并发操作

sqlldr userid=/ control=result1.ctl direct=true parallel=true data=a.txt log=input.log

sqlldr userid=/ control=result2.ctl direct=true parallel=true data=a.txt log=input.log

sqlldr userid=/ control=result2.ctl direct=true parallel=true data=a.txt log=input.log


sql loader属于直接加载,直接加载与常规加载不同的地方有

image


《错误调试篇》

错误信息:Field in data file exceeds maximum length(数据文件的字段超出最大长度)

错误原因:ctl文件导入字段没有指定数据类型

错误解决:在CTL文件指定字段类型,

如时间CREATE_DATE DATE "yyyy-mm-dd hh24:mi:ss",字符char(300)

转载于:https://www.cnblogs.com/bbliutao/p/7479542.html

<think>好的,我现在需要帮助用户找到Oracle SQL*Loader的使用示例。首先,我应该回忆一下SQL*Loader的基本概念和常见用法。SQL*Loader是Oracle用来将外部数据文件导入数据库的工具,通常需要一个控制文件(.ctl)来指定数据格式和加载规则。 用户提到他们想查找使用示例,特别是写法示例。根据提供的引用内容,有几个例子被引用了,比如ldr_case1.ctl和ldr_case5.ctl。我需要检查这些引用中的具体内容,看看是否有可用的示例。 引用[1]展示了如何执行sqlldr命令,使用scott用户的控制文件ldr_case1.ctl。引用[3]则展示了执行后的结果,包括加载的数据到bonus表中。这表明控制文件中可能定义了如何将数据加载到bonus表的结构。 接下来,我需要构建一个典型的控制文件示例。通常,控制文件包括加载数据到哪个表,字段的定义,以及数据文件的路径。例如,使用FIELDS TERMINATED BY来指定分隔符,或者使用POSITION来定位字段位置。 考虑到用户可能需要不同的数据格式,比如逗号分隔或固定宽度,我应该提供这两种情况的示例。例如,对于逗号分隔的数据,控制文件可能使用TERMINATED BY ',',而固定宽度则使用POSITION(start:end)。 此外,用户可能关心如何执行命令,所以需要包括sqlldr的命令行调用示例,如sqlldr scott/tiger control=example.ctl。同时,应该提到日志文件和错误处理的部分,因为这些是实际使用中常见的注意事项。 还要注意引用中的例子,比如在引用[3]中,控制文件可能定义了字段的映射,如ENAME、JOB等,对应的数据文件中的位置或分隔方式。需要确保示例中的语法正确,比如正确的关键字和结构。 最后,总结常见的应用场景,比如从CSV导入、处理不同分隔符、跳过标题行等,帮助用户理解SQL*Loader的灵活性。同时,生成相关问题,帮助用户进一步学习优化方法和处理复杂情况。</think>以下是Oracle SQL*Loader的使用示例及关键步骤说明: ### 基础控制文件示例(ldr_case1.ctl) ```sql LOAD DATA INFILE '/path/data.csv' INTO TABLE bonus FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' (ename, job, sal, comm) ``` 执行命令: ```bash sqlldr scott/tiger CONTROL=ldr_case1.ctl ``` 此示例将CSV文件数据按字段名映射到表$bonus$中[^3] ### 固定宽度文件示例 ```sql LOAD DATA INFILE 'data.txt' INTO TABLE employees ( empno POSITION(1:4) INTEGER EXTERNAL, ename POSITION(5:20) CHAR, job POSITION(21:30) ) ``` 适用于文本列严格对齐的场景[^2] ### 高级特性示例 ```sql OPTIONS (SKIP=1, ERRORS=50) LOAD DATA CHARACTERSET UTF8 APPEND INTO TABLE sales WHEN product_id != BLANKS FIELDS TERMINATED BY '|' TRAILING NULLCOLS ( sale_date DATE "YYYY-MM-DD", product_id, quantity INTEGER EXTERNAL, comments CHAR(100) ) ``` 包含字符集设置、数据追加模式、条件加载等特性[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值