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/dbname | userid=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_only | sqlldr并不执行加载,而是生成创建外部表的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)- 字段列表
相关文章:
Oracle工具之SQLLDR
1. 什么是SQLLDR SQLLDR是Oracle服务端自带的工具,用于快速导入大批量数据。 2. 常规路径加载/直接路径加载 sqlldr导入有两种模式,常规路径加载和直接路径加载,默认使用常规路径加载,当directy或者directtrue时,使用…...
探索pytest:Python自动化测试的新境界
在当今的软件开发领域,测试已经不仅仅是一个简单的步骤,而是确保软件质量的核心环节。Python,作为全球最受欢迎的编程语言之一,拥有丰富的测试框架和工具。而在这其中,pytest无疑是最受欢迎和最具影响力的一个。本文将…...
K8s学习笔记4
场景: 项目研发部门最近要进行应用运行基础环境迁移,需要由原先的虚拟机环境迁移到K8s集群环境中,以便应对开发快速部署和快速测试的需要,因此,需要准备一套可以用于开发需求的K8s集群,但是对于仅有容器基…...
Kafka 学习笔记
😀😀😀创作不易,各位看官点赞收藏. 文章目录 Kafka 学习笔记1、消息队列 MQ2、Kafka 下载安装2.1、Zookeeper 方式启动2.2、KRaft 协议启动2.3、Kafka 集群搭建 3、Kafka 之生产者3.1、Java 生产者 API3.2、Kafka 生产者生产分区3…...
vue实现表格的动态高度
需求:表格能够根据窗口的大小自动适配页面高度 防抖和节流函数的使用场景是当需要对频繁触发的事件进行限制时,例如: 防抖函数常用于限制用户在短时间内多次触发某一事件,例如搜索框输入并搜索,当用户一直在输入时,我们可以使用防抖函数来避免多次请求搜索结果,减轻服…...
HodlSoftware-免费在线PDF工具箱 加解密PDF 集成隐私保护功能
HodlSoftware是什么 HodlSoftware是一款免费在线PDF工具箱,集合编辑 PDF 的简单功能,可以对PDF进行加解密、优化压缩PDF、PDF 合并、PDF旋转、PDF页面移除和分割PDF等操作,而且工具集成隐私保护功能,文件只在浏览器本地完成&…...
09 数据库开发-MySQL
文章目录 1 数据库概述2 MySQL概述2.1 MySQL安装2.1.1 解压&添加环境变量2.1.2 初始化MySQL2.1.3 注册MySQL服务2.1.4 启动MySQL服务2.1.5 修改默认账户密码2.1.6 登录MySQL 2.2 卸载MySQL2.3 连接服务器上部署的数据库2.4 数据模型2.5 SQL简介2.5.1 SQL通用语法2.3.2 分类…...
QT通过ODBC连接GBase 8s数据库(Windows)示例
示例环境: 操作系统:Windows 10 64位数据库及CSDK版本:GBase 8s V8.8_3.0.0_1 64位QT:5.12.0 64位 1,CSDK安装及ODBC配置 1.1,免安装版CSDK 下载免安装版的CSDK驱动,地址:https:…...
Java-三个算法冒泡-选择排序,二分查找
Java算法: 冒泡排序; 解析:将前后两个数对比,将大的数(或小的)调换至后面,每轮将对比过程中的最大(或最小)数,调到最后面。每轮对比数减一;初始对比数为数组…...
docker版jxTMS使用指南:使用jxTMS提供数据
本文讲解了如何jxTMS的数据访问框架,整个系列的文章请查看:docker版jxTMS使用指南:4.4版升级内容 docker版本的使用,请查看:docker版jxTMS使用指南 4.0版jxTMS的说明,请查看:4.0版升级内容 4…...
阿里 MySQL 规范
阿里 MySQL 规范 1. 建库建表规范 【推荐】库名与应用/服务名称尽量一致。 【强制】表名不使用复数名词。 说明:表名应该仅仅表示表里面的实体内容,不应该表示实体数量,对应于DO类名也是单数形式,符合表达习惯。 【推荐】表的…...
C++ Primer阅读笔记--动态内存和智能指针
目录 1--动态内存管理 2--shared_ptr类 2-1--make_shared 函数 2-2--引用计数 2-3--get 3--new和delete 4--shared_ptr和new结合使用 5--unique_ptr 6--weak_ptr 1--动态内存管理 new:在动态内存中为对象分配空间并返回一个指向该对象的指…...
git分支管理策略
git的基础操作以及常用命令在上篇博客哦~ git原理与基本使用 1.分支管理 1.主分支 在版本回退⾥,我们已经知道,每次提交,Git都把它们串成⼀条时间线,这条时间线就可以理解为是⼀个分⽀。截⽌到⽬前,只有⼀条时间线&…...
IntelliJ IDEA maven配置,设置pom.xml的配置文件
IntelliJ IDEA项目,选择 文件 设置,弹窗 构建、执行、部署 构建工具 Maven就可以 maven配置好以后,在pom.xml的配置文件中就可以设置对应的jar包了,这样构建的时候自动需要的jar,在项目中导入即 settings.xml文件apa…...
C#__使用Thread启动线程和传输数据
class Program{static void Test(){Console.WriteLine("Start……");Thread.Sleep(2000); // 1s等于1000ms,暂停2sConsole.WriteLine("end");}static void Download(Object ob){string str ob as string; // 遍历传递过来的ob字符串Console.Wr…...
appium2.0+ 单点触控和多点触控新的解决方案
在 appium2.0 之前,在移动端设备上的触屏操作,单手指触屏和多手指触屏分别是由 TouchAction 类,Multiaction 类实现的。 在 appium2.0 之后,这 2 个方法将会被舍弃。 "[Deprecated] TouchAction action is deprecated. Ple…...
记录一次Modbus通信的置位错误
老套路,一图胜千言,框图可能有点随意,后面我会解释 先描述下背景,在Modbus线程内有一个死循环,一直在读8个线圈的状态,该线程内读到的消息会直接发送给UI线程,UI线程会解析Modbus数据帧…...
数据结构--递归与分治
汉诺塔分析: 以三层进行分析,大于三层分析情况是一样的。 #include <stdio.h>void move(int n,char x,char y,char z) {if(1 n){printf("%c---------->%c\n",x,z);}else{move(n-1,x,z,y);//将第n-1个盘子从x借助z移动到y printf(&q…...
spring cloud gateway中出现503
spring cloud gateway中出现503 当搭建网关模块的时候出现503的错误的最大的可能就是没有设置负载均衡的依赖包 原先搭建的时候采用的是下面的方式进行设置的 gateway:discovery:locator:enabled: true #可以从nacos进行服务的发现 上面的这种方式可以直接进行注册和发现&…...
战略在集体学习过程中涌现
战略学习派:战略是涌现的学习过程,中国人的话,要交学习费!【安志强趣讲269期】 趣讲大白话:出来混总要交学费 **************************** 中国人有这个意识 新进一个领域,要交学费,有学习过程…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
