sqluldr2的使用方法

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 有时候需要导出Oracle表数据到文本中用来迁移数据、异构平台或大数据的数据处理。导出方法有很多种,例如:spool、plsql-developer、utl_file方法等,除了这些方法,还有一个工具很火就是sqluldr2,老楼开发的工具。现在对这些工具做个对比和总结。
有时候需要导出Oracle表数据到文本中用来迁移数据、异构平台或大数据的数据处理。导出方法有很多种,例如:spool、plsql-developer、utl_file方法等,除了这些方法,还有一个工具很火就是sqluldr2,老楼开发的工具。现在对这些工具做个对比和总结。
一、数据导出工具概览
1、spool
spool工具在sqlplus中随时可以使用,较为灵活,通过sqlplus的格式设置处理,字段分割利用sql语句拼成,能迅速导出一些小数据量的需求。因为是配合sqlplus,它可以支持本地和客户端的数据导出,但是效率不高。

2、plsql-developer
plsql-developer工具只是个代表,还有很多工具可以连接数据库,进行导出操作,从交互配置中完成需要导出的数据设置。它也可以支持本地和客户端的数据导出,效率高于spool。

3、utl_file方法
utl_file方法是oracle提供的文件读写包,该方法需要一定的编写存储过程和sql的能力,而且需要指定读写路径,因此只能在服务器本地生成文件,若大量导出,还需要完成文件的传输。

4、sqluldr2
老楼开发的软件,基于OCI,使用非常方便,就是一个可执行文件配合参数命令,类似expdp等的命令行使用方法,支持自定义sql、本地和客户端的导出,效率非常高。
前三个方法都能轻松找到使用方法,本次实测sqluldr2。

二、sqluldr2的测试使用
1、获取工具
下载:http://www.onexsoft.com/software/sqluldr2linux64.zip
上传解压即可使用
2、工具的参数
user = username/password@tnsname
sql = SQL file name
query = select statement
field = separator string between fields
record = separator string between records
rows = print progress for every given rows (default, 1000000)
file = output file name(default: uldrdata.txt)
log = log file name, prefix with + to append mode
fast = auto tuning the session level parameters(YES)
text = output type (MYSQL, CSV, MYSQLINS, ORACLEINS, FORM, SEARCH).
charset = character set name of the target database.
ncharset= national character set name of the target database.
parfile = read command option from parameter file
read = set DB_FILE_MULTIBLOCK_READ_COUNT at session level
sort = set SORT_AREA_SIZE at session level (UNIT:MB)
hash = set HASH_AREA_SIZE at session level (UNIT:MB)
array = array fetch size
head = print row header(Yes|No)
batch = save to new file for every rows batch (Yes/No)
size = maximum output file piece size (UNIB:MB)
serial = set _serial_direct_read to TRUE at session level
trace = set event 10046 to given level at session level
table = table name in the sqlldr control file
control = sqlldr control file and path.
mode = sqlldr option, INSERT or APPEND or REPLACE or TRUNCATE
buffer = sqlldr READSIZE and BINDSIZE, default 16 (MB)
long = maximum long field size
width = customized max column width (w1:w2:...)
quote = optional quote string
data = disable real data unload (NO, OFF)
alter = alter session SQLs to be execute before unload
safe = use large buffer to avoid ORA-24345 error (Yes|No)
crypt = encrypted user information only (Yes|No)
sedf/t = enable character translation function
null = replace null with given value
escape = escape character for special characters
escf/t = escape from/to characters list
format = MYSQL: MySQL Insert SQLs, SQL: Insert SQLs.
exec = the command to execute the SQLs.
prehead = column name prefix for head line.
rowpre = row prefix string for each line.
rowsuf = row sufix string for each line.
colsep = separator string between column name and value.
presql = SQL or scripts to be executed before data unload.
postsql = SQL or scripts to be executed after data unload.
lob = extract lob values to single file (FILE).
lobdir = subdirectory count to store lob files .
split = table name for automatically parallelization.
degree = parallelize data copy degree (2-128).
for field and record, you can use '0x' to specify hex character code,
\r=0x0d \n=0x0a |=0x7c ,=0x2c, \t=0x09, :=0x3a, #=0x23, "=0x22 '=0x27</span>

3、执行导出
3.1 sqluldr2的链接数据库
本地执行方式:users参数可以省略不写,和expdp username/passwd 方式一样
export ORACLE_SID=orcl
sqluldr2 testuser/testuser query=test_table1 file=test_table1.txt
客户端连接:tns方式
sqluldr2 testuser/testuser@orcl query=test_table1 file=test_table1.txt
客户端连接:简易连接
sqluldr2 testuser/testuser@x.x.x.x:1521/orcl query=test_table1 file=test_table1.txt

