因为确实有这个需求而且在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更省心。