SQL Load总结

本文介绍了Oracle的SQL Load工具,用于大批量数据导入。详细讲述了传统加载与直接加载的区别,如直接加载速度快但有限制,如表无锁、禁用约束等。还涉及数据文件、控制文件和日志文件的结构,以及如何执行SQL Load命令。文中提供生成测试数据文件、控制文件的代码示例,以及执行命令的讲解。
摘要由CSDN通过智能技术生成

公司需要将大量数据入库,原本使用mybatis insert数据,但是效率十分低,所以考虑kafka,备用方案sql load。
我是调查sql load方案的,虽然最后没有选择这个方案,但是在这过程中也学习到了很多,在这里总结一下。
我在网上搜到的信息都是类似的,看起来就出自2篇博客,都是入门,对实际操作的帮助不太大。
我这篇包括2个部分,前期调查的概念部分,后期实现的代码部分
参考书:《Oracle Database 11G 数据库管理艺术》
上思维导图
在这里插入图片描述

调查

功能

Sql Load是Oracle的数据加载工具,通常用于导入大批量的外部数据。

传统加载和直接加载

SQL Load分为传统加载和直接加载

传统加载:在原理上同insert相同,但是每次提交一组记录,从而提高效率
直接加载:利用数据构造列数组结构,用这些结构来格式化Oracle数据块,然后直接写入数据库表。

传统加载和直接加载的特点和区别都在思维导图里面了,精简的总结一下有这几条

  1. 直接加载要比传统加载要快,因为不涉及到insert;
  2. 同传统加载不同,直接加载只会产生少量的日志,这一点在dos执行sqlldr时就有体现,传统加载刷出很多信息
  3. 直接加载有一定局限性,比较明显的局限就是,
    (1). 在执行直接加载时需要保证该表没有锁;
    (2). 加载过程中不能修改表结构;
    (3). 插入数据时不应用表约束和触发器,将自动禁用所有外部键检查和检查约束,但仍保留非空、唯一和主键约束。(若指定了REENABLE子句,则随着sql load的完成,将自动启用被禁用的约束,否则需要手动开启约束)
    (4)若主键重复,会使主键失效,若导入时需要保留主键,建议使用传统装载,或装载前取消主键,删除索引,装载后重建
  4. 不能使用直接加载的场景(我自己都没遇到,也不太明白这些是啥):
    (1). 使用群表
    (2). 同时装载父表和子表,嵌套表
    (3). 装载VARRAY,BFILE列,对象列
    (4). 正在使用ORACLE NET装载
    (5). 需要使用sql函数,如果装载大量数据同时需要使用sql函数,则推荐使用外部表或表函数

结构:一般包含4种文件
5. 数据文件:dat、csv、txt --包含待导入的数据,每行映射到数据库中一条记录,包含若干字段值,可包含分隔符便于导入时切割数据
6. 控制文件:ctl --sql load命令
7. 日志文件:log --导入时的日志文件,显示多少正确被导入,多少出问题了没被导入,没导入的数据存到哪个文件里了
8. 问题数据文件:bad --导入时出问题的数据被保存到了这个文件

数据文件

我只试了txt类型的数据文件,我写的生成测试文件的代码能生成的文件的形式如下,以“|”分隔数据,因为数据的长度不固定,所以使用的是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值