Oracle 大数据量导出工具——sqluldr2 的安装与使用

这篇具有很好参考价值的文章主要介绍了Oracle 大数据量导出工具——sqluldr2 的安装与使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

sqluldr2,oracle,数据库

作者 | JiekeXu

来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)

如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA)

大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看 sqluldr2 的安装与使用,欢迎点击上方蓝字“JiekeXu DBA之路”关注我的公众号,标星或置顶,更多干货第一时间到达!

sqluldr2 使用情况基本介绍 


近期在做一些国产数据库的 POC 工作,在数据迁移导出时用到了数据导出工具 sqluldr2,它是一款十分不错的 oracle 数据导出工具,还支持导出时同时生成 sqlldr 的控制文件,它可以将数据以 TXT/CSV 等格式导出,能导出亿级数据为 excel 文件,包含32、64 位程序,不仅在大数据量导出方面速度超快,导入速度也是非常快速。

         sqluldr2,oracle,数据库

基本介绍  

sqluldr2 是一款Oracle数据快速导出工具,包含32、64位程序,sqluldr2 在大数据量导出方面速度超快,能导出亿级数据为excel文件,另外它的导入速度也是非常快速,功能是将数据以TXT/CSV等格式导出。

软件说明  

下载完sqluldr解压后,文件夹内容如下:

sqluldr2.exe 用于32位windows平台;

sqluldr264.exe 用于64位windows平台。

sqluldr2_linux32_10204.bin 适用于linux32位操作系统;

sqluldr2_linux64_10204.bin 适用于linux64位操作系统;

可在公众号后台回复关键字【sqluldr2】获取下载文件。

sqluldr2,oracle,数据库

使用说明  

1、首先将 sqluldr2_linux64_10204.bin 复制到执行目录下,给予可执行权限,即可开始使用

mkdir -m 775 /home/oracle/tmp/sqluldr2

2、 help 查看帮助

chmod 775 sqluldr2_linux64_10204.bin./sqluldr2_linux64_10204.binSQL*UnLoader: Fast Oracle Text Unloader (GZIP, Parallel), Release 4.0.1(@) Copyright Lou Fangxin (AnySQL.net) 2004 - 2010, all rights reserved.License: Free for non-commercial useage, else 100 USD per server.Usage: SQLULDR2 keyword=value [,keyword=value,...]Valid Keywords: 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 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

sqluldr2,oracle,数据库

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.5 常规导出

Win:

sqluldr2 test/test@127.0.1.1/orcl query="select * from temp_001" head=yes file=d:\tmp001.csv

Linux:

cd /home/oracle/tmp/sqluldr2
./sqluldr2_linux64_10204.bin sys  query="select * from scott.emp" head=yes file=./emp01.csv
          0 rows exported at 2023-07-26 10:45:47, size 0 MB.
          14 rows exported at 2023-07-26 10:45:47, size 0 MB.
         output file ./emp01.csv closed at 14 rows, size 0 MB.

说明:head=yes 表示输出表头

sqluldr2,oracle,数据库

3.6 使用 SQL 参数

./sqluldr2_linux64_10204.bin scott/scott@127.0.0.1/testogg sql=test_sql.sql head=yes file=/home/oracle/tmp/sqluldr2/test_emp01.csv

test_sql.sql 的内容为:

select * from scott.dept

注意:这里仅支持一条 SQL,有无分号均可。当然 SQL也支持表关联子查询等。

sqluldr2,oracle,数据库

3.7 使用 log 参数

当集成 sqluldr2 在脚本中时,就希望屏幕上不输出这些信息,但又希望这些信息能保留,这时可以用“LOG”选项来指定日志文件名。

sqluldr2 test/test@127.0.0.1/orcl sql=test.sql head=yes file=d:\tmp001.csv log=+d:\tmp001.log
Linux:
--连接到 PDB1
sqlplus sys/Oracle@JIEKEXUPDB1 as sysdba
--创建用户并赋权
create user test identified by test;
grant connect,resource,dba to test;
--连接到测试用户,创建表 t1
conn test/test@JIEKEXUPDB1
create table t1 as select * from dba_objects;
commit;
--导出
./sqluldr2_linux64_10204.bin  test/test@JIEKEXUPDB1 query=t1 head=yes file=/home/oracle/t1.csv log=/home/oracle/test_t1.log

sqluldr2,oracle,数据库

3.8 使用 table 参数

当使用 table 参数时,在目录下会生成对应的ctl控制文件,如下语句会生成temp_001_sqlldr.ctl文件。

./sqluldr2_linux64_10204.bin  test/test@JIEKEXUPDB1 query="select * from t1" table=t1 head=yes file=/home/oracle/test1.csv

