- 浏览: 177737 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wsdst497:
chrome 版本号39 新窗口还是会被屏蔽
超链接实现新窗口打开很容易 -
zhanyeting:
[b][/b]
ajax 页面无刷新更改数据库中的内容 -
ewf_momo:
...
STRUTS 2 -
gaoxingang2008:
排一下版 太乱了
javascript -
javsky:
经验值得借鉴,项目还是不错的~我们公司最近也在做相关的项目,物 ...
IT个人年终工作总结[1]
sql loader可以把一些以文本格式存放的数据顺利的导入到oracle数据库中,
是一种在不同数据库之间进行数据迁移的非常方便而且通用的工具。
sql loader可以把一些以文本格式存放的数据顺利的导入到oracle数据库中,
是一种在不同数据库之间进行数据迁移的非常方便而且通用的工具。
缺点就速度比较慢,另外对blob等类型的数据就有点麻烦了。
用法: SQLLDR keyword=value [,keyword=value,...]
有效的关键字:
userid -- ORACLE username/password
control – 控制文件
log – 记录的日志文件
bad – 坏数据文件
data – 数据文件
discard – 丢弃的数据文件
discardmax – 允许丢弃数据的最大值 (全部默认)
skip -- Number of logical records to skip (默认0)
load -- Number of logical records to load (全部默认)
errors – 允许的错误记录数 (默认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 – 使用直通路径方式导入 (默认FALSE)
parfile -- parameter file: name of file that contains parameter specifications
parallel -- 并行导入 (默认FALSE)
file -- File to allocate extents from
与bindsize成对使用,其中较小者会自动调整到较大者
sqlldr先计算单条记录长度,乘以rows,如小于bindsize,不会试图扩张rows以填充bindsize;如超出,则以bindsize为准。
external_table
-- use external table for load; NOT_USED, GENERATE_ONLY, EXECUTE(默认NOT_USED)
columnarrayrows
-- Number of rows for direct path column array(默认5000)
streamsize -- Size of direct path stream buffer in bytes(默认256000)
multithreading
-- use multithreading in direct path
resumable -- enable or disable resumable for current session(默认FALSE)
resumable_name
-- text string to help identify resumable statement
resumable_timeout
-- wait time (in seconds) for RESUMABLE(默认7200)
date_cache -- size (in entries) of date conversion cache(默认1000)
注意:有两种方式可以指定命令行参数:通过位置或者通过关键字。前者的例子:'sqlldr scott/tiger foo';
后者的例子:'sqlldr control=foo userid=scott/tiger';
不能前面使用关键字指定后面通过位置制定的混合方式;
比如:'sqlldr scott/tiger control=foo logfile=log' 是允许的,
但'sqlldr scott/tiger control=foo log'不允许。
为清楚起见最好所有命令行参数都用关键字指定。
控制文件:
一个控制命令的脚本文件,通常以ctl结尾,内容如下:
LOAD DATA
INFILE 't.dat' 要导入的文件
// INFILE 'tt.date' 导入多个文件
// INFILE * 表示要导入的内容就在control文件里 下面的BEGINDATA后面就是导入的内容
INTO TABLE table_name 指定装入的表
BADFILE 'c:\bad.txt' 可选,指定坏文件地址,缺省在当前目录下生成与原文件名一致的.bad文件
************* 以下是4种装入表的方式
APPEND 原先的表有数据 就加在后面
INSERT 装载空表 如果原先的表有数据 sqlloader会停止 默认值
REPLACE 原先的表有数据 原先的数据会全部删除
TRUNCATE 指定的内容和replace的相同 会用truncate语句删除现存数据
************* 指定分隔符
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
// TERMINATED BY WRITESPACE 以空白分割
TRAILING NULLCOLS 表的字段没有对应的值时允许为空
************* 下面是表的字段
(
col_1 , col_2 ,col_filler FILLER // FILLER 关键字 此列的数值不会被装载
// 如: lg,lg,not 结果 lg lg
)
如果没声明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) // 指定字段的类型
)
BEGINDATA 对应开始的 INFILE * 要导入的内容就在control文件里
10,Sql,what
20,lg,show
一个简单的例子:
目前所做的项目需要从一个按行记录的数据文件取出部分字段,再将这些字段的按行存储到Oracle数据库。这些数据大约有2 700 000条,原始数据文件有450M左右。至少有两种方法可以实现:
一.将原始数据文件读进内存流中,每读一行解析一条数据,接着执行一条SQL语句,将解析到的数据插入数据库表;
二..将原始数据文件读进内存流中,每读一行解析一条数据,接着将解析到的数据按行写入一个临时文件data.tmp,待所有数据均被解析完毕且写入临时文件后,调用SQL Loader,将所有数据一次性从临时文件导入数据库表。
一开始是按照第一种方法编程的。在本机(Oracle服务器装在本机)测试顺利通过,但是花了大约150分钟才导入解析和完成;当部署到实际环境中运行时,却出现了问题。跟踪发现是因为网络不稳定(程序所在服务器与数据库服务器处于不同的局域网,由防火墙隔开,做了几个特定端口的路由),有时候连接不到数据库,往往只导入了很少的几千条甚至几百条数据时,数据库就连接不上了。
后来分析,对于大量数据的导入,采用第一种方法会导致频繁写库,每次都要打开数据库(禁用了连接池,后续文章会提到禁用的原因),对数据库造成较大的压力,加上网络环境本来就不够稳定,所以很容易出现问题。于是改用第二种方法。
使用第二种方法后,解析花的时间大约为90分钟,导入则只花了5分钟左右。看来SQL Loader的效率真的很高。
下面讲讲SQL Loader的基本用法。
1、在Oracle中按照导入数据的格式建立一个空表
2、编写一个控制文件control.ctl,内容如下
LOAD DATA
INFILE 'E:\test\data.tmp'
BADFILE 'E:\test\data.bad'
DISCARDFILE 'E:\test\data.dsc'
DISCARDMAX 1000
APPEND
INTO TABLE "TB_TEST"
FIELDS TERMINATED BY '|'
TRAILING NULLCOLS
(
USER_ID,
USER_NAME,
REG_TIME DATE(20) "YYYY-MM-DD HH24:MI:SS"
)
操作分类:
a、insert,为缺省方式,在数据装载开始时要求表为空
b、append,在表中追加新记录
c、replace,删除旧记录,替换成新装载的记录
d、truncate,同上
3、在命令行中执行以下语句:
sqlldr userid/password@database e:\test\control.ctl
参考:1. Oracle SQL*Loader -- 英文,Sql Loader 的官方使用说明,包含多种类型的 Demo
2. sql loader的用法 -- 列出了 sql loader 的选择参数的中文说明
3. 使用SQL Loader导入大量数据,避免使用SQL频繁写库 -- 一个简单的例子,快带了解 Sql Loader 的用法
4. Oracle SQL Loader的详细语法
5. oracle sql loader全攻略 -- 还算名符其实。并讲了如何用 SQL *Plus 的 spool 或 UTL_FILE 包生成数据文件
6. SQL*Loader Control File Reference -- 英文,控制文件使用参考
7. 学习oracle sql loader 的使用
8. 用sqlloader(sqlldr)装载LOB数据 -- LOB 的内类是一个外部文件,用 sql loader 导入到数据库
9. SQLLDR直接加载几个参数的测试
10.Maximizing SQL*Loader Performance
发表评论
-
Oracle 10g创建表空间的完整步骤详解
2014-06-25 20:06 665Oracle 10g数据库中,当在数据库中创建用户时,基于 ... -
查询是否有重复
2014-06-15 10:20 547select t.id, count(t.id) as n ... -
查询oracle表的信息(表,字段,约束,索引)
2014-05-12 15:41 782查询oracle表的信息(表,字段,约束,索引)1、查询出所有 ... -
oracle
2014-03-18 09:33 5011、 Broken()过程更新一个已提交的工作的状态,典型地是 ... -
oracle ORA-01033错误的解决方案
2014-02-23 22:09 753oracle ORA-01033错误的解决方 ... -
Oracle ORA-01555 快照过旧 说明 .
2012-09-19 10:37 1122http://blog.csdn.net/tianlesoft ... -
Oracle 绑定变量
2012-09-18 17:58 721oracle 中,对于一个提交的sql语句,存在两种可选的解析 ... -
Oracle ADDM 自动诊断监视工具 介绍
2012-09-18 17:28 3511Oracle AWR 介绍(AWR -- Automatic ... -
Oracle undo 表空间管理 .
2012-09-18 14:47 10283Oracle 的Undo有两种方式: 一是使用undo 表空间 ... -
Oracle undo 管理
2012-09-18 11:14 1183在开始之前,我们先来 ... -
RedoLog Checkpoint 和 SCN关系
2012-09-17 11:04 1970一. Redo log ... -
ORA-24324:未初始化服务句柄,不允许此值,正在关闭 - 不允许连接
2012-09-17 10:02 1166ORA-24324:未初始化服 ... -
spool常用的设置
2012-09-11 15:57 1125spool常用的设置set colsep' '; //域 ... -
Oracle DUPLICATE复制数据库
2012-09-08 13:05 1131一、DUPLICATE复制数据库1.使用duplicate命令 ... -
rman各种故障背景下的恢复方法
2012-08-07 18:11 934各种故障背景下的恢复方法 丢失或损 ... -
RMAN-03009: backup 命令 (ORA_DISK_1 通道上, (
2012-08-06 15:44 13187RMAN-03009: backu RMAN> b ... -
RMAN部分命令
2012-08-03 17:26 8441、切换服务器归档模式,如果已经是归档模式可跳过此步:%sql ... -
Oracle SQL性能优化
2012-07-20 16:03 613(1) 选择最有效率的表名顺序(只在基于规则的优化器 ... -
Oracle Undo的学习
2012-07-20 13:36 737回滚段可以说是用来保持数据变化前映象而提供一致读和保障事务完 ... -
impdp中remap_datafile的测试
2012-07-17 17:56 5656remap_datafile目前我的理解是一定是用在全库导出和 ...
相关推荐
NULL 博文链接:https://jxdwuao.iteye.com/blog/1704642
SQL*LOADER是oracle的数据加载工具,在NT下sql*loader的命令为SQLLDR,在UNIX下一般为SQLLDR/SQLLOAD。通常用来将操作系统文件迁移到oracle数据库中。它是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径...
涂抹ORACLE-第5章-SQLLoader 加载数据之一千零一十一个怎么办
使用SQLLDR导入数据 相关实际操作请参考我的博文 http://blog.csdn.net/ben0133/archive/2011/04/04/6301284.aspx
Oracle数据库使用SQL_Loader导入外部数据的方法详解,详细讲解 sqlldr的使用
oracle sqlloader 使用指南 数据装载
控制文件是SQL*Loader里最重要的文件,它是一个文本文件,用来定义数据文件的位置、数据的格式、以及配置数据加载过程的行为,在sqlldr中以control参数指定控制文件。
SQL*Loader(SQLLDR)是Oracle的高速批量数据加载工具。这是一个非常有用的工具,可用于多种平面文件格式向Oralce数据库中加载数据,本文给大家分享sqlloader怎么使用的相关资料,感兴趣的朋友一起学习吧
最最主要的还是sqlldr,想找个单独可用的sqlldr,在Oracle 10g Client 精简优化安装包不到12M http://download.csdn.net/download/mysky2008/4382509 下载了10g的,但本地测试出现sql*loader 704错误,不知道怎么...
涉及sqlldr的参数说明和常见应用
与.ctl文件配合使用 sqlldr userid=qxt_log/dddddd@172.16.0.0:21111/gdttt control=C:\Users\yilin\Desktop\input_147.ctl errors=10000000 pause
sqlldr报超出字符长度错误,可以参考的好资料。
sqlldr配置文件详解 python脚本根据csv文件批量生成sqlldr传输所需ctl文件和sqlldr脚本, 修改参数为自己本机配置后,运行脚本,...sqlldr配置文件详解.sql 批量sqlldr导入.py 批量导入文件SQL语句 示例:祁东县.ctl
SQL*Loader(SQLLDR)是Oracle的高速批量数据加载工具。这是一个非常有用的工具,可用于多种平面文件格式向Oralce数据库中加载数据。SQLLDR可以在极短的时间内加载数量庞大的数据。它有两种操作模式。 传统路径:...
用的是11.2.0.4的Instant Client,Oracle没给sqlldr...SQL*Loader: Release 11.2.0.4.0 - Production on 星期五 11月 12 12:25:22 2021 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
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 ...
但本地测试出现sql*loader 704错误,不知道怎么解决,也找不到其他资源,最后去找安装了完整版的同事,借鉴这个下载链接里面的文件,删除了其他没用到的东西(经历了好几个小时,一个一个dll测试过去),最后sqlplus, ...
最最主要的还是sqlldr,想找个单独可用的sqlldr,在Oracle 10g Client 精简优化安装包不到12M http://download.csdn.net/download/mysky2008/4382509 下载了10g的,但本地测试出现sql*loader 704错误,不知道怎么...