前言

在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法:

  1. A表记录利用toad或者pl/sql工具将其导出为一条条分号隔开的insert语句,然后再执行插入到B表中
  2. 建立数据库间的dblink,然后使用 create table B as select * from A@dblink where…,或者insert into B select * from A@dblink where…
  3. exp/expdp A表,再imp/impdp到B表
  4. 那么除了上面的三种常用的方法,还有其他比较好的方法进行数据迁移吗,下面介绍oracle自带的Sql Loader(sqlldr)的用法。

sqlloader简介

sqlloaderOracle用于数据迁移、将数据从外部文件加载到Oracle数据库的表中,它具有强大的数据解析引擎,对数据文件中数据的格式几乎没有限制。

基本的组成由:

*.ctl:控制文件,与表信息相关,数据入表的逻辑处理(数据加载信息,解析数据,导入数据信息)

*.bad :执行bat后自动生成,错误日志,保存导入文件出现错误的记录

*.log :执行bat后自动生成,日志文件,可以查看导入的情况

*.dis:废弃文件

常用的参数命令:

  • userid – ORACLE 用户名/口令
  • control – 控制文件名,默认 格式 *.ctl
  • log – 记录导入时的日志文件,默认为 控制文件(去除扩展名).log
  • bad – 坏数据文件,默认为 控制文件(去除扩展名).bad
  • data – 数据文件,一般在控制文件中指定。用参数控制文件中不指定数据文件更适于自动操作
  • discard – 废弃文件名
  • discardmax – 允许废弃的文件的数目
  • skip – 要跳过的逻辑记录的数目 (默认 0)
  • load – 要加载的逻辑记录的数目 (全部默认)
  • rows – 对于传统常规路径(Conventional Path)导入的情况,代表一次提交(Commit)的行数(默认:6 最大值:65534)
  • bindsize – 每次提交记录的缓冲区的最大值(仅适用于传统常规路径加载),默认256000 Bytes
  • readsize – 读取缓冲区的大小 (适用于传统常规路径和直接路径加载),默认 1048576。
  • errors – 允许的错误记录数,可以用他来控制一条记录都不能错 (默认 50)
  • silent – 运行过程中隐藏消息 (标题,反馈,错误,废弃,分区)
  • direct – 使用直接路径 (默认 FALSE)
  • parfile – 参数文件: 包含参数说明的文件的名称
  • parallel – 执行并行加载 (默认 FALSE)
  • file – 要从以下对象中分配区的文件

ROWS

对于传统常规路径(Conventional Path)导入的情况,代表一次提交(Commit)的行数(默认:6 最大值:65534)

BINDSIZE

通过配置BINDSIZE的值,加快加载导入效率,而且配置的值要比默认值和通过参数ROWS计算的缓冲区大小更优先。
即BINDSIZE能够制约ROWS,如果ROWS提交的数据需要的缓冲区大于BINDSIZE的配置值,会以BINDSIZE的设定为准

※在设定参数时,一定要同时考虑ROWS和BINDSIZE的设定。

READSIZE
读取缓冲区的大小 (适用于传统常规路径和直接路径加载),默认 1048576。

READSIZE负责读取的缓冲区大小,而BINDSIZE负责提交的缓冲区大小,如果READSIZE小于BINDSIZE,那么READSIZE会自动增加。

通过设置READSIZE为更大的值,可以在提交前读取更多的数据到Buffer中去

sqlloader安装

  1. 下载并解压软件

地址:https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html

下载包:

  • sqlloader所需的基础包:instantclient-basic-windows.x64-19.6.0.0.0dbru.zip
  • sqlloader工具包: instantclient-tools-windows.x64-19.6.0.0.0dbru.zip

NOTE:直接下载oracle client客户端即可

使用方式

使用一个控制文件(*.ctl) 和一个数据文件(*.csv),步骤如下:

  • 首先在数据库中创建好需要导入数据的表;
  • 创建数据文件,*.csv 文件等类型的文件;
  • 创建控制文件 *.ctl,数据入表的逻辑处理。
  • 执行sqload命令加载导入数据

