Oracle工具之SQLLDR

1. 什么是SQLLDR

SQLLDR是Oracle服务端自带的工具,用于快速导入大批量数据。


2. 常规路径加载/直接路径加载

sqlldr导入有两种模式,常规路径加载和直接路径加载,默认使用常规路径加载,当direct=y或者direct=true时,使用直接路径加载。直接路径加载比常规路径拥有更高的效率,但也有诸多限制。

  • 常规路径加载
    • 数据经过buffer cache,使用SQL处理数据,COMMIT提交操作,一次加载可能会涉及到多个事务处理,会产生大量undo数据(回滚数据)
    • 通过undo回滚
    • 触发INSERT 触发器
    • 操作过程中表仍可被并发访问
  • 直接路径加载
    • 数据不经过buffer cache,从PGA直接把数据格式化成Oracle块,再写入数据文件,几乎不会产生undo数据。但是如果表上有索引,会产生索引的undo数据,而且索引的块会被读进buffer cache,这将会花费大量时间在索引的维护上。因此,在向表中传送大量数据时,建议先将表上的索引设置为unusable(或者使用skip_index_maintenance=true),待插入结束后,再rebuild索引 (alter index index_name rebuild nologging)
    • 数据不会写入HWM(高水位线)以下的数据块,而是在HWM之后写入,通过HWM回滚
    • 触发器在进行直接路径加载之前已禁用,在加载结束时会重新启用,如果重新启用时不能访问某个被引用对象,这些触发器可能会保持为禁用状态
    • 操作过程中对应的表会将会被锁定,所有在这张表上的CRUD操作将会被禁止,不能并发访问

3. SQLLDR的常用参数说明

属性值含义默认值或例子
userid连接数据库的信息username/password@ip:prot/dbnameuserid=UntifA/UntifA@192.168.101.88:1521/oracledb
control控制文件:控制导入细节的文件control=control_name.txt
parfile参数文件:包含参数细节的文件parfile=parfile_name.txt
log日志文件默认与控制文件同名.log或者自己指定log=log_name.log
bad坏数据文件默认与控制文件同名.bad或者自己指定bad=bad_name.bad
discard丢弃的数据文件
discardmax允许丢弃数据的最大值全部
skip跳过的行/记录数默认值为0 ,如果前5行为表头,则可以指定跳过表头所占的行数skip=5
load加载的记录数默认值为全部
errors允许的错误记录数
direct导入模式默认为false:常规路径加载
true:直接路径加载
rows每次提交的记录数常规路径:64
直接路径:全部
parallel并行导入,仅在直接路径加载时有效,推荐设置true默认值为false
file并行加载时会用到该参数,指定file参数,要加载的内容即只向指定的数据文件写入数据,减少i/o
columnarrayrows指定直接路径加载时流缓冲区的行数5000
streamsize指定直接路径加载时流缓冲区的大小(字节)256000
multithreading指定直接路径加载时是否启用多线程
date_cache指定直接路径加载时日期转换用缓存大小(以条目为单位)1000
bindsize每次提交记录的缓冲区的大小(字节)256000
silent禁止输出信息(header,feedback,errors,discards,partitions)
skip_unusable_indexes不允许/允许不可用的索引或索引分区false
skip_index_maintenance不维护索引,将受影响的索引标记为不可用false
commit_discontinued停止加载时提交加载的行false
external_table使用外部表进行加载不使用
generate_onlysqlldr并不执行加载,而是生成创建外部表的sql和处理数据的sql,并保存在log文件中
execute执行外部表并加载数据
no_index_errors在任何索引错误上中止加载false

4. 控制文件control=control_name.txt

控制文件指定了数据源、编码格式、列的控制方式等一系列参数,我们只举例说明其中的常用内容。

语法格式:

