当前位置:首页 » 编程语言 » sqlloaderoracle

sqlloaderoracle

发布时间: 2023-08-22 20:06:50

❶ 数据批量sql*load导入Oracle数据库

SQL*LOADER是大型数据

仓库选择使用的加载方法 因为它提供了最快速的途径(DIRECT PARALLEL) 现在 我们抛开其理论不谈 用实例来使

您快速掌握SQL*LOADER的使用方法

首先 我们认识一下SQL*LOADER

在NT下 SQL*LOADER的命令为SQLLDR 在UNIX下一般为sqlldr/sqlload

如执行 d:oracle>sqlldr

SQL*Loader: Release Proction on 星期二 月 : :

(c) Copyright Oracle Corporation All rights reserved

用法: SQLLOAD 关键字 = 值 [ keyword=value ]

有效的关键字:

userid ORACLE username/password

control Control file name

log Log file name

bad Bad file name

data Data file name

discard Discard file name

discardmax Number of discards to allow (全部默认)

skip Number of logical records to skip (默认 )

load Number of logical records to load (全部默认)

errors Number of errors to allow (默认 )

rows Number of rows in conventional path bind array or beeen direct p

ath data saves

(默认: 常规路径 所有直接路径)

bindsize Size of conventional path bind array in bytes(默认 )

silent Supdivss messages ring run (header feedback errors discards part

扮伏itions)

闹坦direct use direct path液缺桐 (默认FALSE)

parfile parameter file: name of file that contains parameter specification

s

parallel do parallel load (默认FALSE)

file File to allocate extents from

skip_unusable_indexes disallow/allow unusable indexes or index partitions(默认FALSE)

skip_index_maintenance do not maintain indexes mark affected indexes as unusable(默认FALSE)

mit_discontinued mit loaded rows when load is discontinued(默认FALSE)

readsize Size of Read buffer (默认 )

PLEASE NOTE: 命令行参数可以由位置或关键字指定

前者的例子是 sqlload scott/tiger foo ;

后者的例子是 sqlload control=foo userid=scott/tiger

位置指定参数的时间必须早于但不可迟于由关键字指定的参数 例如

SQLLOAD SCott/tiger control=foo logfile=log

但 不允许 sqlload scott/tiger control=foo log

即使允许参数 log 的位置正确

d:oracle>

我们可以从中看到一些基本的帮助信息 这里 我用到的是中文的WIN ADVSERVER

我们知道 SQL*LOADER只能导入纯文本 所以我们现在开始以实例来讲解其用法

一 已存在数据源result csv 欲倒入ORACLE中FANCY用户下

result csv内容

默认 Web 站点 : : RUNNING

other : : STOPPED

third : : RUNNING

从中 我们看出 列 分别以逗号分隔 为变长字符串

二 制定控制文件result ctl

result ctl内容

load data

infile 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 userid=fancy/testpass control=result ctl log=resulthis out

SQL*Loader: Release Proction on 星期二 月 : :

(c) Copyright Oracle Corporation All rights reserved

SQL*Loader : 在描述表RESULTXT时出现错误

ORA : 对象 RESULTXT 不存在

提示出错 因为数据库没有对应的表

四 在数据库建立表

create table resultxt

(resultid varchar ( )

website varchar ( )

ipport varchar ( )

status varchar ( ))

/

五 重新执行加载

D:>sqlldr userid=fancy/k i l l control=result ctl log=resulthis out

SQL*Loader: Release Proction on 星期二 月 : :

(c) Copyright Oracle Corporation All rights reserved

达到提交点 逻辑记录计数

达到提交点 逻辑记录计数

已经成功!我们可以通过日志文件来分析其过程 resulthis out内容如下

SQL*Loader: Release Proction on 星期二 月 : :

(c) Copyright Oracle Corporation All rights reserved

控制文件: result ctl

数据文件: result csv

错误文件: result bad

废弃文件: 未作指定

:

(可废弃所有记录)

装载数: ALL

跳过数:

允许的错误:

绑定数组: 行 最大 字节

继续: 未作指定

所用路径: 常规

表RESULTXT

已载入从每个逻辑记录

插入选项对此表INSERT生效

列名 位置 长度 中止 包装数据类型

RESULTID FIRST * CHARACTER

WEBSITE NEXT * CHARACTER

IPPORT NEXT * CHARACTER

STATUS NEXT * WHT CHARACTER

表RESULTXT:

行载入成功

由于数据错误 行没有载入

由于所有 WHEN 子句失败 行没有载入

由于所有字段都为空的 行没有载入

为结合数组分配的空间: 字节( 行)

除绑定数组外的内存空间分配: 字节

跳过的逻辑记录总数:

读取的逻辑记录总数:

拒绝的逻辑记录总数:

废弃的逻辑记录总数:

从星期二 月 : : 开始运行

在星期二 月 : : 处运行结束

经过时间为: : :