sqluldr2,oracle,数据库

生成的控制文件t1_sqlldr.ctl的内容如下:

--
-- SQL*UnLoader: Fast Oracle Text Unloader (GZIP), Release 3.0.1
-- (@) Copyright Lou Fangxin (AnySQL.net) 2004 - 2010, all rights reserved.
--
--  CREATE TABLE t1 (
--    OWNER VARCHAR2(128),
--    OBJECT_NAME VARCHAR2(128),
--    SUBOBJECT_NAME VARCHAR2(128),
--    OBJECT_ID NUMBER,
--    DATA_OBJECT_ID NUMBER,
--    OBJECT_TYPE VARCHAR2(23),
--    CREATED DATE,
--    LAST_DDL_TIME DATE,
--    TIMESTAMP VARCHAR2(19),
--    STATUS VARCHAR2(7),
--    TEMPORARY VARCHAR2(1),
--    GENERATED VARCHAR2(1),
--    SECONDARY VARCHAR2(1),
--    NAMESPACE NUMBER,
--    EDITION_NAME VARCHAR2(128),
--    SHARING VARCHAR2(18),
--    EDITIONABLE VARCHAR2(1),
--    ORACLE_MAINTAINED VARCHAR2(1),
--    APPLICATION VARCHAR2(1),
--    DEFAULT_COLLATION VARCHAR2(100),
--    DUPLICATED VARCHAR2(1),
--    SHARDED VARCHAR2(1),
--    CREATED_APPID NUMBER,
--    CREATED_VSNID NUMBER,
--    MODIFIED_APPID NUMBER,
--    MODIFIED_VSNID NUMBER
--  );
--
OPTIONS(BINDSIZE=2097152,READSIZE=2097152,SKIP=1,ERRORS=-1,ROWS=50000)
LOAD DATA
INFILE '/home/oracle/test1.csv' "STR X'0a'"
INSERT INTO TABLE t1
FIELDS TERMINATED BY X'2c' TRAILING NULLCOLS
(
  "OWNER" CHAR(128) NULLIF "OWNER"=BLANKS,
  "OBJECT_NAME" CHAR(128) NULLIF "OBJECT_NAME"=BLANKS,
  "SUBOBJECT_NAME" CHAR(128) NULLIF "SUBOBJECT_NAME"=BLANKS,
  "OBJECT_ID" CHAR(46) NULLIF "OBJECT_ID"=BLANKS,
  "DATA_OBJECT_ID" CHAR(46) NULLIF "DATA_OBJECT_ID"=BLANKS,
  "OBJECT_TYPE" CHAR(23) NULLIF "OBJECT_TYPE"=BLANKS,
  "CREATED" DATE "YYYY-MM-DD HH24:MI:SS" NULLIF "CREATED"=BLANKS,
  "LAST_DDL_TIME" DATE "YYYY-MM-DD HH24:MI:SS" NULLIF "LAST_DDL_TIME"=BLANKS,
  "TIMESTAMP" CHAR(19) NULLIF "TIMESTAMP"=BLANKS,
  "STATUS" CHAR(7) NULLIF "STATUS"=BLANKS,
  "TEMPORARY" CHAR(1) NULLIF "TEMPORARY"=BLANKS,
  "GENERATED" CHAR(1) NULLIF "GENERATED"=BLANKS,
  "SECONDARY" CHAR(1) NULLIF "SECONDARY"=BLANKS,
  "NAMESPACE" CHAR(46) NULLIF "NAMESPACE"=BLANKS,
  "EDITION_NAME" CHAR(128) NULLIF "EDITION_NAME"=BLANKS,
  "SHARING" CHAR(18) NULLIF "SHARING"=BLANKS,
  "EDITIONABLE" CHAR(1) NULLIF "EDITIONABLE"=BLANKS,
  "ORACLE_MAINTAINED" CHAR(1) NULLIF "ORACLE_MAINTAINED"=BLANKS,
  "APPLICATION" CHAR(1) NULLIF "APPLICATION"=BLANKS,
  "DEFAULT_COLLATION" CHAR(100) NULLIF "DEFAULT_COLLATION"=BLANKS,
  "DUPLICATED" CHAR(1) NULLIF "DUPLICATED"=BLANKS,
  "SHARDED" CHAR(1) NULLIF "SHARDED"=BLANKS,
  "CREATED_APPID" CHAR(46) NULLIF "CREATED_APPID"=BLANKS,
  "CREATED_VSNID" CHAR(46) NULLIF "CREATED_VSNID"=BLANKS,
  "MODIFIED_APPID" CHAR(46) NULLIF "MODIFIED_APPID"=BLANKS,
  "MODIFIED_VSNID" CHAR(46) NULLIF "MODIFIED_VSNID"=BLANKS
)

