sqlldr的用法
sqlldr使用大全

Oracle之sqlldr使用文档变更历史目录1.sqlldr简介 (3)2.sqlldr结构 (4)2.1. sqlldr结构图 (4)2.2. sqlldr功能描述 (5)2.3. 命令结构 (6)2.3.1. 程序参数 (6)2.4. 控制文件 (8)2.4.1. 控制文件语法 (8)2.4.2. 控制文件结构说明 (9)2.5. 数据文件 (11)2.5.1. 数据文件要求 (11)2.5.2. 数据文件内容 (11)2.6. 日志文件 (12)2.7. BAD文件 (12)2.8. DISCARD文件 (12)3.sqlldr 装载 (13)3.1. 一般装载 (14)3.1.1. 控制文件 (14)3.1.2. 数据文件 (14)3.1.3. 装载结果 (14)3.2. 指定字段长度装载 (15)3.2.1. 控制文件 (15)3.2.2. 数据文件 (15)3.2.3. 装载结果 (15)3.3. 指定类型装载 (16)3.3.1. 控制文件 (16)3.3.2. 数据文件 (16)3.3.3. 装载结果 (17)3.4. 跳过装载................................................................................. 错误!未定义书签。
3.5. 多表装载 (17)3.5.1. 控制文件 (17)3.5.2. 数据文件 (18)3.5.3. 装载结果 (18)3.6. 直接路径装载 (19)3.6.1. 控制文件 (19)3.6.2. 数据文件 (20)3.6.3. 装载结果 (20)3.7. 使用函数装载 (20)3.7.1. 控制文件 (20)3.7.2. 装载结果 (21)3.8. 多文件多表装载 (21)3.8.1. 控制文件 (22)3.8.2. 数据文件 (22)3.8.3. 装载结果 (23)3.9. 默认值装载 (23)3.9.1. 控制文件 (23)3.9.2. 数据文件 (24)3.9.3. 装载结果 (24)3.10. LOB数据装载 (24)3.10.1. 控制文件 (25)3.10.2. 数据文件 (25)3.10.3. 装载结果 (26)3.11. 外部表装载 (26)3.11.1. 装载结果 (27)1.sqlldr简介当我们在使用Oracle数据库的时候,经常需要对数据进行装载入库,而这些数据很多时候不一定是来自Oracle数据库本身,可能只是一些文本数据。
sqlldr userid写法

SQL*Loader 是一个用于将数据从外部文件加载到 Oracle 数据库表中的实用程序。
在使用 SQL*Loader 进行数据加载时,通常需要使用userid 参数来连接数据库并指定加载数据的用户。
那么,userid 参数的写法是怎样的呢?1. 基本语法userid 参数的基本语法如下:```sqlldr userid=username/passwordconnect_identifier```其中,username 是数据库用户的用户名,password 是该用户的密码,connect_identifier 是数据库的连接标识符。
这里需要注意的是,如果密码中包含特殊字符,那么需要使用引号将整个字符串括起来,避免密码中的特殊字符被解释成其他含义。
2. 连接到本地数据库如果要连接到本地数据库,可以使用以下语法:```sqlldr userid=用户名/密码```要连接到本地数据库的 scott 用户,密码是 tiger 的话,可以这样写:```sqlldr userid=scott/tiger```3. 连接到远程数据库如果要连接到远程数据库,就需要指定数据库的连接标识符。
连接标识符通常由数据库的 TNS 服务名称或者连接描述符组成。
语法如下:```sqlldr userid=username/passwordTNS_SERVICE_NAME```或者```sqlldruserid=username/password"(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=port))(CONNECT_DATA=( SERVICE_NAME=sid)))"```其中,TNS_SERVICE_NAME 是 TNS 服务名称,hostname 是数据库服务器的主机名,port 是数据库监听器的端口号,sid 是数据库的系统标识符。
oraclesqlldr用法

