Ⅰ sqlLOADER 3 指定不装载哪一列
oracle装载表即通过sqlloader的方式导入数据。
Oracle 的SQL*LOADER可以将外部数据加载到数据库表中。下面是SQL*LOADER的基本特点:
1)能装入不同数据类型文件及多个数据文件的数据
2)可装入固定格式,自由定界以及可度长格式的数据
3)可以装入二进制,压缩十进制数据
4)一次可对多个表装入数据
5)连接多个物理记录装到一个记录中
6)对一单记录分解再装入到表中
7)可以用 数对制定列生成唯一的KEY
8)可对磁盘或 磁带数据文件装入制表中
9)提供装入错误报告
10)可以将文件中的整型字符串,自动转成压缩十进制并装入列表中。
1.2控制文件
控制文件是用一种语言写的文本文件,这个文本文件能被SQL*LOADER识别。SQL*LOADER根据控制文件可以找到需要加载的数据。并且分析和解释这些数据。控制文件由三个部分组成:
l 全局选件,行,跳过的记录数等;
l INFILE子句指定的输入数据;
l 数据特性说明。
1.3输入文件
对于 SQL*Loader, 除控制文件外就是输入数据。SQL*Loader可从一个或多个指定的文件中读出数据。如果数据是在控制文件中指定,就要在控制文件中写成 INFILE * 格式。当数据固定的格式(长度一样)时且是在文件中得到时,要用INFILE "fix n"
load data
infile 'example.dat' "fix 11"
into table example
fields terminated by ',' optionally enclosed by '"'
(col1 char(5),
col2 char(7))
example.dat:
001, cd, 0002,fghi,
00003,lmn,
1, "pqrs",
0005,uvwx,
当数据是可变格式(长度不一样)时且是在文件中得到时,要用INFILE "var n"。如:
load data
infile 'example.dat' "var 3"
into table example
fields terminated by ',' optionally enclosed by '"'
(col1 char(5),
col2 char(7))
example.dat:
009hello,cd,010world,im,
012my,name is,
1.4坏文件
坏文件包含那些被SQL*Loader拒绝的记录。被拒绝的记录可能是不符合要求的记录。
坏文件的名字由 SQL*Loader命令的BADFILE 参数来给定。
1.5日志文件及日志信息
当SQL*Loader 开始执行后,它就自动建立 日志文件。日志文件包含有加载的总结,加载中的错误信息等。
控制文件语法
控制文件的格式如下:
OPTIONS ( { [SKIP=integer] [ LOAD = integer ]
[ERRORS = integer] [ROWS=integer]
[BINDSIZE=integer] [SILENT=(ALL|FEEDBACK|ERROR|DISCARD) ] )
LOAD[DATA]
[ { INFILE | INDDN } {file | * }
[STREAM | RECORD | FIXED length [BLOCKSIZE size]|
VARIABLE [length] ]
[ { BADFILE | BADDN } file ]
{DISCARDS | DISCARDMAX} integr ]
[ {INDDN | INFILE} . . . ]
[ APPEND | REPLACE | INSERT ]
[RECLENT integer]
[ { CONCATENATE integer |
CONTINUEIF { [THIS | NEXT] (start[: end])LAST }
Operator { 'string' | X 'hex' } } ]
INTO TABLE [user.]table
[APPEND | REPLACE|INSERT]
[WHEN condition [AND condition]...]
[FIELDS [delimiter] ]
(
column {
RECNUM | CONSTANT value |
SEQUENCE ( { integer | MAX |COUNT} [, increment] ) |
[POSITION ( { start [end] | * [ + integer] }
) ]
datatype
[TERMINATED [ BY ] {WHITESPACE| [X] 'character' } ]
[ [OPTIONALLY] ENCLOSE[BY] [X]'charcter']
[NULLIF condition ]
[DEFAULTIF condotion]
}
[ ,...]
)
[INTO TABLE...]
[BEGINDATA]
1)要加载的数据文件:
1.INFILE 和INDDN是同义词,它们后面都是要加载的数据文件。如果用 * 则表示数据就在控制文件内。在INFILE 后可以跟几个文件。
2.STRAM 表示一次读一个字节的数据。新行代表新物理记录(逻辑记录可由几个物理记录组成)。
3.RECORD 使用宿主操作系统文件及记录管理系统。如果数据在控制文件中则使用这种方法。
3. FIXED length 要读的记录长度为length字节,
4. VARIABLE 被读的记录中前两个字节包含的长度,length 记录可能的长度。缺伤为8k字节。
5. BADFILE和BADDN同义。Oracle 不能加载数据到数据库的那些记录。
6. DISCARDFILE和DISCARDDN是同义词。记录没有通过的数据。
7. DISCARDS和DISCARDMAX是同义词。Integer 为最大放弃的文件个数。
2)加载的方法:
1.APPEND 给表添加行。
2.INSERT 给空表增加行(如果表中有记录则退出)。
3.REPLACE 先清空表在加载数据。
4. RECLEN 用于两种情况,1)SQLLDR不能自动计算记录长度,2)或用户想看坏文件的完整记录时。对于后一种,Oracle只能按常规把坏记录部分写到错误的地方。如果看整条记录,则可以将整条记录写到坏文件中。
3)指定最大的记录长度:
1. CONCATENATE 允许用户设定一个整数,表示要组合逻辑记录的数目。
4)建立逻辑记录:
1.THIS 检查当前记录条件,如果为真则连接下一个记录。
2.NEXT 检查下一个记录条件。如果为真,则连接下一个记录到当前记录来。
2. Start: end 表示要检查在THIS或NEXT字串是否存在继续串的列,以确定是否进行连接。如:continueif next(1-3)='WAG' 或continueif next(1-3)=X'0d03if'
5)指定要加载的表:
1.INTO TABLE 要加的表名。
2.WHEN 和select WHERE类似。用来检查记录的情况,如:when(3-5)='SSM' and (22)='*"
6)介绍并括起记录中的字段:
1. FIELDS给出记录中字段的分隔符,FIELDS格式为:
FIELDS [TERMIALED [BY] {WHITESPACE | [X] 'charcter'} ]
[ [ OPTIONALLY] ENCLOSE [BY] [X]'charcter' ]
TERMINATED 读完前一个字段即开始读下一个字段直到介绍。
WHITESPACE 是指结束符是空格的意思。包括空格、Tab、换行符、换页符及回车符。如果是要判断但字符,可以用单引号括起,如X'1B'等。
OPTIONALLY ENCLOSED 表示数据应由特殊字符括起来。也可以括在TERMINATED字符内。使用OPTIONALLY要同时用TERMINLATED。
ENCLOSED 指两个分界符内的数据。如果同时用 ENCLOSED和TERMINAED ,则它们的顺序决定计算的顺序。
7)定义列:
column 是表列名。列的取值可以是:
BECHUM 表示逻辑记录数。第一个记录为1,第2个记录为2。
CONSTANT 表示赋予常数。
SEQUENCE 表示序列可以从任意序号开始,格式为:
SEQUENCE ( { integer | MAX |COUNT} [,increment]
POSITION 给出列在逻辑记录中的位置。可以是绝对的,或相对前一列的值。格式为:
POSITION ( {start[end] | * [+integer] } )
Start 开始位置
* 表示前字段之后立刻开始。
+ 从前列开始向后条的位置数。
8)定义数据类型:
可以定义14种数据类型:
CHAR
DATE
DECIMAL EXTERNAL
DECIMAL
DOUBLE
FLOAT
FLOAT EXTERNAL
GRAPHIC EXTERNAL
INTEGER
INTEGER EXTERNAL
SMALLINT
VARCHAR
VARGRAPHIC
1.字符类型数据
CHAR[ (length)] [delimiter]
length缺省为 1.
2.日期类型数据
DATE [ ( length)]['date_format' [delimiter]
使用to_date函数来限制。
3.字符格式中的十进制
DECIMAL EXTERNAL [(length)] [delimiter]
用于常规格式的十进制数(不是二进制=> 一个位等于一个bit)。
4.压缩十进制格式数据
DECIMAL (digtial [,divcision])
5.双精度符点二进制
DOUBLE
6.普通符点二进制
FLOAT
7.字符格式符点数
FLOAT EXTERNAL [ (length) ] [delimiter]
8.双字节字符串数据
GRAPHIC [ (legth)]
9.双字节字符串数据
GRAPHIC EXTERNAL[ (legth)]
10.常规全字二进制整数
INTEGER
11.字符格式整数
INTEGER EXTERNAL
12.常规全字二进制数据
SMALLINT
13.可变长度字符串
VARCHAR
14.可变双字节字符串数据
VARGRAPHIC
2.2写控制文件CTL
1. 各数据文件的文件名;
2.各数据文件格式;
3.各数据文件里各数据记录字段的属性;
4.接受数据的ORACLE表列的属性;
5.数据定义;
6.其它
数据文件的要求:
数据类型的指定
CHAR 字符型
INTEGER EXTERNAL 整型
DECIMAL EXTERNAL 浮点型
3.1数据文件的内容
可以在OS下的一个文件;或跟在控制文件下的具体数据。数据文件可以是:
1、 二进制与字符格式:LOADER可以把二进制文件读(当成字符读)列表中
2、 固定格式:记录中的数据、数据类型、 数据长度固定。
3、 可变格式:每个记录至少有一个可变长数据字段,一个记录可以是一个连续的字符串。
数据段的分界(如姓名、年龄)如用“,”作字段的 分 ;用,"’作数据
括号等
4、 LOADER可以使用多个连续字段的物理记录组成一个逻辑记录,记录文件运行情况文件:包括以下内容:
1、 运行日期:软件版本号
2、 全部输入,输出文件名;对命令行的展示信息,补充信息,
3、 对每个装入信息报告:如表名,装入情况;对初始装入, 加截入或更新装
入的选择情况,栏信息
4、 数据错误报告:错误码;放弃记录报告
5、 每个装X报告:装入行;装入行数,可能跳过行数;可能拒绝行数;可能放
弃行数等
6、 统计概要:使用空间(包大小,长度);读入记录数,装入记录数,跳过记
录数;拒绝记录数,放弃记录数;运行时间等。
Ⅱ 如何使用SQLloader导入数据
1、打开要导出为oracle的Excel,将Excel文件保存为test.txt文件(文件->另存为)
2、创建SQL*Loader输入数据所需要的文件,均保存到C:,用记事本编辑:
控制文件:input.ctl,内容如下:
load data--1、控制文件标识
infile 'test.txt' --2、要输入的数据文件名为.txt,注意路径
append intotable Table_Name --3、向oracle表中追加记录
fields terminatedby X'09' --4、字段终止于X'09',是一个制表符(TAB)
(Col1,Col2…) 定义列对应顺序
a、insert,为缺省方式,在数据装载开始时要求表为空
b、append,在表中追加新记录
c、replace,删除旧记录,替换成新装载的记录
d、truncate,同上
3、在DOS窗口下使用SQL*Loader命令实现数据的输入
C:>sqlldr userid=system/managercontrol=input.ctl
默认日志文件名为:input.log
默认坏记录文件为:input.bad
4、ok,现在就可以查看数据是否导入了。
ORACLESQL Loader的详细语法
SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件迁移到ORACLE数据库中。SQL*LOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PARALLEL)。
要使用SQL*Loader,必须编辑一个控制文件(.ctl),及一个数据文件(.dat)
首先,我们认识一下SQL*LOADER
在windows下,SQL*LOADER的命令为SQLLDR,在UNIX下一般为sqlldr/sqlload。
如执行:d:\oracle>sqlldr
用法: SQLLOAD 关键字=值 [,keyword=value,...]
例如:>sqlldr user/pass
control=控制文件名 log=日志文件名
SQL*LOADER参数列表
参数名称
功能描述
Userid
数据库用户名及口令
Control
控制文件名称,描述数据加载的文件信息
Log
日志文件名称,用于记录数据加载过程的信息
Bad
坏信息文件名称,用于记录不符合要求的数据信息
Data
数据文件名称,记录要加载的原始数据
Discard
丢掉文件名称,记载了不满足条件而被过滤的数据
Discardmax
允许丢掉数据量,默认为全部丢掉
Skip
跳过几个逻辑记录,缺省为0
Load
要加载的记录数,默认为全部加载
Errors
允许出现的错误数,缺省为50
Direct
是否使用直接路径加载数据,默认为false
Readsize
缓冲区大小默认为1048576字节
1、首先创建空表
SQL>create table stu(stunonumber(5),name varchar(10),addr
varchar(20));
数据文件格式分为自由格式和固定格式
固定格式数据文件(mydata.txt)
001 SHUI LIAOHE
002 LIU BEIJING
其控制文件分别如下
#Load.ctl
Load data
Infile mydata.txt
Into table stu
(stuno position(01:03) integer external,
Name position(05:08) varchar,
Addr position(10:16) varchar)
导入数据
>sqlldr test1/test1 control=’d:\load.ctl’log=’d:\load.log’
自由格式数据文件(mydata.txt)
003,”shuics”,”new york”
004,”liujianxin”,”Beijing”
005,”shuiym”,”Canada”
其控制文件如下
#load.ctl
Load data
Infile mydata.txt
Append|insert|replace|truncate
Into table stu
Fields terminated by ‘,’
Optionally enclosed by ‘”’
(stuno,name,addr)
导入数据
将Excel数据加载到oracle数据库
1、将excel文件另存为文本文件(制表符分隔)
2、创建控制文件如下
Load data
Infile ‘book.txt’
Append
Into table stu
Fields terminated by X’09’
(stuno,name,addr)
其中X’09’是一个制表符(TAB)
Ⅲ Oracle数据库不在本地怎么使用sqlloader
sqlloader的使用与Oracle数据库是否在本地无关。前提是本地必须装有Oracle客户端。
使用Oracle版本:Oracle10g。
步骤:
1、配置本地连接远程数据库。在Oracle安装目录下,如“C:oracleproct10.2.0db_1 etworkADMIN”找到tnsnames.ora文件,增加内容(中文部分需要根据实际情况修改)并保存:
本地实例名(可自定义英文+数字组合)=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=服务器IP或服务器主机名)(PORT=Oracle端口号))
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=数据库服务名)
)
)
2、根据本地的要sqlloader的脚本在数据库中建立相应的表,数据举例如下:
Ⅳ oracle sqlloader 指定结束符
可以重新指定记录的结束符号,比如将记录结束符定义为:|加回车,infile 'test.dat' "str '|\n'"
完整控制文件为:
load data
infile 'test.dat' "str '|\n'"
into table test
fields terminated by ',' optionally enclosed by '"'
(id char(3),
ch char(5)
)
可以导入如下五条记录
001,abc|
002,def|
003,"g
i"|
004,"jkl"|
005,mno
Ⅳ sqlloader处理什么类型文件
需要一个 控制文件test_main.ctl,内容如下:
LOAD DATA
INFILE *
INTO TABLE test_main
FIELDS TERMINATED BY ','
(ID, VALUE)
BEGINDATA
Ⅵ 如何在SqlLoader中装载日期型的数据
要确保sqlloader时候的环境变量NLS_DATE_FORMAT跟你指定的"dd/Mon/yyyy:hh24:mi:ss"一样。否则会报日期格式不正确的错误。
首先设置操作系统的环境变量NLS_LANG为AMERICAN_AMERICA.ZHS16GBK,UNIX系统在profile中设置,Windows系统在注册表中设置。
然后,编写测试用的数据文件,t.txt
aaaaa,xxxxx,2005-01-01 1:00:00
bbbbb,yyyyy,2005-03-01 12:00:00
ccccc,zzzzz,2005-12-01 18:00:00
创建测试表:
create table T_LOAD
(
A VARCHAR2(10),
B VARCHAR2(10),
C DATE
);
编写sqlldr使用的控制文件
load data
infile 't.txt'
badfile 't.bad'
append into table t_load
fields terminated by ','
trailing nullcols
(
a,
b,
c date "yyyy-mm-dd hh24:mi:ss"
)
开始做sqlldr
sqlldr control=t.ctl
装载结束以后,查看log文件
SQL*Loader: Release 9.2.0.6.0 - Proction on Mon Jun 6 02:28:39 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Control File: t.ctl
Data File: t.txt
Bad File: t.bad
Discard File: none specified
(Allow all discards)
Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array: 64 rows, maximum of 256000 bytes
Continuation: none specified
Path used: Conventional
Table T_LOAD, loaded from every logical record.
Insert option in effect for this table: APPEND
TRAILING NULLCOLS option in effect
Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
A FIRST * , CHARACTER
B NEXT * , CHARACTER
C NEXT * , DATE yyyy-mm-dd hh24:mi:ss
Table T_LOAD:
3 Rows successfully loaded.
0 Rows not loaded e to data errors.
0 Rows not loaded because all WHEN clauses were failed.
0 Rows not loaded because all fields were null.
Space allocated for bind array: 49536 bytes(64 rows)
Read buffer bytes: 1048576
Total logical records skipped: 0
Total logical records read: 3
Total logical records rejected: 0
Total logical records discarded: 0
Run began on Mon Jun 06 02:28:39 2005
Run ended on Mon Jun 06 02:28:41 2005
Elapsed time was: 00:00:01.38
CPU time was: 00:00:00.04
Ⅶ oracle sqlloader 时,表为中文名,中文字段,报错:sqlloader350 非字
在sqlloader的数据文件里将,表名和字段名用英文的双引号括起来。
Ⅷ mysql中可以用sqlloader吗
MySql大量输入导入的时候都是用工具进行导入的,比如,导入EXCEL, TXT 等等等等。
你用过MYSQL的管理工具吗?里面有汇入精灵的。
Ⅸ sqlloader使用哪个参数后需要重建索引
1、重建索引的理由
a、Oracle的B树索引随着时间的推移变得不平衡(误解)
b、索引碎片在不断增加
c、索引不断增加,删除的空间没有重复使用
d、索引 clustering factor (集群因子)不同步,可以通过重建修复(误解)
Ⅹ sql*loader是个什么东西
sql*loader 是一个程序, 用来把 文本文件里面的数据, 导入到 Oracle 数据库里面。
下面是一个简单的例子:
SQL*Loader
首先需要一个 控制文件test_main.ctl,内容如下:
LOAD DATA
INFILE *
INTO TABLE test_main
FIELDS TERMINATED BY ','
(ID, VALUE)
BEGINDATA
1,Test
其中,
第一行LOAD DATA意思是告诉SQL*Loader,要干啥? 这里是加载数据。
第二行INFILE *意思是数据从哪里来? 这里是包含在控制文件中。
第三行INTO TABLE 意思是数据要导到哪里? 这里是要到 test_main 表。
第四行FIELDS TERMINATED BY意思是数据之间用什么符号分隔? 这里是用 逗号 分隔。
第五行是数据要按什么顺序写到列里面
第六行BEGINDATA是告诉SQL*Loader,后面的都是数据了。
然后开始运行 sqlldr 程序
D:\temp>sqlldr userid=test/test123 control=test_main.ctl
SQL*Loader: Release 10.2.0.1.0 - Proction on 星期日 3月 13 14:58:22 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL*Loader-601: 对于 INSERT 选项, 表必须为空。表 TEST_MAIN 上出错
在 SQL Plus 中,
SQL> truncate table test_main;
表被截断。
以后,再次测试执行
D:\temp>sqlldr userid=test/test123 control=test_main.ctl
SQL*Loader: Release 10.2.0.1.0 - Proction on 星期日 3月 13 14:58:56 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
达到提交点 - 逻辑记录计数 1