sqluldr2,oracle,数据库

顺便说一句,每次运行都需要 ./sqluldr2_linux64_10204.bin 有点麻烦,我们将其重命名并放到数据库服务器 $ORACLE_HOME/bin 目录下,便可以直接运行了。

mv sqluldr2_linux64_10204.bin sqluldr2


cp sqluldr2 $ORACLE_HOME/bin


which sqluldr2

sqluldr2,oracle,数据库

4、本地 Oracle client 安装

1)如果想要访问远程数据库,导出远程数据库数据,需要在本地安装 Oracle 客户端软件,访问远端数据库,下载客户端 rpm 包或者标准的 Oracle 客户端 zip 包进行安装。

cd /home/jiekexu/soft/
oracle-instantclient-11.2.0.4.0-1.1.x86_64.rpm
oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm
oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm

2)这里以 prm 包为例,root用户使用rpm -ivh [包名] 进行安装:

如:rpm -ivh oracle-instantclient-11.2.0.4.0-1.1.x86_64.rpm

安装的文件默认放在两个位置:

头文件:/usr/lib/oracle/11.2/client64/下,如果在使用时报错找不到头文件,记得看路径是否是这个。

包文件:/usr/lib64/oracle/11.2.0.4.0/client/下,包含{bin、lib}两个文件夹;

3)创建oracle-instantclient.conf文件,并添加内容:

vim  /etc/ld.so.conf.d/oracle-instantclient.conf
添加内容
/usr/lib64/oracle/11.2.0.4.0/client/lib/

4)生效环境变量

source  .ldconfig

5)创建软连接

cd  /usr/lib64/oracle/11.2.0.4.0/client/lib
执行
cd /usr/lib64/oracle/11.2.0.4.0/client/lib/
ln -s libclntsh.so.11.1  libclntsh.so

5、主要参数说明

Field 分隔符 指定字段分隔符,默认为逗号

record 分隔符 指定记录分隔符,默认为回车换行,Windows下的换行

quote 引号符 指定非数字字段前后的引号符

例如现在要改变默认的字段分隔符,用“#”来分隔记录,导出的命令如下所示:

sqluldr2 test/test sql=tmp.sql field=#

在指定分隔符时,可以用字符的ASCII代码(0xXX,大写的XX为16进制的ASCII码值)来指定一个字符,常用的字符的ASCII代码如下:

回车=0x0d,换行=0x0a,TAB键=0x09,|=0x7c,&=0x26,井号=0x23,双引号=0x22,单引号=0x27,冒号=0x3a

注意:在选择分隔符时,一定不能选择会在字段值中出现的字符,例如TAB键,&、| 等均有可能会出现在字段值中,所以推荐在导出数据时,使用多个分隔符,如0x230x7c。

全文完,希望可以帮到正在阅读的你,如果觉得此文对你有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~

欢迎关注我的公众号【JiekeXu DBA之路】,第一时间一起学习新知识!以下三个地址可以找到我,其他地址都属于盗版侵权爬取我的文章,而且代码格式、图片等均有错乱,不方便阅读,欢迎来我公众号或者墨天轮地址关注我,第一时间收获最新消息。

欢迎关注我的公众号【JiekeXu DBA之路】,第一时间一起学习新知识!

————————————————————————————
公众号:JiekeXu DBA之路
CSDN :https://blog.csdn.net/JiekeXu
墨天轮:https://www.modb.pro/u/4347
————————————————————————————

sqluldr2,oracle,数据库

分享几个数据库备份脚本

Oracle 表碎片检查及整理方案

OGG|Oracle GoldenGate 基础2022 年公众号历史文章合集整理
 
 

Oracle 19c RAC 遇到的几个问题

OGG|Oracle 数据迁移后比对一致性

OGG|Oracle GoldenGate 微服务架构

Oracle 查询表空间使用率超慢问题一则

Oracle 11g升级到19c需要关注的几个问题

国产数据库|TiDB 5.4 单机快速安装初体验

Oracle ADG 备库停启维护流程及增量恢复

Linux 环境搭建 MySQL8.0.28 主从同步环境
文章来源地址https://www.toymoban.com/news/detail-777147.html

从国产数据库调研报告中你都能了解哪些信息及我的总结建议

