Oracle工具之SQLLDR

这篇具有很好参考价值的文章主要介绍了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

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

语法格式:

--关闭归档日志,提高导入速度(仅直接路径时有效)
--unrecoverable

LOAD 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)- 字段列表文章来源地址https://www.toymoban.com/news/detail-673316.html

到了这里,关于Oracle工具之SQLLDR的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Oracle】使用 SQL Developer 连接 Oracle 数据库

    SQL Developer 是 Oracle 官方推出的一款免费的数据库开发工具,它提供了丰富的数据库开发功能,其中包括连接 Oracle 数据库的功能。 在本文中,我们将从多个方面详细阐述如何使用 SQL Developer 连接 Oracle 数据库。 在连接 Oracle 数据库前,需要需要做一些准备工作,包括安装 SQ

    2024年02月06日
    浏览(55)
  • Oracle数据库

    ①层次型数据库 ②网状型数据库 ③关系型数据库(主要介绍) E-R图:属性(椭圆形),实体(矩形),联系(菱形-一对一、一对多、多对多) 注:有的联系也有属性 关系型数据库的设计范式: 第一范式(1NF):属性不可再分,字段保证原子性 第二范式(2NF):在满足1

    2024年02月08日
    浏览(48)
  • Oracle 开发篇+Java通过HiKariCP访问Oracle数据库

    标签:HikariCP、数据库连接池、JDBC连接池、 释义:HikariCP 是一个高性能的 JDBC 连接池组件,号称性能最好的后起之秀,是一个基于BoneCP做了不少的改进和优化的高性能JDBC连接池。 ★ Java代码 ※ 如果您觉得文章写的还不错, 别忘了在文末给作者点个赞哦 ~

    2024年02月13日
    浏览(43)
  • 数据库(二) Oracle篇

    概述 SQL函数有单行函数和多行函数,其区别为: 单行:输入一行,返回一行,如字符、数字、转换、通用函数等 多行:输入多行,返回一行,也称为分组函数、组函数、聚合函数, 且多行函数会自动滤空 字符函数 CONCAT( X,Y): 连接字符串X和Y INSTR(X,STR) : 后面STR在前面字符串X第一次

    2024年02月10日
    浏览(42)
  • Oracle大型数据库技术

    sqlplus 记录实验过程的方法: 开启相关服务 oracleserviceORCL 控制面板–管理–服务–找到后开启 命令行方法: cmd–net start|stop oracleserviceorcl 常用操作 显示当前用户名 常用的用户名和口令 :dba用户,默认口令:change_on_install,Oraclell,必须以sysdba或者sysoper身份登录 system: 普通管

    2024年02月19日
    浏览(38)
  • ORACLE数据库 开窗函数

    开窗函数 2.1开窗函数的定义及语法 开窗函数(又名:分析函数,窗口函数,OLAP函数) 聚合函数:将数据按照一定的规则分组,统一分析各组的某项情况,每个分组返回一行结果 开窗函数:将数据按照一定的规则分组,统一分析各组的某项情况,每行数据返回一行结果 (

    2024年02月11日
    浏览(36)
  • oracle数据库巡检脚本

    用于Oracle数据库巡检的示例脚本: 

    2024年02月14日
    浏览(50)
  • 快速监控 Oracle 数据库

    Oracle 数据库在行业内应用广泛,通常存放的非常重要的数据,监控是必不可少的,本文使用 Cprobe 采集 Oracle 监控数据,极致简单,分享给大家。 安装配置 Oracle 简单起见,我使用 Docker 启动 Oracle,命令如下: 如上命令启动之后,Oracle 的监听端口是 1521,用户名/密码是 syst

    2024年01月20日
    浏览(39)
  • Oracle数据库概念简介

    一般意义上的数据库包含两个部分 库:就是一个存储一堆文件的文件目录 数据库管理系统:管理库的系统 数据库管理系统(Database Management System),是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称 DBMS ; 它对数据库进行统一的管理和控制,以保证数

    2024年02月09日
    浏览(37)
  • Oracle数据库完整卸载

    进入计算机管理,在服务中,找到oracle开头的所有服务,右击选择停止。 快捷键:ctrl+shift+esc打开任务管理器 点击开始菜单找到Oracle,然后点击Oracle安装产品,再点击Universal Installer。 点击之后稍等一会然后会进入进入下图界面,点击卸载产品。 单击“卸载产品”,选中除“Or

    2024年01月16日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包