3.2 要导出的数据由query控制
query参数如果整表导出,可以直接写表名,如果需要查询运算和where条件,query=“sql文本”,也可以把复杂sql写入到文本中由query调用。

3.3 分隔符设置
默认是逗号分隔符,通过field参数指定分隔符
sqluldr2 testuser/testuser query=chen.tt1 field=";"

3.4 大数据量操作
对于大表可以输出到多个文件中,指定行数分割或者按照文件大小分割,例如:
sqluldr2 testuser/testuser@orcl query="select * from test_table2" file=test_table2_%B.txt batch=yes rows=500000

3.4 速度测试
SQL> desc chen.tt1
Name Null? Type
----------------------------------------- -------- ----------------------------
T1 NOT NULL NUMBER(38)
T2 NUMBER(38)
T3 VARCHAR2(30)

SQL> select count(1) from chen.tt1;

COUNT(1)
----------
504403648
[oracle@iZ2zeevsidoafz0w22zmsfZ ~]$ ./sqluldr2linux64.bin Sys/ query=chen.tt1 field=";" file=/data1/tt1_uldr.txt
0 rows exported at 2017-09-17 10:54:32, size 0 MB.
1000000 rows exported at 2017-09-17 10:54:34, size 32 MB.
2000000 rows exported at 2017-09-17 10:54:35, size 68 MB.
3000000 rows exported at 2017-09-17 10:54:37, size 104 MB.
4000000 rows exported at 2017-09-17 10:54:38, size 140 MB.
……
503000000 rows exported at 2017-09-17 11:09:38, size 18036 MB.
504000000 rows exported at 2017-09-17 11:09:39, size 18072 MB.
504780879 rows exported at 2017-09-17 11:10:11, size 18103 MB.
output file /data1/tt1_uldr.txt closed at 504780879 rows, size 18103 MB.
5亿条数据,在本地导出16分钟完成,1秒中100w条数据。
5亿条数据,在客户端导出也是16分钟完成。

sqluldr2是一个非常灵活高效的文本导出工具,还支持导出时同时生成fsqlldr的控制文件,方便导入,该工具还有很多实用和优化方法,需要进一步研究。
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
SQL 关系型数据库 MySQL
8、SQL高级用法
8、SQL高级用法
19 0
|
6月前
|
SQL Oracle 关系型数据库
SQL NULL 函数
SQL NULL 函数
41 1
|
6月前
|
SQL 搜索推荐 数据库
Sql中的like的用法
Sql中的like的用法
|
7月前
|
SQL JSON 分布式计算
Spark SQL简介与基本用法
Spark SQL简介与基本用法
|
存储 SQL 关系型数据库
SQL基本用法总括二
SQL基本用法总括二
167 0
SQL基本用法总括二
|
SQL
SQL基本用法总括一
SQL基本用法总括一
64 0
|
SQL Oracle 关系型数据库
pl/sql如何使用
plsql是一款用来处理oracle数据库非常好的软件,如果使用大家平时使用oracle数据库的话建议使用plsql来作为你的图形化工具。
495 0
pl/sql如何使用
SQL中的ALL、ANY和SOME的用法介绍
SQL Server中有三个关键字可以修改比较运算符:ALL、ANY和SOME,其中ANY和SOME等价。 他们作用于比较运算符和子查询之间,作用类似EXISTS、NOT EXISTS、IN、NOT IN 以及其他逻辑意义,这些语法同样被SQL Server2000支持但是很少看到有人用它们,今天我们就来介绍一下他们的用法。
SQL中的ALL、ANY和SOME的用法介绍
|
SQL Oracle 前端开发
这8种常见的SQL错误用法,你还在用吗?(一)
MySQL 在近几年仍然保持强劲的数据库流行度增长趋势。越来越多的客户将自己的应用建立在 MySQL 数据库之上,甚至是从 Oracle 迁移到 MySQL上来。但也存在部分客户在使用 MySQL 数据库的过程中遇到一些比如响应时间慢,CPU 打满等情况。阿里云 RDS 专家服务团队帮助云上客户解决过很多紧急问题。现将《ApsaraDB专家诊断报告》中出现的部分常见 SQL 问题总结如下,供大家参考。
148 0
|
SQL 算法 Oracle
这8种常见的SQL错误用法,你还在用吗?(二)
MySQL 在近几年仍然保持强劲的数据库流行度增长趋势。越来越多的客户将自己的应用建立在 MySQL 数据库之上,甚至是从 Oracle 迁移到 MySQL上来。但也存在部分客户在使用 MySQL 数据库的过程中遇到一些比如响应时间慢,CPU 打满等情况。阿里云 RDS 专家服务团队帮助云上客户解决过很多紧急问题。现将《ApsaraDB专家诊断报告》中出现的部分常见 SQL 问题总结如下,供大家参考。
154 0