oraclesqlldr用法SQLLDR是Oracle提供的一个数据加载工具,可以将平面文件中的数据批量地加载到Oracle数据库表中。
下面将详细介绍SQLLDR的用法。
1.SQLLDR的基本语法:``````其中,`<username>`是要登录的数据库用户,`<password>`是该用户的密码,`<database>`是要连接的数据库名,`<control_file>`是用来控制数据加载过程的控制文件。
2.控制文件的编写:控制文件是一个文本文件,用来指定数据文件的格式、要加载的表、数据文件的位置等信息。
控制文件的基本语法如下:```LOADDATAINFILE '<data_file>'INTO TABLE <table_name>FIELDSTERMINATEDBY','OPTIONALLYENCLOSEDBY'"'(column1, column2,...)```其中,`<data_file>`是要加载的数据文件名,`<table_name>`是要将数据加载到的表名,`FIELDS TERMINATED BY ','`指定了数据文件中的字段之间的分隔符(逗号),`OPTIONALLY ENCLOSED BY '"'`指定了数据文件中的字段是否被包围(双引号)。
括号中的`column1, column2,...`指定了要加载的表的列名,列的顺序要和数据文件中的列顺序一致。
3.数据文件的格式:数据文件是一个文本文件,每行表示一条记录,字段之间使用分隔符进行分隔。
字段的顺序要和控制文件中指定的顺序一致。
4.SQLLDR的参数:-`SKIP`:指定要跳过的记录数量。
-`BADFILE`:指定不符合加载规则的记录将被写入的文件。
oracle sqluldr用法

oracle sqluldr用法
OracleSQL*Loader的用法是将大量数据从外部文件加载到Oracle数据库中。
SQL*Loader是一个命令行工具,使用其语法基于控制文件和数据文件来加载数据。
要使用SQL*Loader,必须创建一个控制文件,其中包含数据文件的描述,以及数据如何被加载到表中的说明。
以下是SQL*Loader的一些用法:
1.控制文件
控制文件是SQL*Loader的核心组件。
它描述了要加载的数据文件的结构和格式。
控制文件包含以下信息:
- 数据文件的名称和位置
- 数据字段的名称和类型
- 数据字段的分隔符和引用符
- 数据加载的表和列名称
2.数据文件
SQL*Loader使用数据文件将数据加载到数据库中。
数据文件必须与控制文件结构相匹配。
数据文件的格式可以是文本文件、定长文件或可分隔文件。
3.数据加载
使用SQL*Loader加载数据时,必须指定控制文件和数据文件的名称和位置。
以下是一个例子:
sqlldr control=mycontrol.ctl data=mydata.dat
log=mylog.log
该命令将加载mydata.dat文件中的数据到数据库中,并将日志记录到mylog.log文件中。
4.高级特性
SQL*Loader还支持高级特性,如并行加载、条件加载和转换数据。
这些特性可以提高加载数据的效率和灵活性。
总之,Oracle SQL*Loader是一个强大的工具,可用于快速加载大量数据到Oracle数据库中。
掌握其用法可以帮助开发人员提高数据处理的效率和质量。
sqlldr的使用示例

Sqlldr的使用一个简单的sqlldr例子在介绍功能之前,首先我们来试用一个最简单的sqlldr例子。
前提:安装了oracle客户端。
在“开始”->“运行”,输入“cmd”,回车。
在打开的dos窗口里输入:sqlldr。
如果显示如下,就表明你已经安装了sqlldr并且使用了。
下面,我为了快速学习,先忽略参数的说明。
只管用一个简单的例子。
我在本机上安装了Linux的oracle数据库,现在先建立一个测试的表:create table tdsxhwn.tbtestsqlldr(id int,name varchar(10))然后配置一个连接服务,别名为LOCALHOST_ORCL打开PL/SQL即可看到:如果没有PL/SQL,也可以在$ORACLE_HOME\client_1\NETWORK\ADMIN\tnsnames.ora文件找到:现在,我在“D:\sqlldr”文件夹里创建两个文件:control.txt文件:data.txt然后,在刚才的dos窗口里输入:sqlldr userid=tdsxhwn/td$123@LOCALHOST_ORCL control=d:\sqlldr\control.txt log= d:\sqlldr\out.log上面sqlldr的格式是:sqlldr userid=用户/密码@服务别名control= control文件路径log=日志文件路径效果如下:我们去数据库里查一下:select * from tdsxhwn.tbtestsqlldr该结果与data.txt的数据对比,可以看出有些不太一样这时,我们到D:\sqlldr会发现有一个data.bad和out.log的文件,”*.bad”通常就是记录插入数据库失败的行,而”out.log”是我们刚才指定的日志名,打开data.bad可以看到:4##gdktcattsoftkk##name刚好这两行是没有插入到表tdsxhwn.tbtestsqlldr的。
sqlldr用法

