目录

Oracle-SQLLoader-与-SQLULDR2-学习指南

目录

Oracle SQL*Loader 与 SQLULDR2 学习指南

1.SQL*Loader (sqlldr)

1.1 概述

作用:Oracle 官方工具,用于将外部数据文件(如 CSV、文本文件)高效加载到数据库表中。

特点:

支持多种数据格式(定长、变长、CSV)。

支持直接路径加载(Direct Path Load),绕过 SQL 引擎,提升性能。

提供错误记录和丢弃无效数据的功能。

1.2 核心组件

控制文件 (Control File):定义数据加载规则,包括数据文件路径、目标表、字段映射等。

数据文件 (Data File):存储待加载的原始数据。

日志文件 (Log File):记录加载过程的详细信息。

错误文件 (Bad File):存储无法加载的数据。

废弃文件 (Discard File):存储因条件过滤被丢弃的数据。

1.3 使用步骤

步骤 1:编写控制文件

-- 示例:加载 CSV 文件到 EMP 表
OPTIONS (SKIP=1) -- 跳过 CSV 文件标题行
LOAD DATA
INFILE 'emp_data.csv' -- 数据文件路径
BADFILE 'emp_bad.bad' -- 错误文件
DISCARDFILE 'emp_discard.dsc' -- 废弃文件
APPEND INTO TABLE EMP -- 目标表,APPEND 表示追加数据
FIELDS TERMINATED BY ',' -- 字段分隔符
TRAILING NULLCOLS -- 允许末尾空列
(
  EMPNO,
  ENAME,
  JOB,
  MGR,
  HIREDATE DATE "YYYY-MM-DD", -- 日期格式转换
  SAL,
  COMM,
  DEPTNO
)

步骤 2:执行 SQL*Loader 命令

sqlldr userid=scott/tiger@orcl control=loader.ctl log=loader.log

1.4 高级功能

并行加载:使用 PARALLEL 参数加速大数据加载。

直接路径加载:通过 DIRECT=TRUE 提升性能(需注意表锁定)。

条件过滤:使用 WHEN 子句过滤数据。

数据转换:在控制文件中使用 SQL 函数(如 TO_DATE, SUBSTR)。

2.SQLULDR2 (SQLLDR 的增强工具)

2.1 概述

作用:第三方工具(非 Oracle 官方),用于从 Oracle 数据库高效导出数据到文件。

特点:

性能远超传统 UTL_FILE 或 SPOOL。

支持多线程导出。

输出格式灵活(CSV、定长、自定义分隔符)。

支持压缩和拆分文件。

2.2 安装与使用

下载:从第三方网站(如 )获取二进制文件。

基本命令:

sqluldr2 user=scott/tiger@orcl query="SELECT * FROM EMP" file=emp_data.csv

2.3 常用参数

参数 说明

user 数据库连接字符串

query 导出数据的 SQL 查询

file 输出文件路径

head 是否包含列标题(默认为 yes)

field 字段分隔符(默认 ,)

charset 输出文件字符集(如 UTF8)

thread 多线程导出(提升性能)

split 拆分文件大小(如 100M)

2.4 示例

#导出数据为 CSV,使用 4 线程,文件拆分为 100MB
sqluldr2 user=scott/tiger@orcl query="SELECT * FROM EMP" \
file=emp_data.csv head=yes field=, charset=UTF8 thread=4 split=100M

3.常见问题与解决

3.1 SQL*Loader

错误 ORA-00942:检查用户是否有目标表的权限。

日期格式错误:确保控制文件中的日期格式与数据文件匹配。

性能慢:尝试启用 DIRECT=TRUE 或调整 READSIZE/BINDSIZE。

3.2 SQLULDR2

中文乱码:指定正确的字符集(如 charset=ZHS16GBK)。

内存不足:减少线程数(thread)或增加 rows 参数。

权限问题:确保导出目录有写入权限。

4.学习资源

官方文档:

SQL*Loader Documentation

SQLULDR2 需参考第三方文档或 README。

书籍推荐:

《Oracle Database Utilities 19c》

《Oracle SQL*Loader: The Definitive Guide》

社区资源:

Oracle Forums (community.oracle.com)

Stack Overflow (stackoverflow.com)