到了这里,关于Oracle 大数据量导出工具——sqluldr2 的安装与使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Oracle数据泵备份恢复(导出导入)详细语句

    查询已存在备份目录 新建备份目录 注意 :在本地新建对应的物理目录 给指定用户赋权 按表名导出 还可以根据表的查询条件导出 按表空间导出 按用户导出 全库导出语句 进阶 相关参数介绍 PARALLEL : 指定执行导出操作的并行进程个数,默认值为1,并行度设置不应该超过CPU数的

    2024年02月10日
    浏览(34)
  • docker--在Anaconda jupyter 容器中使用oracle数据源时,Oracle客户端安装配置及使用示例

    将instantclient-basic-linux.x64-11.2.0.4.0.zip解压至/home/jupyter/oracle/ 将instantclient-sqlplus-linux.x64-11.2.0.4.0.zip解压/home/jupyter/oracle/【可选,提供sqlplus命令】 复制【操作系统一般都有安装libaio.so】 cp /usr/lib64/libaio.so.1 /home/jupyter/oracle/instantclient_11_2/ ln -s /home/jupyter/oracle/instantclient_11_2/libcln

    2024年02月07日
    浏览(38)
  • 成功解决DataX从Hive导出Oracle的数据乱码问题!

    大数据与 RDBMS 之间的数据导入和导出都是企业日常数据处理中常见的一环,该环节一般称为 e-t-l 即 extract-transform-load 。市面上可用的 etl 工具和框架很多,如来自于传统数仓和 BI 圈的 kettle/informatica/datastage , 来自于 hadoop 生态圈的 sqoop/datax ,抑或使用计算引擎 spark/presto/fli

    2024年02月13日
    浏览(30)
  • Oracle常用运维SQL--用户管理、数据导入、导出的实用脚本

    Oracle常用运维SQL–用户管理、数据导入、导出的项目实用脚本

    2024年02月16日
    浏览(38)
  • 导出Oracle数据库sqlplus命令行查询的结果到文件

    在Oracle数据库sqlplus命令行操作时,如果想将SQL查询出来的结果导出到文件中,可以使用SQLPlus中的 SPOOL 命令来将查询结果导出到文件。 1.开启日志记录:使用SPOOL命令,指定需要输出的文件路径及文件名。例如: SPOOL /存放路径/oracle.txt 2.执行SQL查询语句:你可以输入任何需要

    2024年02月15日
    浏览(30)
  • Bytebase 2.3.0 - Snowflake SQL 审核,Oracle 数据脱敏和数据导出中心

    支持 Snowflake 的 SQL 审核❄️。 新增数据导出中心。 支持 Oracle 的数据脱敏。 支持配置外部审批节点,并用于自定义审批流中。 自定义审批流支持「退回」操作。 项目的「租户模式」改名为「批量模式」。 优化了数据查询和导出的流程体验。 优化了项目成员界面。 修复了

    2024年02月11日
    浏览(31)
  • 给oracle逻辑导出clob大字段、大数据量表提提速

    Oracle在做数据迁移、还原测试库以及其他需要导出、导入数据的需求下,我们常用到数据泵来进行数据的转移操作,但往往很多事后我们要操作的库数据量都非常大,且数据库中clob字段非常多,就给我们导出带来了一些问题,导出慢或者卡在那里很久不动等问题; 有小伙伴

    2024年02月11日
    浏览(26)
  • 在虚拟机linux系统centos中安装oracle11gR2,并使用plsql工具连接使用数据库

    1.X工具,我使用的是Xftp,Xshell和Xmanager,也可以选用其他相同类型的工具 2.oracle安装包,我选用的是oracle11gR2,其他版本仅供参考 3.plsql工具 需要使用Xshell使虚拟机脸上Xmanager打开图形化界面,具体步骤如下: 1.打开虚拟机,登录 2.使用Xshell连接虚拟机         打开Xshell,创建

    2024年02月15日
    浏览(46)
  • oracle批量导出字段注释,并且相同字段注释为空的情况取有数据的第一行赋值

    SELECT ‘comment on column ‘|| t.table_name||’.’||t.colUMN_NAME||’ is ’ || ‘’‘’ || (CASE WHEN T1.COMMENTS IS NULL THEN (SELECT T2.COMMENTS FROM User_Col_Comments T2 WHERE T1.colUMN_NAME=T2.colUMN_NAME AND T2.COMMENTS IS NOT NULL and rownum=1) ELSE NULL END) ||‘’‘’|| ‘;’ FROM User_Tab_Cols t, User_Col_Comments t1 WHERE t.table_n

    2024年02月10日
    浏览(27)
  • Oracle数据库安全评估工具(DBSAT)

    Oracle数据库安全评估工具(DBSAT)是一个流行的命令行工具,它可以帮助识别数据库配置、操作或实施引入风险的领域,并建议改变和控制以减少这些风险。DBSAT帮助评估数据库配置的安全程度,确定谁是用户和他们的权利,并确定敏感数据在数据库中的位置。DBSAT可以区分企

    2024年02月06日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包