sqlldr用法在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法:1. A 表的记录导出为一条条分号隔开的 insert 语句,然后执行插入到 B 表中2. 建立数据库间的 dblink,然后用 create table B as select * from A@dblink where ...,或 insert into B select * from A@dblink where ...3. exp A 表,再 imp 到 B 表,exp 时可加查询条件4. 程序实现 select from A ..,然后 insert into B ...,也要分批提交5. 再就是本篇要说到的 Sql Loader(sqlldr) 来导入数据,效果比起逐条 insert 来很明显第 1 种方法在记录多时是个噩梦,需三五百条的分批提交,否则客户端会死掉,而且导入过程很慢。
如果要不产生 REDO 来提高 insert into 的性能,就要下面那样做:view sourceprint?1.alter table B nologging;2.insert /* +APPEND */ into B(c1,c2) values(x,xx);3.insert /* +APPEND */ into B select * from A@dblink where .....;好啦,前面简述了 Oracle 中数据导入导出的各种方法,我想一定还有更高明的。
下面重点讲讲 Oracle 的 Sql Loader (sqlldr) 的用法。
在命令行下执行 Oracle 的 sqlldr 命令,可以看到它的详细参数说明,要着重关注以下几个参数:userid -- Oracle 的 username/password[@servicename]control -- 控制文件,可能包含表的数据-------------------------------------------------------------------------------------------------------log -- 记录导入时的日志文件,默认为控制文件(去除扩展名).logbad -- 坏数据文件,默认为控制文件(去除扩展名).baddata -- 数据文件,一般在控制文件中指定。
oracle sqlload用法

oracle sqlload用法SQL*Loader 是 Oracle 数据库中一个用于高效地将大量数据加载到表中的工具。
它可以从文本文件、CSV 文件或其他数据库中加载数据,并将其插入到指定的表中。
以下是SQL*Loader 的用法:1. 创建控制文件:SQL*Loader 需要一个控制文件来指定数据的格式和加载方式。
控制文件可以手动创建,也可以使用Oracle Enterprise Manager 或 SQL Developer 等工具生成。
控制文件包含以下内容:- LOAD DATA:指定数据加载的语句。
- INFILE:指定要加载的数据文件的路径和名称。
- INTO TABLE:指定要加载数据的目标表的名称。
- FIELDS TERMINATED BY:指定字段之间的分隔符。
- TRAILING NULLCOLS:指定允许空列。
- 载入的列名和列数据类型。
2. 准备数据文件:需要准备一个包含要加载的数据的文本文件。
数据文件中的每一行对应表中一条记录,字段之间使用控制文件中指定的分隔符进行分隔。
3. 运行 SQL*Loader:打开命令行终端或 SQL*Plus 窗口,使用以下命令来运行 SQL*Loader:```sqlldr username/password@database control=controlfile.ctllog=logfilename.log```- `username/password`:Oracle 数据库的用户名和密码。
- `database`:要连接的数据库实例的名称。
- `control=controlfile.ctl`:指定控制文件的路径和名称。
- `log=logfilename.log`:指定日志文件的路径和名称。
4. 检查日志文件:SQL*Loader 在加载数据时会生成一个日志文件,用于记录加载过程中的错误和警告信息。
通过查看日志文件,可以了解加载过程中是否发生了错误,并可以根据其提供的信息进行调试和修复。
sqlldr用法详解

