Oracle Instant Client SQL*加载程序工具未启动,因为缺少 libomsodm.so

Oracle Instant Client SQL*Loader tool doesn't start because of missing libomsodm.so

我在我的 ubuntu 20.04 上安装了 oracle basic instant client v21 x64 RPM 包,使用了相同版本的即时工具。现在我不能 运行 sqlldr 工具 ,sqlldr:加载共享库时出错:libomsodm.so:无法打开共享对象文件:没有抛出这样的文件或目录。我尝试了其他工具,如 sqlplus,没问题。我的环境变量设置正确,如 documentation 中所述 这是我的路径和 LD_LIBRARY_PATH 变量 这是 lib 文件夹中的库列表,它不包含 libomsodm.so 完整的错误信息 所以我的问题是,如果需要,为什么 libomsodm.so 不包含在基本和工具包中? 我可以从哪里得到它? (我安装了 here 中的所有软件包,但没有 libomsodm) 我需要 lsqldr 只是因为我有 .ldr 和 .ctl 文件,其中包含 table 数据的备份。数据库存储在远程服务器上。我的最后一个问题是如何使用 linux?[=17= 从“.ldr”和“.ctl”文件恢复数据]

更新:https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html

上提供了带有 SQL*Loader 修复的新 21.1“工具”RPM 包

libomsodm.so 与 SQL*Loader 包含在同一个 21c 包中。猜测您有一组混合的 19c 和 21c Instant Client 包。

$ wget https://download.oracle.com/otn_software/linux/instantclient/211000/instantclient-tools-linux.x64-21.1.0.0.0.zip
--2020-12-16 08:52:58--  https://download.oracle.com/otn_software/linux/instantclient/211000/instantclient-tools-linux.x64-21.1.0.0.0.zip
Resolving download.oracle.com (download.oracle.com)... 104.80.236.93
Connecting to download.oracle.com (download.oracle.com)|104.80.236.93|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1167332 (1.1M) [application/zip]
Saving to: ‘instantclient-tools-linux.x64-21.1.0.0.0.zip’

instantclient-tools-linux.x64-21.1.0.0.0.zip     100%[==========================================================================================================>]   1.11M  1.12MB/s    in 1.0s    

2020-12-16 08:53:01 (1.12 MB/s) - ‘instantclient-tools-linux.x64-21.1.0.0.0.zip’ saved [1167332/1167332]

$ unzip instantclient-tools-linux.x64-21.1.0.0.0.zip
Archive:  instantclient-tools-linux.x64-21.1.0.0.0.zip
  inflating: instantclient_21_1/exp  
  inflating: instantclient_21_1/expdp  
  inflating: instantclient_21_1/imp  
  inflating: instantclient_21_1/impdp  
  inflating: instantclient_21_1/libnfsodm.so  
  inflating: instantclient_21_1/libomsodm.so  
  inflating: instantclient_21_1/libopcodm.so  
  inflating: instantclient_21_1/sqlldr  
  inflating: instantclient_21_1/TOOLS_LICENSE  
  inflating: instantclient_21_1/TOOLS_README  
  inflating: instantclient_21_1/wrc  
cjones@mac:/tmp$ 

我刚遇到同样的问题。 instantclient 的现有安装已事先从系统中完全清除,因此这不是由于版本 19.x 和 21.1 库之间的混淆。 .rpm 包中实际上缺少库文件:

$ wget "https://download.oracle.com/otn_software/linux/instantclient/211000/oracle-instantclient-tools-21.1.0.0.0-1.x86_64.rpm"
...

$ rpm -qlp oracle-instantclient-tools-21.1.0.0.0-1.x86_64.rpm 
/usr/lib/oracle
/usr/lib/oracle/21
/usr/lib/oracle/21/client64
/usr/lib/oracle/21/client64/bin
/usr/lib/oracle/21/client64/bin/exp
/usr/lib/oracle/21/client64/bin/expdp
/usr/lib/oracle/21/client64/bin/imp
/usr/lib/oracle/21/client64/bin/impdp
/usr/lib/oracle/21/client64/bin/sqlldr
/usr/lib/oracle/21/client64/bin/wrc
/usr/lib/oracle/21/client64/lib
/usr/lib/oracle/21/client64/lib/libnfsodm.so
/usr/lib/oracle/21/client64/lib/libopcodm.so
/usr/share/oracle
/usr/share/oracle/21
/usr/share/oracle/21/client64
/usr/share/oracle/21/client64/doc
/usr/share/oracle/21/client64/doc/TOOLS_LICENSE
/usr/share/oracle/21/client64/doc/TOOLS_README

我通常通过 alien --scripts package.deb 将 .rpm 转换为 .deb 来安装到 Ubuntu。这已经完美地工作了很多年,包括 19.10(我已经降级到)在内的 instantclient 版本。因此,我想知道这是否是 Oracle 最新版本包装中的 bug/oversight。

补充 Christopher Jones 的其他两个回复,以防解决方案不完全清楚:

工具包 (RPM) 中缺少共享库 libomsodm.so
oracle-instantclient-tools-21.1.0.0.0-1.x86_64.rpm,所以这确实是一个 Oracle bug/oversight.

幸运的是,该文件在工具包 (ZIP) 中提供并存在 instantclient-tools-linux.x64-21.1.0.0.0.zip.

因此要解决,安装 RPM 后,您需要下载并解压缩 ZIP 存档,然后以 root 用户身份安装缺少的库

# install -m 755 -o root -g root instantclient_21_1/libomsodm.so /usr/lib/oracle/21/client64/lib/libomsodm.so
# ldconfig

您现在应该能够 运行 sqlldr 作为任何非特权用户:它将显示命令语法而不是共享库链接致命错误。

PS:就我个人而言,我还手动创建了一个软链接,从 /usr/bin/sqlldr 指向 /usr/lib/oracle/21/client64/bin/sqlldr,因为这是工具包中我唯一需要的工具。 /usr/bin/sqlplus 软链接已经由 Sql*Plus 包创建。