SQLLDR简介 和 Oracle插入大量数据
SQLLDR简介
一、简介
SQLLOADER是ORACLE的数据加载工具,通常用来将操作系统文件(数据)迁移到ORACLE数据库中。SQLLOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PARALLEL)。
二、参数
2.1 语法
用法: SQLLDR keyword=value [,keyword=value,...]
2.2 参数
| Keyword | 默认值 | 描述 |
|---|---|---|
| userid | ORACLE 用户名/口令 | |
| control | 控制文件名 | |
| log | 日志文件名 | |
| bad | 错误文件名 | |
| data | 数据文件名 | |
| discard | 废弃文件名 | |
| discardmax | 全部 | 允许废弃的文件的数目 |
| skip | 0 | 要跳过的逻辑记录的数目 |
| load | 全部 | 要加载的逻辑记录的数目 |
| errors | 50 | 允许的错误的数目 |
| rows | 常规路径 64, 所有直接路径 | 常规路径绑定数组中或直接路径保存数据间的行数 |
| bindsize | 256000 | 常规路径绑定数组的大小 (以字节计) |
| silent | 运行过程中隐藏消息 (标题,反馈,错误,废弃,分区) | |
| direct | FALSE | 使用直接路径 |
| parfile | FALSE | 执行并行加载 |
| file | 要从以下对象中分配区的文件 | |
| skip_unusable_indexes | FALSE | 不允许/允许使用无用的索引或索引分区 |
| skip_index_maintenance | FALSE | 没有维护索引, 将受到影响的索引标记为无用 |
| commit_discontinued | FALSE | 提交加载中断时已加载的行 |
| readsize | 1048576 | 读取缓冲区的大小 |
| external_table | NOT_USED | 使用外部表进行加载; NOT_USED, GENERATE_ONLY, EXECUTE |
| columnarrayrows | 5000 | 直接路径列数组的行数 |
| streamsize | 256000 | 直接路径流缓冲区的大小 (以字节计) |
| multithreading | 在直接路径中使用多线程 | |
| resumable | FALSE | 启用或禁用当前的可恢复会话 |
| resumable_name | 有助于标识可恢复语句的文本字符串 | |
| resumable_timeout | 7200 | RESUMABLE 的等待时间 (以秒计) |
| date_cache | 1000 | 日期转换高速缓存的大小 (以条目计) |
| no_index_errors | FALSE | 出现任何索引错误时中止加载 |
三、案例
以Oracle为例,导入20万条数据
3.1 在数据库中创建测试表
CREATE TABLE TEST001 (
"ID" NUMBER generated always as identity,
"NAME" VARCHAR2(255) NULL ,
"AGE" NUMBER NULL
)
NOCOMPRESS
;
3.2 数据格式(.txt)
格式如下:
小明,10
小红,12
小蓝,16
小绿,18
3.3 编写自动入库脚本.ctl
--编写 insert.ctl 文件
load data
characterset utf8 -- 表的储存格式
INFILE 'D:/sql/txbh.txt' -- 数据文本路径
Append into table TEST001 -- 表名
fields terminated by "," -- 以,分割字段
(
NAME,AGE -- 插入的字段
)
- 开始时的文件

3.4开始执行脚本
-
执行脚本语句
sqlldr 用户名/密码@数据库实例名/SID control=脚本名
如下信息参考:

-
注意cmd的路径

-
开始插入

-
插入完成20w

数据库表中确实插入20w条

插入结束后的文件

多了一个日志文件
查看日志文件

20w条数据只用了1:31.79是不是很快!!!
3.5 遇到报错
上面执行有问题会出现一个bat文件
里面时有问题的数据

- 可以根据log日志对数据进行修改

浙公网安备 33010602011771号