数据批量sql*load导入Oracle数据库
SQL*LOADER是大型数据
仓库选择使用的加载方法 因为它提供了最快速的途径(DIRECT PARALLEL) 现在 我们抛开其理论不谈 用实例来使
您快速掌握SQL*LOADER的使用方法
首先 我们认识一下SQL*LOADER
在NT下 SQL*LOADER的命令为SQLLDR 在UNIX下一般为sqlldr/sqlload
如执行 d:\oracle>sqlldr
SQL*Loader: Release Production 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 during 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 ADV SERVER
我们知道 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 Production 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 Production on 星期二 月 : :
(c) Copyright Oracle Corporation All rights reserved
达到提交点 逻辑记录计数
达到提交点 逻辑记录计数
已经成功!我们可以通过日志文件来分析其过程 resulthis out内容如下
SQL*Loader: Release Production 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;
这样不产生REDO LOG 可以提高效率 然后在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
lishixinzhi/Article/program/Oracle/201311/18602
Hibernate3 使用原生sql 返回集能用hbm.xml配置文件映射到类里吗?_百...
l identity:采用数据库提供的主键生成机制,为long\/short\/int型列生成唯一标识如SQL Server、MySQL中的自增主键生成机制。l hilo:通过hi\/lo算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。l seqhilo:与hi\/lo类似,通过hi\/lo算法实现的主键生成机制,只是主键历史状态保存在sequence中...
sql和orical的差别
SQLServer和Oracle的常用函数对比 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大)S:select ceiling(-1.001) value O:select ceil(-1.001) value from dual 3.取整(小)S:select floor(-1.001) value O:select floor(-1.001) value from dual 4....
SQLServer2008从入门到精通的目录
第一篇SQLServer2008快速入门第1章SQLServer2008简介1.1数据库基础知识1.1.1数据库概述1.1.2数据库模型1.2关系数据库1.2.1关系数据库概述1.2.2关系数据库术语1.2.3完整性规则1.3范式理论SNE.R模型1.3.1范式理论1.3.2E.R模型1.4SQLServer2008概述1.5SQLServer2008新增功能与特性1.5.1...
房昭止咳: 两种方法1. 使用pl/sql developer http://blog.csdn.net/taomanman/article/details/4756990 这种方法比较简单,我曾经这么一次导入过几万条记录2.sqlldr 首先将你的excel文件另存为csv格式(默认逗号间隔,另存为csv,不只是改后缀名) 然后用...
福田区19616989843: 如何从SQL Server迁移大批量数据到Oracle - ?
房昭止咳: 下面要说的是如果将txt文本数据导入到Oracle中 Dos 环境下使用SQl*Loader命令 加载 使用其它数据库的数据转移工具 Oracle 企业管理器中的数据加载功能 具体的技术实现 一、Dos 环境下加载1、首先,服务器端的侦听服务必须已经开启.测试...
福田区19616989843: 如何将mysql导出的数据导入oracle - ?
房昭止咳: 一、将表中数据导入文本文件保存 我是在WIN下的命令行模式做的 Mysql>select * from my_mysql_table into outfile 'c: /my_tmp.txt'; 二、写控制文件 用记事本开文档写完后改扩展名为.ctl,以下是具体内容 load data infile 'c:/my_tmp.txt' ...
福田区19616989843: 怎么将excel导入oracle数据库 - ?
房昭止咳: 实现步骤: 1、打开MicroSoft Excel 2、文件(F)→新建(N)→工作簿→ 3、输入SQL*Loader将Excel数据后,存盘为test.xls, 4、文件(F)→另存为(A)→ 保存类型为:制表符分隔,起名为text.txt,保存到C: (也可以保存为csv文件...
福田区19616989843: 如何使用SQLloader导入数据 - ?
房昭止咳: 1、打开要导出为oracle的Excel,将Excel文件保存为test.txt文件(文件->另存为)2、创建SQL*Loader输入数据所需要的文件,均保存到C:,用记事本编辑: 控制文件:input.ctl,内容如下: load data --1、控制文件标识 infile 'test.txt' ...
福田区19616989843: ORACLE怎么批量UPDATE? - ?
房昭止咳: excel导入ORACLE的四个方法 EXCEL里导入ORACLE有四种方法,1 使用sql *loader SQL*LOADER是oracle的数据加载工具,在NT下sql*loader的命令为SQLLDR,在UNIX下一般为SQLLDR/SQLLOAD.通常用来将操作系统文件迁移到oracle...
福田区19616989843: 如何将一个文本文件中的数据加载到oracle数据库中 - ?
房昭止咳: 将文本文件导入Oracle中需要用sqlloader的方式. 1、在数据库中创建相应的表. 如,文本文件内容为:1 2 3 4create table test (id int, name varchar2(10), sex varchar2(10));2、在电脑中某路径下编写ctrl文件,以c盘data目录为例,添加如下...
福田区19616989843: 教你如何把文本数据导入Oracle中 - ?
房昭止咳: Dos 环境下使用SQl*Loader命令 加载使用其它数据库的数据转移工具Oracle 企业管理器中的数据加载功能 具体的技术实现 Dos 环境下加载 1、首先,服务器端的侦听服务必须已经开启. 测试方法:Dos 下输入 C:\>sqlplus username/password...
福田区19616989843: shell向Oracle导入数据有sqlldr,向mysql怎么导入 - ?
房昭止咳: Oralce提供了sqlldr工具,MySQL提供了load data命令,DM7提供了dmfldr工具,dmfldr和sqlldr工具感觉使用起来比较相似,MySQL提供的load data作为一种SQL命令. MySQL导入比较简单,不需要CTRL文件,直接在mysql命令行执行即可.
福田区19616989843: sql*loader是个什么东西 - ?
房昭止咳: sql*loader 是一个程序, 用来把 文本文件里面的数据, 导入到 Oracle 数据库里面.下面是一个简单的例子:SQL*Loader 首先需要一个 控制文件test_main.ctl,内容如下:LOAD DATA INFILE * INTO TABLE test_main FIELDS TERMINATED BY...