如何让 MacOS Oracle ODBC 客户端与 unixodbc 一起工作?

How to get MacOS Oracle ODBC client working with unixodbc?

我很难让 Oracle 12.2.0.1.0-2 ODBC 驱动程序和 Instant Client(Basic Lite 版本)在 MacOS 10.12.6 (Sierra) 下使用自制程序安装的 unixODBC 2.3.5。

将两个 Oracle ZIP 文件解压到 /opt/ora12/instantclient_12_2,为 libclntsh.dyliblibclntsh.dylib.12.1 创建符号链接,然后将 odcb 指向 /opt/ora/12/instantclient_12_2/libsqora.lib 会出现文件未找到错误.虽然该路径确实存在并且具有良好的权限,但使用 otool -L 检查 dylib 表明 @rpath 目录没有找到支持的库。

如果我下载 12.2 sqlplus 客户端,将其提取到同一个 instantclient 树和 运行 二进制文件,CLI 工作正常。这似乎是 odbc 的某种 dylib 加载问题,但我不确定如何解决它。我试过设置 DYLIB_LIBRARY_PATH,将所有库直接复制到 /usr/local/lib,都没有效果。

我还没有尝试退出 install_name_tool 和硬编码搜索路径(比我以前在 MacOS 上做的更深入),我希望有一些如此激烈和非-不需要便携。我缺少安装过程中的一个步骤来让它正常工作吗?

提前致谢!

在 Oracle 社区论坛上反复讨论之后,精简的解决方案记录在此博客 post:https://blogs.oracle.com/opal/installing-the-oracle-odbc-driver-on-macos?dd

简而言之,提供的 Oracle ODBC odbc_update_ini.sh 在第一次修补后需要 运行 以将引用从 libsqora.so.12.1 更改为 libsqora.dylib.12.1。然后需要将两个库(libclntsh.dylib.12.1libclntshcore.dylib.12.1)符号链接到您的 PATH 上的库位置(我使用了 /usr/local/lib)。

使用上述配置(使用 Basic 客户端而不是 Basic Lite,虽然 Basic Lite 应该 工作)和必要的 tnsnames.ora 黑魔法(TNS 连接字符串是涵盖了许多其他 SO 问题),我能够使用 unixODBC 连接命令行 isql 和我的真正目标,R 的 odbcDBI