CPU 时间为: : : (可

六 并发操作

sqlldr userid=/ control=result ctl direct=true parallel=true

sqlldr userid=/ control=result ctl direct=true parallel=true

sqlldr userid=/ control=result ctl direct=true parallel=true

当加载大量数据时(大约超过 GB) 最好抑制日志的产生

SQL>ALTER TABLE RESULTXT nologging;

这样不产生REDOLOG 可以提高效率 然后在CONTROL文件中load data上面加一行 unrecoverable

此选项必须要与DIRECT共同应用

在并发操作时 ORACLE声称可以达到每小时处理 GB数据的能力!其实 估计能到 - G就算不错了 开始可用结构

相同的文件 但只有少量数据 成功后开始加载大量数据 这样可以避免时间的浪费

我的示例

一 在数据库建立表格weather如下

create table weather(

outlook varchar( )

temperature float

humidity float

windy varchar( )

play varchar( )

)

二 在F盘建立两个文件 分别如下

# result ctl内容如下

load data

infile result csv

into table weather

(outlook char terminated by

temperature char terminated by

humidity char terminated by

windy char terminated by

play char terminated by

)

# result csv内容如下

sunny FALSE no

sunny TRUE no

overcast FALSE yes

rainy FALSE yes

rainy FALSE yes

rainy TRUE no

overcast TRUE yes

sunny FALSE no

sunny FALSE yes

rainy FALSE yes

sunny TRUE yes

overcast TRUE yes

overcast FALSE yes

rainy TRUE no

三 命令行下执行

F:>sqlldr userid=cq *** /ctbujx control=result ctl

lishixin/Article/program/Oracle/201311/18602

❷ 如何使用sqlloader导入xml文件到Oracle数据库

在Oracle表数据和xml文件间相互导入导出的PL/SQL过程
学校里要求做个题,题目要求是写出将已知格式xml文件中的数据导入Oracle数据库、把数据库中的数据导出成xml文件的过程。
已知格式xml文件如下:

<?xmlversion="1.0"?>
<PEOPLE>
<PERSONPERSONID="E01">
<NAME>TonyBlair</NAME>
<ADDRESS>10DowningStreet,London,UK</ADDRESS>
<TEL>(061)98765</TEL><FAX>(061)98768</FAX>
<EMAIL>[email protected]</EMAIL>
</PERSON>
<PERSONPERSONID="E02">
<NAME>BillClinton</NAME>
<ADDRESS>WhiteHouse,USA</ADDRESS>
<TEL>(001)640098765</TEL><FAX>(001)640098769</FAX>
<EMAIL>[email protected]</EMAIL>
</PERSON>
<PERSONPERSONID="E03">
<NAME>TomCruise</NAME>
<ADDRESS>57JumboStreet,NewYork,USA</ADDRESS>
<TEL>(001)450067859</TEL><FAX>(001)450067895</FAX>
<EMAIL>[email protected]</EMAIL>
</PERSON>
<PERSONPERSONID="E04">
<NAME>LindaGoodman</NAME>
<ADDRESS>78CraxLane,London,UK</ADDRESS>
<TEL>(061)5456789</TEL><FAX>(061)5456772</FAX>
<EMAIL>[email protected]</EMAIL>
</PERSON>
</PEOPLE>

于是写出过程如下:
--建表
CREATETABLEPEOPLE
(
PERSONIDVARCHAR2(10)PRIMARYKEY,
NAMEVARCHAR2(20),
ADDRESSVARCHAR2(60),
TELVARCHAR2(20),
FAXVARCHAR2(20),
EMAILVARCHAR2(40)
);
--从xml文件载入数据保存到数据库的过程
createorreplaceprocerexml2db(xmlfilevarchar2)as
pxmlparser.Parser;
docxmldom.DOMDocument;
nxmldom.DOMNode;
nlxmldom.DOMNodeList;
lennumber;
--根据PERSON结点生成插入SQL语句的过程
functioninsertsql(nodexmldom.DOMNode)returnvarchar2
is
nxmldom.DOMNode;
nlxmldom.DOMNodeList;
lennumber;
nnmxmldom.DOMNamedNodeMap;
isqlvarchar2(200);
begin
--取得PERSON结点所有属性
nnm:=xmldom.getAttributes(node);
isql:='insertintopeoplevalues(';
isql:=isql||'''';
--取得所有属性中的第一个属性,即"PERSONID",并拼接到SQL语句中
isql:=isql||xmldom.getNodeValue(xmldom.item(nnm,0));
isql:=isql||'''';
--取得PERSON结点下的所有结点,准备遍历
nl:=xmldom.getChildNodes(node);
len:=xmldom.getLength(nl);
foriin0..len-1loop
--取出第i个结点
n:=xmldom.item(nl,i);
isql:=isql||',';
isql:=isql||'''';
--将结点的文本值取出并拼接到SQL语句中
isql:=isql||xmldom.getNodeValue(xmldom.getFirstChild(n));
isql:=isql||'''';
endloop;
isql:=isql||')';
returnisql;
endinsertsql;
begin
p:=xmlparser.newParser;
xmlparser.parse(p,xmlfile);
--转换xml文件成DOM对像
doc:=xmlparser.getDocument(p);
xmlparser.freeParser(p);
--取出所有PERSON元素
nl:=xmldom.getElementsByTagName(doc,'PERSON');
len:=xmldom.getLength(nl);
--清空people表的内容
deletefrompeople;
foriin0..len-1loop
--取出第i个PERSON元素
n:=xmldom.item(nl,i);
--执行插入该PERSON元素所用的SQL语句
executeimmediateinsertsql(n);
endloop;
commit;
xmldom.freeDocument(doc);
endxml2db;
/
--将数据库中的数据导出成xml文件的过程
createorreplaceproceredb2xml(xmlfilevarchar2)as
docxmldom.DOMDocument;
retxmldom.DOMNode;
peoplenodexmldom.DOMNode;
--遍历整个people表的游标
-------------
--将people表中一行记录转换为元素
--并插入到DOM文档对像根结点PEOPLE下的过程
procereaddperson(docxmldom.DOMDocument,peoplexmldom.DOMNode,
v_pidvarchar2,v_namevarchar2,v_addrvarchar2,
v_telvarchar2,v_faxvarchar2,v_emailvarchar2)
is
personelemxmldom.DOMElement;
personnodexmldom.DOMNode;
itemelemxmldom.DOMElement;
itemnodexmldom.DOMNode;
textxmldom.DOMText;
begin
--创建PERSON结点
personelem:=xmldom.createElement(doc,'PERSON');
--设置PERSONID属性
xmldom.setAttribute(personelem,'PERSONID',v_pid);
personnode:=xmldom.appendChild(peoplenode,xmldom.makeNode(personelem));
--向PERSON结点中添加NAME元素
itemelem:=xmldom.createElement(doc,'NAME');
--将NAME结点添加到PERSON结点中
itemnode:=xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
--创建文本结点
text:=xmldom.createTextNode(doc,v_name);
--将文本结点添加到NAME结点下,以构成完整NAME元素
itemnode:=xmldom.appendChild(itemnode,xmldom.makeNode(text));
--向PERSON结点中添加ADDRESS元素
itemelem:=xmldom.createElement(doc,'ADDRESS');
itemnode:=xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
text:=xmldom.createTextNode(doc,v_addr);
itemnode:=xmldom.appendChild(itemnode,xmldom.makeNode(text));
--向PERSON结点中添加TEL元素
itemelem:=xmldom.createElement(doc,'TEL');
itemnode:=xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
text:=xmldom.createTextNode(doc,v_tel);
itemnode:=xmldom.appendChild(itemnode,xmldom.makeNode(text));
--向PERSON结点中添加FAX元素
itemelem:=xmldom.createElement(doc,'FAX');
itemnode:=xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
text:=xmldom.createTextNode(doc,v_fax);
itemnode:=xmldom.appendChild(itemnode,xmldom.makeNode(text));
--向PERSON结点中添加EMAIL元素
itemelem:=xmldom.createElement(doc,'EMAIL');
itemnode:=xmldom.appendChild(personnode,xmldom.makeNode(itemelem));
text:=xmldom.createTextNode(doc,v_email);
itemnode:=xmldom.appendChild(itemnode,xmldom.makeNode(text));
endaddperson;
begin
--创建一个新DOM文档对像
doc:=xmldom.newDOMDocument;
--为文档添加根结点PEOPLE
peoplenode:=xmldom.makeNode(xmldom.createElement(doc,'PEOPLE'));
ret:=xmldom.appendChild(xmldom.makeNode(doc),peoplenode);
--使用游标遍历people中的每行,生成每一行对应的PERSON元素并添加到PEOPLE根结点中
forv_rowincur_peopleloop
addperson(doc,peoplenode,v_row.personid,v_row.name,
v_row.address,v_row.tel,v_row.fax,v_row.email);
endloop;
--将结果写入指定文件
xmldom.writeToFile(doc,xmlfile);
xmldom.freeDocument(doc);
enddb2xml;

❸ 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的脚本在数据库中建立相应的表,数据举例如下:

❹ 如何使用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 指定结束符

可以重新指定记录的结束符号,比如将记录结束符定义为:|加回车,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

热点内容
安卓手机为什么最新微信安装不了 发布:2025-02-05 02:31:03 浏览:106
安卓手机什么时候开售 发布:2025-02-05 02:14:15 浏览:660
编程车模型 发布:2025-02-05 02:09:55 浏览:680
雅马哈天剑哪个配置好 发布:2025-02-05 02:00:35 浏览:170
我的世界国际服推荐118服务器 发布:2025-02-05 01:50:48 浏览:46
普通电脑做服务器怎么操作 发布:2025-02-05 01:46:22 浏览:628
原神为什么同服务器加不起好友 发布:2025-02-05 01:41:03 浏览:337
android连接打印机 发布:2025-02-05 01:40:09 浏览:959
外国电脑代理服务器地址端口 发布:2025-02-05 01:38:30 浏览:387
德意龙鼠标宏怎么配置 发布:2025-02-05 01:34:13 浏览:318