--关闭归档日志,提高导入速度(仅直接路径时有效)
--unrecoverableLOAD DATA--导入字符集格式
CHARACTERSET 'UFT8'--1.指定要加载的数据文件
--INFILE 和INDDN是同义词,它们后面都是要加载的数据文件的绝对路径。如果用 * 则表示数据就在控制文件内。
--INFILE "/home/oracle/user/UntifA/load_file.txt"
[ { INFILE | INDDN } {file | * } ]      
--BADFILE和BADDN是同义词。file指定坏数据保存的文件
--BADFILE "/home/oracle/user/UntifA/load_file.bad"
[{ BADFILE | BADDN } file ]
--DISCARDFILE和DISCARDDN是同义词。file指定丢弃的数据文件
--DISCARDFILE "/home/oracle/user/UntifA/load_file.dis"
[{ DISCARDFILE | DISCARDDN } file ]--2.指定操作类型
--INSERT:默认值,装载空表,如果原先的表有数据,sqlloader会停止
--APPEND:原先的表有数据 就在表中追加新记录
--REPLACE:删除旧记录(用 delete from table 语句),替换成新装载的记录
--TRUNCATE:删除旧记录(用 truncate table 语句),替换成新装载的记录
[ APPEND | REPLACE | INSERT | TRUNCATE ]--3.指定操作的表
INTO TABLE [user.]table--4.指定过滤条件
--[when id = id_memo]--5.指定字段分隔符
--字段分隔符
FIELDS TERMINATED BY ','
--字段用什么字符包括起来
OPTIONALLY ENCLOSED BY '"'
--字段没有对应的值时允许为空
TRAILING NULLCOLS--6.指定表字段
--常见数据类型
--CHAR 字符
--DATE 日期
--INTEGER 整数
--FLOAT 普通符点
--DOUBLE 双精度符点
(
id,--类型未指定时,默认为character,每个字段的实际解析类型见log文件
code integer,
name char(1000),
sum double,
create_date date "yyyy-mm-dd hh24:mi:ss",
col_1 FILLER, --此列的值不会被装载
col_1 CONSTANT 'UntifA', --此列的值默认为常量UntifA
col_2 "substr(:col4,-3,3)", --取col4的后三位
col_3,
col_4,
clo_5 "to_date('20210202','YYYY-MM-DD')" --日期格式字段插入固定日期
)

例子1:

LOAD DATA
CHARACTERSET 'UFT8'
INFILE "/home/oracle/user/UntifA/load_file.txt"
BADFILE "/home/oracle/user/UntifA/load_file.bad"
DISCARDFILE "/home/oracle/user/UntifA/load_file.dis"
TRUNCATE
INTO TABLE test_01
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
id,--类型未指定时,默认为character,每个字段的实际解析类型见log文件
code integer,
name char(1000),
sum double,
create_date date "yyyy-mm-dd hh24:mi:ss",
col_1 FILLER, --此列的值不会被装载
col_1 CONSTANT 'UntifA', --此列的值默认为常量UntifA
col_2 "substr(:col4,-3,3)", --取col4的后三位
col_3,
col_4,
clo_5 "to_date('20210202','YYYY-MM-DD')" --日期格式字段插入固定日期
)

例子2:

OPTIONS (DIRECT=true,SKIP_INDEX_MAINTENANCE=true,PARALLEL=true)  
LOAD DATA  
INFILE 'nor.dat'  
BADFILE 'nor.bad'  
DISCARDFILE 'nor.dsc'  
INTO TABLE p95169.DISEASE_EXPERT_RELATION  
APPEND  
WHEN len='3'  
FIELDS TERMINATED BY WHITESPACE  
(  len FILLER POSITION(1) CHAR,  DISEASEEXPERTUUID EXPRESSION "SYS_GUID()",  EXPERTUUID CHAR,  DISEASEUUID CHAR,  DISEASESORTCODE EXPRESSION "NULL",  DISEASENAME CHAR,  CREATEDTIME EXPRESSION "TO_CHAR(sysdate,'yyyymmddhh24miss')",  MODIFIEDTIME EXPRESSION "TO_CHAR(sysdate,'yyyymmddhh24miss')"  
)  
INTO TABLE p95169.DISEASE_EXPERT_RELATION  
APPEND  
WHEN len='2'  
FIELDS TERMINATED BY WHITESPACE  
(  len FILLER POSITION(1) CHAR,  DISEASEEXPERTUUID EXPRESSION "SYS_GUID()",  EXPERTUUID CHAR,  DISEASEUUID EXPRESSION "NULL",  DISEASESORTCODE EXPRESSION "NULL",  DISEASENAME CHAR,  CREATEDTIME EXPRESSION "TO_CHAR(sysdate,'yyyymmddhh24miss')",  MODIFIEDTIME EXPRESSION "TO_CHAR(sysdate,'yyyymmddhh24miss')"  
)  
INTO TABLE p95169.DISEASE_EXPERT_RELATION  
APPEND  
WHEN len='1'  
FIELDS TERMINATED BY WHITESPACE  
(  len FILLER POSITION(1) CHAR,  DISEASEEXPERTUUID EXPRESSION "SYS_GUID()",  EXPERTUUID CHAR,  DISEASEUUID EXPRESSION "NULL",  DISEASESORTCODE EXPRESSION "NULL",  DISEASENAME EXPRESSION "NULL",  CREATEDTIME EXPRESSION "TO_CHAR(sysdate,'yyyymmddhh24miss')",  MODIFIEDTIME EXPRESSION "TO_CHAR(sysdate,'yyyymmddhh24miss')"  
)  

