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日志对数据进行修改