当前位置: 首页 > article >正文

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 安装与使用
下载:从第三方网站(如 www.sqluldr2.com)获取二进制文件。

基本命令:

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)


http://www.kler.cn/a/590663.html

相关文章:

  • UART转AHB模块ModelSim仿真
  • Qt 通过MSVC编译运行项目
  • 数据库:一文掌握 PostgreSQL 的各种指令(PostgreSQL指令备忘)
  • Linux环境使用jmeter做性能测试
  • Elastic Stack 8.16.0 日志收集平台的搭建
  • 智能合约:Solidity(基于以太坊或兼容链,如 Polygon、BSC)(仅供学习区块链知识,不可进行违法开发应用)
  • 使用 NetworkX 进行图论分析与可视化
  • 仿RabbitMQ的消息队列
  • hadoop集群配置-整体介绍
  • LSM-Tree(Log-Structured Merge-Tree)详解
  • 使用 .NET Core 实现 RabbitMQ 消息队列的详细教程
  • React前端开发中实现断点续传
  • C++中类对象作为类成员(对象成员/成员对象)的一些注意事项
  • 微信开发者工具内建终端使用不了npm,但是cmd可以
  • 如何设置爬虫的延时避免被封禁
  • LeetCode Hot 100:1.两数之和、49.字母异位词分组、128.最长连续序列、283.移动零、11.盛水最多的容器
  • DNA语言模型GROVER学习人类基因组中的序列上下文
  • C/C++都有哪些开源的Web框架?
  • go语言的包使用,以及错误处理
  • 欧拉降幂-乘积幂次