1). 首先在数据库中创建好需要导入数据的表

create table user_info (
userid int,

username varchar2(50),

address varchar2(500),

sex varchar2(2),

phone_number varchar2(13)

email varchar2(50),

certificate_no VARCHAR2(20)

)

2). 建立数据文件, users_data.csv 文件

01412401,李四,广东深圳龙华,M,13444455568,WJ@email.com,310101198504069999
01412402,张三,广东深圳龙华,M,13444455567,HH@email.com,310101198504069998
01412403,王二,广东深圳福田,M,13444455566,WJ@email.com,310101198504069997
01412404,李达,广东深圳南山,M,13444455565,HH@email.com,310101198504069996

3). 建立一个控制文件 users_load_data.ctl

OPTIONS (skip=1,rows=128) -- sqlldr 命令显示的 选项可以写到这里边来,skip=1 用来跳过数据中的第一行 ,rows=128 代表每128行数--据提交一次
LOAD DATA
INFILE "/home/oracle/script/users_data.csv" --指定外部数据文件,可以写多 个 INFILE "another_data_file.csv" 指定多个数据文件
--这里还可以使 用 BADFILE、DISCARDFILE 来指定坏数据和丢弃数据的文件,
--truncate --操作类型,用 truncate table 来清除表中原有 记录
append INTO TABLE test_users -- 要插入记录的表,这里插入到另外一张表里
Fields terminated by "," -- 数据中每行记录用 "," 分隔
Optionally enclosed by '"' -- 数据中每个字段用 '"' 框起,比如字段中有 "," 分隔符时
trailing nullcols --表的字段没有对应的值时允 许为空
(  virtual_column FILLER, --这是一个虚拟字段,用来跳 过由 PL/SQL Developer 生成的第一列序号  userid,  username,  address ,  phone_number,email  ,certificate_no
)

在操作类型 truncate 位置可用以下中的一值:

  • insert :为缺省方式,在数据装载开始时要求表为空
  • append:在表中追加新记录
  • replace:删除旧记录(用 delete from table 语句),替换成新装载的记录
  • truncate :删除旧记录(用 truncate table 语句),替换成新装载的记录

时间类型转换

字段 DATE “YYYY-MM-DD HH24:MI:SS” – 指定接受日期的格式,相当用 to_date() 函数转换

4).执行命令

普通版:

在安装好sqlload命令目录中打开CMD命令,

然后再命令行窗口执行:

sqlldr userid=username/password@ip:port/dbName control=d:\users_load_data.ctl log=d:\userload.log

普通导入速度比较慢,一秒才几条,这样导入跟一条条插入数据差不多,因此应该善用其参数,加快加载导入数据

升级版:

将命令行改成这样:

sqlldr userid=username/password@ip:port/dbName control=d:\users_load_data.ctl log=d:\userload.log errors=100000 bindsize=8000000 rows=5000

这样可以配置可以在一秒1万条左右,加快导入速度,节省了很多时间。

NOTE:

当加载海量数据时(大约超过10GB),最好禁止日志的产生,这样不产生REDO LOG,可以提高效率,在 CONTROL 文件中 load data 上面加一行:unrecoverable, 此选项必须要与DIRECT共同应用.

对于超大数据文件的导入就要用并发操作了,即同时运行多个导入任务.parallel=true

各位看官还可以吗?喜欢的话,动动手指点个