控制文件还有很多对表、对列的单独控制,如果有需求可以百度查找如何使用

参考帖子:
[Oracle] SQL*Loader 详细使用教程(1)- 总览
[Oracle] SQL*Loader 详细使用教程(2)- 命令行参数
[Oracle] SQL*Loader 详细使用教程(3)- 控制文件
[Oracle] SQL*Loader 详细使用教程(4)- 字段列表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/58236.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT初始学习中的个人基础认知

整体感觉 安装的时候感觉更像python的库安装和编译器版本的配合安装。进入创建工程时,感觉是c语言的创建工程的感觉,而且可以看到main和h的头文件,整体来看是C来编写的程序。完成整个工程个人感觉是C编写功能,使用VB实现界面设计…

java八股文面试[多线程]——两个线程交替打印1-100之间的数字

一份代码,两个线程,使用synchronize实现: 重写run()方法,将输出1到100之间整数的代码写到同步方法里。线程1进入到同步方法,输出一个整数后,阻塞并释放锁。线程2进入到同步方法,唤醒线程1&…

Python常用内置函数

Python 提供丰富了内置函数,这些函数的使用频率非常用,在编程过程中熟练使用内置函数可以大大减少我们的代码逻辑和代码量。 Python 解释器内置了很多函数和类型,任何时候都能使用。这些内置函数直接使用,是不需要导入库的。 内…

Java 体系性能优化工具

Java 体系性能优化 目录概述需求: 设计思路实现思路分析1.oom 异常来说:2.visualvm3.Arthas4.JProfiler (全面)5.jmeter 特有 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect…

Nodejs快速搭建简单的HTTP服务器,并发布公网远程访问

前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation(原为 Node.js Foundation,已与 JS Foundation 合并)持有和维护,亦为 Linux 基金会的项目。Node.js 采用 Google 开发…

PHP教学资源管理系统Dreamweaver开发mysql数据库web结构php编程计算机网页

一、源码特点 PHP 教学资源管理系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 源码 https://download.csdn.net/download/qq_41221322/88260480 论文 https://downl…

JVM介绍

一、介绍 1. JVM是什么 JVM是Java Virtual Machine的缩写,即咱们经常提到的Java虚拟机。虚拟机是一种抽象化的计算机,有着自己完善的硬件架构,如处理器、堆栈等,具体有什么咱们不做了解。目前我们只需要知道想要运行Java文件&…

Vue3 学习

基础 js:https://www.bilibili.com/video/BV15T411j7pJ/?spm_id_from333.337.search-card.all.click&vd_source9747207be61edfe4ec62226fc79b3589 官方文档: https://cn.vuejs.org/ 版本之间差异在关于---》版本发布 https://cn.vuejs.org/about/release…

【计算机网络】序列化与反序列化

文章目录 1. 如何处理结构化数据?序列化 与 反序列化 2. 实现网络版计算器1. Tcp 套接字的封装——sock.hpp创建套接字——Socket绑定——Bind将套接字设置为监听状态——Listen获取连接——Accept发起连接——Connect 2. 服务器的实现 ——TcpServer.hpp初始化启动…

