如何在Ubuntu安装SQL*Loader

因为确实有这个需求而且在Windows配置Instant Client实在是太复杂了。

0x00.事件起因

事情的起因是这样的:我因为某些原因,需要搞一搞ftp数据自动导入Oracle数据库,但不想写Python脚本(尽管不复杂,并且cx_Oracle也有批量数据导入支持,但我就是不想写)。毕竟Oracle给了SQL*Loader,而且这玩意导起来也是非常迅速的,以前用得飞起,现在再捡起来也不是问题……

……除了21.3版本的SQL*Loader莫名其妙多了几个DLL需求,而这几个DLL在Instant Client(Windows x64)的任何包里都没有!

双击一下,找不到oranl.dll,找不到oranls.dll,找不到oracore.dll,找不到oraxml.dll,找不到orauts.dll。19.x的还只需要oci.dll呢!你为什么多了这么多需求还不给我下载

我真的把整个网页都搬下来了,然而就是没有这几个文件,百度无果,只能退回19.x。

但是明明有个21.3,却要用19.14,就很别扭。

0x01.何不尝试Linux

这两天Ubuntu 22.04 LTS (Jammy Jellyfish)出了,反正闲着也是闲着,何不装个Server然后试试呢?

安装流程倒也不难,官网都写好了,照着做就行。

首先,下载一下Instant Client。

wget https://download.oracle.com/otn_software/linux/instantclient/216000/instantclient-basic-linux.x64-21.6.0.0.0dbru.zip
wget https://download.oracle.com/otn_software/linux/instantclient/216000/instantclient-tools-linux.x64-21.6.0.0.0dbru.zip

然后,按照官方的推荐,新建一个文件夹。

sudo mkdir /opt/oracle

由于Ubuntu的/opt没权限直接读写,先设置下读写权限,与其chown,不如用ACL搞一下。顺便装了libaio1因为Instant Client需要,还有unzip因为得解压下载的压缩包。(我的用户名是raka)

apt install acl unzip libaio1 -y
sudo setfacl -m u:raka:rwx /opt/oracle

把下载好的文件放进去解压:

mv instantclient-basic-linux.x64-21.6.0.0.0dbru.zip /opt/oracle
mv instantclient-tools-linux.x64-21.6.0.0.0dbru.zip /opt/oracle
cd /opt/oracle
unzip instantclient-basic-linux.x64-21.6.0.0.0dbru.zip
unzip instantclient-tools-linux.x64-21.6.0.0.0dbru.zip

别忘了把tnsnames.ora放进去,这里用nano,ctrl-s保存,ctrl-x退出,比vim容易多了:

nano /opt/oracle/instantclient_21_6/network/admin/tnsnames.ora

然后写个测试脚本看一下,环境变量按照官网的写就可以:

#!/bin/bash

export PATH=/opt/oracle/instantclient_21_6:$PATH
export LD_LIBRARY_PATH=/opt/oracle/instantclient_21_6:$LD_LIBRARY_PATH

# 记得修改连接字符串
sqlldr scott/tiger@tns control=foo.ctl

基本上到这里就搞定了,写ctl什么的到处都有教程。

相比Windows端需要设置的各种环境变量、运行库,以及各种电脑上完全无法复现的莫名其妙的问题,Linux这边方便了好几步,而且稳定可用。

0x02.结语

不用Oracle更省心。

分享到: