- 浏览: 183089 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 697Oracle 10g数据库中,当在数据库中创建用户时,基于 ... -
查询是否有重复
2014-06-15 10:20 576select t.id, count(t.id) as n ... -
查询oracle表的信息(表,字段,约束,索引)
2014-05-12 15:41 811查询oracle表的信息(表,字段,约束,索引)1、查询出所有 ... -
oracle
2014-03-18 09:33 5301、 Broken()过程更新一个已提交的工作的状态,典型地是 ... -
oracle ORA-01033错误的解决方案
2014-02-23 22:09 801oracle ORA-01033错误的解决方 ... -
Oracle ORA-01555 快照过旧 说明 .
2012-09-19 10:37 1180http://blog.csdn.net/tianlesoft ... -
Oracle 绑定变量
2012-09-18 17:58 762oracle 中,对于一个提交的sql语句,存在两种可选的解析 ... -
Oracle ADDM 自动诊断监视工具 介绍
2012-09-18 17:28 3549Oracle AWR 介绍(AWR -- Automatic ... -
Oracle undo 表空间管理 .
2012-09-18 14:47 10352Oracle 的Undo有两种方式: 一是使用undo 表空间 ... -
Oracle undo 管理
2012-09-18 11:14 1218在开始之前,我们先来 ... -
RedoLog Checkpoint 和 SCN关系
2012-09-17 11:04 2022一. Redo log ... -
ORA-24324:未初始化服务句柄,不允许此值,正在关闭 - 不允许连接
2012-09-17 10:02 1201ORA-24324:未初始化服 ... -
spool常用的设置
2012-09-11 15:57 1196spool常用的设置set colsep' '; //域 ... -
Oracle DUPLICATE复制数据库
2012-09-08 13:05 1185一、DUPLICATE复制数据库1.使用duplicate命令 ... -
rman各种故障背景下的恢复方法
2012-08-07 18:11 962各种故障背景下的恢复方法 丢失或损 ... -
RMAN-03009: backup 命令 (ORA_DISK_1 通道上, (
2012-08-06 15:44 13296RMAN-03009: backu RMAN> b ... -
RMAN部分命令
2012-08-03 17:26 9091、切换服务器归档模式,如果已经是归档模式可跳过此步:%sql ... -
Oracle SQL性能优化
2012-07-20 16:03 681(1) 选择最有效率的表名顺序(只在基于规则的优化器 ... -
Oracle Undo的学习
2012-07-20 13:36 778回滚段可以说是用来保持数据变化前映象而提供一致读和保障事务完 ... -
impdp中remap_datafile的测试
2012-07-17 17:56 5688remap_datafile目前我的理解是一定是用在全库导出和 ...
相关推荐
在本篇中,我们将深入探讨Oracle的数据导入导出及Sql Loader的使用方法。 1. **Oracle数据导入导出** Oracle提供了多种数据导入导出工具,包括`expdp`(Export Data Pump)和`impdp`(Import Data Pump)以及传统的...
本文旨在通过实例深入探讨SQL Loader的使用方法,帮助读者快速上手。 #### SQL Loader简介 在不同的操作系统环境下,SQL Loader有不同的调用方式。在Windows系统下,其命令为`SQLLDR`;而在UNIX系统下,则通常为`...
在使用SQL*Loader进行数据加载时,我们可能会遇到多种错误情况。SQL*Loader是一个Oracle数据库提供的工具,用于高效地从平面文件批量导入数据。以下是一些常见错误的总结及其解决方案: 1. **编码错误导致的乱码...
在本文中,我们将深入探讨SQL Loader的工作原理、基本用法以及如何使用它来加载数据,特别是在处理`pet_photo.csv`和`pet_photo.ctl`这样的数据文件时。 1. **SQL Loader简介** SQL Loader是Oracle提供的实用程序...
##### 基本使用方法 通过命令行调用SQL Loader时,需要指定一系列的关键字参数来控制加载过程。下面列举了一些常用的关键字及其作用: - **userid**:指定Oracle数据库的用户名和密码,格式为`username/password`。...
控制文件的语法复杂,具体使用方法需参考《Oracle服务器工具手册》。 ##### 2. 输入数据格式 SQL*Loader能够处理多种格式的数据文件,包括磁盘或磁带上的文件,甚至记录可以直接嵌入控制文件中。支持固定长度记录...
### SQL_LOADER教程详解 #### 一、SQL*LOADER简介 SQL*LOADER是Oracle提供的一款高效的数据加载工具,主要用于将操作...通过本教程的学习,希望读者能够快速掌握SQL*LOADER的使用方法,并能够熟练应用于实际工作中。
下面,我们将深入探讨SQL*Loader的工作原理、使用方法以及如何通过编写Java程序来调用SQL*Loader进行数据导入。 首先,SQL*Loader(也称为SQL Loader)是Oracle数据库的配套工具,用于将数据从平面文件快速加载到表...
使用 SQLloader 导入数据是一个非常方便和快速的方法, especialmente 对于大数据量的导入。使用 SQLloader 可以快速批量上传数据到 Oracle 表中,不需要使用第三方工具,直接使用 Oracle 自带的程序。
SQL*LOADER是oracle的数据加载工具,在NT下sql*loader的命令为SQLLDR,在UNIX下一般为SQLLDR/SQLLOAD。通常用来将操作系统文件迁移到oracle数据库中。它是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径...
总结来说,通过Windows下的BAT命令与Oracle的SQL*Loader功能结合,我们可以构建一个高效的数据库导入流程,尤其在处理大量数据时,这种自动化方法能够显著提高工作效率。在实际应用中,要根据具体需求灵活调整和优化...
这一点通过关键词的罗列也可以体现,如“Oracle数据库”、“SQLLoader”、“数据加载”、“情报处理”等。 综上所述,SQL Loader作为一种高效的数据装载工具,在大数据环境下对Oracle数据库的数据装载有着重要的...
在使用SQL*Loader工具导入数据时,可能会遇到超出字符长度限制的错误。这类问题通常出现在需要将包含较长字符串的数据加载到表中时,而目标列定义的长度不足以容纳实际数据的情况。本文将围绕SQL*Loader字符长度错误...
Oracle数据库使用SQL_Loader导入外部数据的方法详解,详细讲解 sqlldr的使用
### SQL*Loader 指南:语法...以上介绍了SQL*Loader的基本用法及控制文件的编写方法,通过合理配置控制文件,可以实现高效的数据导入。同时,SQL*Loader还提供了丰富的数据转换功能,使得数据加载过程更加灵活和可控。
这个“SQL_LOADER例子”提供了一个实际操作的示例,可以帮助我们更深入地理解SQL*Loader的工作原理和使用方法。 首先,SQL*Loader通过控制文件(.ctl文件)来定义数据加载的过程。控制文件包含了一系列指令,如表名...
这意味着如果目标应用服务器上未安装Oracle客户端(自10g版本起,只需安装服务器端或客户端即可),则无法正常使用SQLLoader的功能。 #### 三、SQLLoader命令格式与参数 SQLLoader的基本命令格式为: ``` SQLLDR ...
#### 三、SQL*Loader 的基本使用方法 1. **使用命令行调用 SQL*Loader** ```bash sqlldr 用户名/密码 control=控制文件路径 ``` 2. **控制文件示例** 下面是一个简单的控制文件示例,用于从 CSV 文件中加载...