如何快速批量导入非Oracle DB格式的数据--sqlloader相关推荐

  1. 批量导入时间oracle excel,读取Excel数据、批量导入到Oracle数据库

    /** * @Description: 得到Excel文档,把文档中的数据批量导入到数据库中 * 1.找到上传的数据,2.把数据放到List集合中,3.把List集合中的数据更新到数据库 * @ret ...

  2. Oracle10表数据编辑器,Oracle ORACLE 快速批量导入文本数据到数据库(sqlldr工具)方法与分析 (Windows CMD 方式)...

    Oracle ORACLE 快速批量导入文本数据到数据库(sqlldr工具)方法与分析 (Windows CMD 方式) 在实际生产环境中,常会碰到将一些如通过通讯接口传过来的数据(文本文件 txt) ...

  3. Oracle快速批量导入数据

    Oracle快速批量导入数据 要求是从SQLServer中读取数据然后存储到Oracle中,使用了Oracle的类库:Imports Oracle.ManagedDataAccess.dll 前期扒了 ...

  4. CATIA通过excel文件快速批量导入材料库

    CATIA通过excel文件快速批量导入材料库 在excel中编辑材料库,并保存,如图所示: 将MATLAB代码中的inputFilename改为材料库对应的文件名,运行代码(excel文件需要和MA ...

  5. java shell spool_批量快速的导入导出Oracle的数据(spool缓冲池、java实现)

    1. Java代码实现思路 BufferedWriter writefile = new BufferedWriter(new FileWriter(file)); writefile.write(& ...

  6. 快速批量导入庞大数据到SQL SERVER数据库(ADO.NET)

    原文地址:http://www.cnblogs.com/chenxizhang/archive/2008/11/11/1331060.html 如果你需要在程序中批量插入成千上万行的数据,你会怎么编写 ...

  7. oracle批量粘贴文本,ORACLE 快速批量导入文本数据到数据库(sqlldr工具)方法与分析...

    在实际生产环境中,常会碰到将一些如通过通讯接口传过来的数据(文本文件 txt)导入到数据库的某张表中.通常做法是使用ORACLE自带的包功能打开文件,将文件中的数据用LOOP循环一行行读入内存数组中, ...

  8. ideal如何快速导入import_【MAC版】pr预设安装目录?pr如何快速批量导入lut

    之前看过不少pr导入lut的视频教程,但这些教程基本都是以windows平台做演示,由于我的机器是mac系统,所以一直不知道怎么找到pr的安装目录,这期做这期内容送给和我有同样困惑的mac小伙伴. 首 ...

  9. Excel——快速批量统一边框和字体格式

    方法一:选中要调整的范围,在工具栏中设置字体和边框 方法二:选中想要的格式的一行,双击格式刷,刷需要统一格式的位置 方法三:在想要的格式的一行选中右下角,按住ctrl键,下拉至需要统一格式的位置,在填 ...

最新文章

  1. mysql的时间存储格式
  2. 汇编语言 字符串的复制
  3. 批量关闭电脑有害端口方法
  4. boost::describe模块实现==重载的测试程序
  5. 在线普通话转粤语发音_最快的学说粤语的办法:粤语拼音
  6. 树莓派AI视觉云台——7、树莓派系统备份
  7. 如果给你一个亿,你想去干嘛?各专业的科研狗是这样回答的……
  8. android box2d小程序
  9. DJango — URL的Reverse和Resolve
  10. 2018 推荐系统总结
  11. 2021第四届全国大学生IT技能大赛“传智杯”AK
  12. 【JY】No.7.2力学架构迈达斯使用教程
  13. 【msm8953】gpio口模拟pwm详细步骤
  14. Qzone 超级补丁热修复方案原理
  15. Excel实用教程-IF函数怎么用
  16. Java Thread 知识点总结
  17. 汉字转拼音 关于佛字转成了fu
  18. 一日一Shader·进阶版笔刷【SS_18】
  19. 激扬巾帼风采,谱写美丽人生
  20. [图文教程]BIOS设置教程

热门文章

  1. 小结 hasOwnProperty()
  2. 关于电工产品的执行标准与认证
  3. 服务器推送技术之——SSE
  4. 【小程序】微信小程序自定义组件Component详细总结
  5. mysql-bin什么文件_mysql-bin是什么文件?
  6. 从MES到MOM,抓住中国工业软件的机遇
  7. gre阅读passage31-70
  8. html文本框的各种用法,HTML文本框5种应用方式实现方法
  9. Android融云自定义表情
  10. 【ceph】什么是NFS-Ganesha和fuse