Spark 7:Spark SQL 函数定义

SparkSQL 定义UDF函数 方式1语法: udf对象 sparksession.udf.register(参数1,参数2,参数3) 参数1:UDF名称,可用于SQL风格 参数2:被注册成UDF的方法名 参数3:声明UDF的返回值类型 ud…

专有网络VPC私网/公网类产品选择

私网类产品选择 VPC互连:云企业网,对等连接 VPC与本地IDC互连:VPN网关,高速通道,云企业网,智能接入网关 VPC与多站点连接:VPN网关,智能接入网关,VPN网关高速通道 远程接…

聊聊中南亚跨境电商的机遇与前景

随着工业转移,中南亚地区作为一个充满潜力的区域,正逐渐成为跨境电商领域的热点。这一地区包括印度、孟加拉国、巴基斯坦、斯里兰卡等国家,拥有庞大的人口、不断增长的中产阶级,以及逐步完善的数字基础设施,为跨境电商…

电子仓库预测水浸事件,他怎么做到的?

仓库环境中水浸事件可能导致严重的损失,不仅对货物造成损害,还可能影响设备的正常运行甚至威胁安全。 因此,为了应对这一挑战,引入一套完善的仓库水浸监控系统成为了不可或缺的措施。 客户案例 广东某电子公司是一家领先的电子设…

前端学习之轮播图

前端学习之轮播图 该案例涉及到定时器的使用&#xff0c;元素的活获取&#xff0c;函数的调用等知识的运用 显示图如下&#xff1a;可以点击图标跳转图片&#xff0c;也可以自动轮播 源码如下 <!DOCTYPE html> <html><head><meta charset"UTF-8&q…

C语言网络编程:实现自己的高性能网络框架

一般生产环境中最耗时的其实是业务逻辑处理。所以&#xff0c;是不是可以将处理业务逻辑的代码给拆出来丢到线程池中去执行。 比如像下面这样&#xff1a; ​我们事先创建好一堆worker线程&#xff0c;主线程accepter拿到一个连接上来的套接字&#xff0c;就从线程池中取出一个…

hive lateral view 实践记录(Array和Map数据类型)

目录 一、Array 1.建表并插入数据 2.lateral view explode 二、Map 1、建表并插入数据 2、lateral view explode() 3、查询数据 一、Array 1.建表并插入数据 正确插入数据&#xff1a; create table tmp.test_lateral_view_movie_230829(movie string,category array&…

[halcon] 局部图片保存 gen_circle 和 gen_rectangle2 对比 这怕不是bug吧

背景 我想实现一个功能&#xff0c;获取图片中瑕疵的位置&#xff0c;将瑕疵周边的一块区域抠图并保存。 上代码 一开始我代码这么写的&#xff1a; gen_circle (Rectangle, Row[i], Column[i], 256) reduce_domain(Image,Rectangle,GrayEllipse) crop_domain(GrayEllipse,…

购买服务器以及宝塔部署

1.买完服务器之后该做什么 服务器就是一个远程Linux。 1、在阿里云购买的&#xff0c;需要开通安全组设置&#xff1b;端口映射&#xff08;必须要在安全组映射&#xff09; 2.获取服务器的公网ip地址,修改实例名称和密码&#xff0c;第一次修改需要重启 成功连上 3.连接到服…

正则表达式简要笔记

昨天在给领导演示的时候发现需要替换文件&#xff0c;结果发现同事那机器上只有UltraEdit我还不太会用&#xff0c;淦&#xff0c;没找到正则替换的入口&#xff0c;结果不了了之。 后来回来在自己电脑上试了试&#xff0c;发现自己想的正则也不太对&#xff0c;索性现在总结一…

MR混合现实石油化工课堂情景实训教学演示

MR&#xff08;混合现实&#xff09;技术是一种结合了虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;优势的新型技术&#xff0c;在教育领域具有广阔的应用前景。在石油化工课堂中&#xff0c;MR混合现实情景实训教学的应用可以大大提高学生的学习效…