sqlldr⽤法详解sqlldr⽤法举例制定控制⽂件result.ctlresult.ctl内容:load datainfile 'result.csv'into table resultxt(resultid char terminated by ',',website char terminated by ',',ipport char terminated by ',',status char terminated by whitespace) 说明: infile 指数据源⽂件 这⾥我们省略了默认的 discardfile result.dsc badfile result.bad into table resultxt 默认是INSERT,也可以into table resultxt APPEND为追加⽅式,或REPLACE terminated by ',' 指⽤逗号分隔 terminated by whitespace 结尾以空⽩分隔执⾏加载:D:\>sqlldr control=result.ctl log=resulthis.out-------------------------sqlldr⽤法详解sql loader可以把⼀些以⽂本格式存放的数据顺利的导⼊到oracle数据库中,是⼀种在不同数据库之间进⾏数据迁移的⾮常⽅便⽽且通⽤的⼯具。
缺点就速度⽐较慢,另外对blob等类型的数据就有点⿇烦了。
⽤法: SQLLDR keyword=value [,keyword=value,...]有效的关键字:userid -- ORACLE username/passwordcontrol ?C 控制⽂件log ?C 记录的⽇志⽂件bad ?C 坏数据⽂件data ?C 数据⽂件discard ?C 丢弃的数据⽂件discardmax ?C 允许丢弃数据的最⼤值 (全部默认)skip -- Number of logical records to skip (默认0)load -- Number of logical records to load (全部默认)errors ?C 允许的错误记录数 (默认50)rows -- Number of rows in conventional path bind array or between direct path data saves(每次提交的记录数,默认: 常规路径 64, 所有直接路径)bindsize -- Size of conventional path bind array in bytes(默认256000)每次提交记录的缓冲区的⼤⼩(字节为单位,默认256000)silent --禁⽌输出信息 (header,feedback,errors,discards,partitions)direct ?C 使⽤直通路径⽅式导⼊ (默认FALSE)parfile -- parameter file: name of file that contains parameter specificationsparallel -- 并⾏导⼊ (默认FALSE)file -- File to allocate extents from与bindsize成对使⽤,其中较⼩者会⾃动调整到较⼤者sqlldr先计算单条记录长度,乘以rows,如⼩于bindsize,不会试图扩张rows以填充bindsize;如超出,则以bindsize为准。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
酱油是oracle菜鸟,贴出来一些学习的笔记,希望大神指点指点sqlldr导数据的时候,如果数据文件有一堆空格,可以这么整几个sqlplus的设置set termout off; 是否在屏幕上显示输出内容,off屏幕不显示查询语句,主要与spool结合使用set feedback off; 关闭本次sql命令处理的记录条数,默认为on即去掉最后的已经选择的行数set echo off; 关闭脚本中正在执行的SQL语句的显示set heading off; 关闭标题的输出,设置为off就去掉了select结果的字段名只显示数据set trimout on; 去除标准输出每行后面多余的空格set trimspool on; 将每行后面多余的空格去掉【linesize-实际字符数=多余空格】各个参数属性load datainfile '/home/oracle/sql_loader/test.txt' 待加载的数据文件badfile '/home/oracle/sql_loader/test_bad.txt' 格式不匹配写入坏文件discardfile'/home/oracle/sql_loader/test_discard.txt' 条件不匹配写入丢弃文件append into table test_loader 追加的方式插入数据fields terminated by "," 字段与字段之间的分隔符trailing nullcols 这句的意思是将没有对应值的列都置为null (owner,object_name,object_id,object_type) 数据插入的对应字段load datainfile '/home/oracle/emp.txt'badfile '/home/oracle/bad.txt'discardfile '/home/oracle/dis.txt'appendinto table t1fields terminated by ","trailing nullcols(empno "trim(:empno)",ename"trim(:ename)")(1)直接加载比传统加载效率要高(2)不扫描原来的空数据块(3)不需要sql解析,减少系统的负载(4)不经过SGA,而传统加载时经过SGA;(5)不走DBWR进程,走自己的专属进程,所以速度快直接加载限制:(1)不能加载簇表(2)锁定整个表,在表上有活动事务的时候不能加载直接加载特点:(1)直接加载是在所有数据块后面加载新数据块,修改高水位线,不扫描原来的空数据块。
(2)直接加载只产生一点点的管理redo,因为要修改数据字典(也可以讲不产生redo)。
(3)回滚,如果加载失败把新分配数据块抹掉就行了。
(4)无需SGA,无需SQL解析,无需DBWR进程SCOTT@POD>select owner||','||object_name||','||object_type from dba_objects where rownum<50001; 把object里的东西导进表里load datainfile '/home/oracle/sqlldr/test.txt'badfile '/home/oracle/sqlldr/bad.log'appendinto table testfields terminated by ','optionally enclosed by '"'trailing nullcols(owner "trim(wner)",object_name"trim(bject_name)",object_type"trim(bject_name)")默认加载[oracle@POD sqlldr]$ sqlldr scott/tiger control='/home/oracle/sqlldr/load.ctl'导入的时候触发commit point...Commit point reached - logical record count 48864Commit point reached - logical record count 48928Commit point reached - logical record count 48992Commit point reached - logical record count 49056Commit point reached - logical record count 49120Commit point reached - logical record count 49184Commit point reached - logical record count 49248Commit point reached - logical record count 49312Commit point reached - logical record count 49376Commit point reached - logical record count 49440Commit point reached - logical record count 49504Commit point reached - logical record count 49568Commit point reached - logical record count 49632Commit point reached - logical record count 49696Commit point reached - logical record count 49760Commit point reached - logical record count 49824Commit point reached - logical record count 49888Commit point reached - logical record count 49952Commit point reached - logical record count 50001...看下日志里的信息SQL*Loader: Release 11.2.0.1.0 - Production on Tue Mar 18 17:21:20 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. Control File: /home/oracle/sqlldr/load.ctlData File: /home/oracle/sqlldr/test.txtBad File: /home/oracle/sqlldr/bad.logDiscard File: none specified(Allow all discards)Number to load: ALLNumber to skip: 0Errors allowed: 50Bind array: 64 rows, maximum of 256000 bytesContinuation: none specifiedPath used: ConventionalTable TEST, loaded from every logical record.Insert option in effect for this table: APPENDTRAILING NULLCOLS option in effectColumn Name Position Len Term Encl Datatype ------------------------------ ---------- ----- ---- ---- --------------------- OWNER FIRST * , O(") CHARACTER SQL string for column : "trim(wner)"OBJECT_NAME NEXT * , O(") CHARACTER SQL string for column : "trim(bject_name)"OBJECT_TYPE NEXT * , O(") CHARACTER SQL string for column : "trim(bject_name)"Record 50001: Discarded - all columns null.Table TEST:50000 Rows successfully loaded.0 Rows not loaded due to data errors.0 Rows not loaded because all WHEN clauses were failed.1 Row not loaded because all fields were null.Space allocated for bind array: 49536 bytes(64 rows)Read buffer bytes: 1048576Total logical records skipped: 0Total logical records read: 50001Total logical records rejected: 0Total logical records discarded: 1Run began on Tue Mar 18 17:21:20 2014Run ended on Tue Mar 18 17:21:23 2014Elapsed time was: 00:00:02.79CPU time was: 00:00:00.17再用直接加在[oracle@POD sqlldr]$ sqlldr scott/tiger control='/home/oracle/sqlldr/load.ctl' direct=true SQL*Loader: Release 11.2.0.1.0 - Production on Tue Mar 18 17:28:32 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.Control File: /home/oracle/sqlldr/load.ctlData File: /home/oracle/sqlldr/test.txtBad File: /home/oracle/sqlldr/bad.logDiscard File: none specified(Allow all discards)Number to load: ALLNumber to skip: 0Errors allowed: 50Continuation: none specifiedPath used: DirectTable TEST, loaded from every logical record.Insert option in effect for this table: APPENDTRAILING NULLCOLS option in effectColumn Name Position Len Term Encl Datatype ------------------------------ ---------- ----- ---- ---- --------------------- OWNER FIRST * , O(") CHARACTER SQL string for column : "trim(wner)"OBJECT_NAME NEXT * , O(") CHARACTER SQL string for column : "trim(bject_name)"OBJECT_TYPE NEXT * , O(") CHARACTER SQL string for column : "trim(bject_name)"Record 50001: Discarded - all columns null.Table TEST:50000 Rows successfully loaded.0 Rows not loaded due to data errors.0 Rows not loaded because all WHEN clauses were failed.1 Row not loaded because all fields were null.Bind array size not used in direct path.Column array rows : 5000Stream buffer bytes: 256000Read buffer bytes: 1048576Total logical records skipped: 0Total logical records read: 50001Total logical records rejected: 0Total logical records discarded: 1Total stream buffers loaded by SQL*Loader main thread: 19 Total stream buffers loaded by SQL*Loader load thread: 8Run began on Tue Mar 18 17:28:32 2014Run ended on Tue Mar 18 17:28:32 2014Elapsed time was: 00:00:00.49CPU time was: 00:00:00.17时间省了不少在配置文件中可以加上控制每多少行提交一次,最多多少错行后取消执行OPTIONS(ERRORS=500,ROWS=100000)小结:经过比对direct比conventional要提高了20倍效率,区别如下Direct 特点(1)数据绕过SGA直接写入磁盘的数据文件(2)数据直接写入高水位线HWM之后的新块,不会扫描HWM之前的空闲块(3)commit之后移动HWM他人才能看到(4)不对已用空间进行扫描(5)使用direct几乎不产生redo log,不是完全不产生(安全性差),但会产生undo数据(6)适用OLAP在线分析场景,增删改不频繁的场景Conventional传统加载特点(1)数据先加载-> SGA -> 磁盘的数据文件(2)会扫描高水位线HWM之前的数据块,如果有空闲块(碎片经常DML导致)就会利用,如果没有再插入新块(3)高水位线HWM之前的数据块是放在SGA区的(4)会产生redo log和undo数据(5)安全性高,可恢复数据(6)传统加载与SQL语句insert插入没区别。