【ubuntu离线安装Oracle 客户端】ldd /opt/oracle/instantclient_19_8/libclntsh.so

文章目录

    • [一、`DPI-1047` 错误](#一、DPI-1047 错误)
      • [1. 安装 Oracle 客户端库](#1. 安装 Oracle 客户端库)
        • [1.1 下载 Oracle Instant Client](#1.1 下载 Oracle Instant Client)
        • [1.2 安装 Oracle Instant Client](#1.2 安装 Oracle Instant Client)
        • [1.3 设置环境变量](#1.3 设置环境变量)
        • [1.4 测试连接](#1.4 测试连接)
      • [2. 安装 cx_Oracle](#2. 安装 cx_Oracle)
      • [3. 重启程序](#3. 重启程序)
      • [4. 查看链接错误](#4. 查看链接错误)
    • [二、 依赖问题](#二、 依赖问题)
      • [1. 确认 Oracle Instant Client 安装位置](#1. 确认 Oracle Instant Client 安装位置)
    • [二、 在线配置 `LD_LIBRARY_PATH`](#二、 在线配置 LD_LIBRARY_PATH)
      • [3. 检查 `cx_Oracle` 和 Oracle Instant Client 版本兼容性](#3. 检查 cx_Oracle 和 Oracle Instant Client 版本兼容性)
      • [4. 安装 `oracle-instantclient` 包(如果是使用 apt 包管理器)](#4. 安装 oracle-instantclient 包(如果是使用 apt 包管理器))
      • [5. 检查连接字符串](#5. 检查连接字符串)
      • [6. 重启你的 Python 程序](#6. 重启你的 Python 程序)
    • 三、离线配置`LD_LIBRARY_PATH`
      • [1. 下载 `.deb` 包](#1. 下载 .deb 包)
      • [2. 将 `.deb` 包传输到目标机器](#2. 将 .deb 包传输到目标机器)
      • [3. 使用 `dpkg` 安装](#3. 使用 dpkg 安装)
      • [4. 确认安装](#4. 确认安装)
      • [5. 离线更新依赖(可选)](#5. 离线更新依赖(可选))
    • 四、离线版本问题

一、DPI-1047 错误

Linux 系统上缺少 Oracle 客户端库文件 (libclntsh.so),这是 Oracle 数据库连接所必需的。

为了解决这个问题,你可以按照以下步骤操作:

1. 安装 Oracle 客户端库

首先,你需要安装适用于你的系统架构的 Oracle 客户端。你可以从 Oracle 官方下载 Oracle Instant Client。以下是安装步骤:

1.1 下载 Oracle Instant Client

访问 Oracle Instant Client 下载页面 并下载适合你操作系统的 64 位客户端库。

  • 选择 Oracle Instant Client for Linux x86-64
  • 下载包含 basicsqlplus 的包。basic 包含最基本的客户端库,而 sqlplus 包含 SQL*Plus 工具。
1.2 安装 Oracle Instant Client

下载后,解压文件并设置环境变量。以下是操作步骤:

bash 复制代码
# 例如,将 Oracle Instant Client 解压到 /opt/oracle/ 目录下
cd /opt/oracle
unzip /path/to/instantclient-basic-linux.x64-*.zip
unzip /path/to/instantclient-sqlplus-linux.x64-*.zip
1.3 设置环境变量

.bashrc.bash_profile 文件中设置 Oracle 客户端库的路径:

bash 复制代码
# 添加以下内容到 ~/.bashrc 或 ~/.bash_profile
export ORACLE_HOME=/opt/oracle/instantclient_19_8
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH

然后执行以下命令让更改生效:

bash 复制代码
source ~/.bashrc
1.4 测试连接

确认 Oracle 客户端库已经正确安装并且可以被找到。你可以通过运行以下命令来验证是否能够加载 Oracle 客户端库:

bash 复制代码
ldd /opt/oracle/instantclient_19_8/libclntsh.so

这应该能够显示 libclntsh.so 文件的相关依赖。如果一切正常,系统应该能找到并加载该库文件。

2. 安装 cx_Oracle

接下来,确保 cx_Oracle 已安装并能与 Oracle 客户端库正确兼容。

如果 cx_Oracle 没有安装,可以使用 pip 安装:

bash 复制代码
pip install cx_Oracle

或者,如果你已经安装了 cx_Oracle,确保其版本与 Oracle Instant Client 兼容。你可以查阅 cx_Oracle 文档 获取更多关于兼容性的信息。

3. 重启程序

重新启动你的 Python 程序,它应该能够找到 Oracle 客户端库并成功连接。

4. 查看链接错误

如果还有其他错误,请查看是否有 libclntsh.so 或其他共享库的链接问题。

你可以使用以下命令来查看缺失的库:

bash 复制代码
ldd /path/to/python  # 确保链接到正确的 Oracle 客户端库

应该帮助你找到潜在的链接问题。

通过这些步骤,应该能解决 DPI-1047 错误并正常连接 Oracle 数据库。

二、 依赖问题

bash 复制代码
cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "/opt/oracle/instantclient_21_20/lib/libclntsh.so: cannot open shared object file

从错误信息来看,cx_Oracle 试图使用 Oracle 客户端库时,出现了缺少文件的错误。错误信息表明它无法找到 Oracle 客户端库 libclntsh.so。尽管你可能已经安装了 Oracle Instant Client,但这个问题通常是因为库文件没有被正确地配置到系统的环境变量中。你可以尝试以下几个步骤来解决这个问题:

1. 确认 Oracle Instant Client 安装位置

首先确保你已经安装了 Oracle Instant Client,并且它的版本是 64-bit。你可以在终端使用以下命令检查安装位置:

bash 复制代码
ls /opt/oracle/instantclient_21_20/

如果没有找到 libclntsh.so,说明可能没有正确安装 Oracle Instant Client。

二、 在线配置 LD_LIBRARY_PATH

如果确认 Oracle Instant Client 已正确安装,下一步是确保你的系统能够找到它。你需要将其路径添加到 LD_LIBRARY_PATH 环境变量中。可以在终端执行以下命令:

bash 复制代码
export LD_LIBRARY_PATH=/opt/oracle/instantclient_21_20:$LD_LIBRARY_PATH

这将临时设置库路径,确保你的系统能够找到 Oracle 客户端库。

如果希望每次启动时都生效,可以将该行命令添加到 ~/.bashrc~/.bash_profile 文件中:

bash 复制代码
echo "export LD_LIBRARY_PATH=/opt/oracle/instantclient_21_20:$LD_LIBRARY_PATH" >> ~/.bashrc
source ~/.bashrc

3. 检查 cx_Oracle 和 Oracle Instant Client 版本兼容性

确保你使用的 cx_Oracle 库版本与 Oracle Instant Client 版本兼容。可以查看 cx_Oracle 的官方文档 来确认版本兼容性。如果需要,可以升级 cx_Oracle

bash 复制代码
pip install --upgrade cx_Oracle

4. 安装 oracle-instantclient 包(如果是使用 apt 包管理器)

如果你使用的是基于 Debian 或 Ubuntu 的 Linux 发行版,也可以通过包管理器安装 Oracle Instant Client:

bash 复制代码
sudo apt-get install libaio1
sudo apt-get install oracle-instantclient-basic

如果你使用的是 CentOS 或 RHEL,类似的命令也适用,只需用 yum 替代 apt-get

5. 检查连接字符串

确保你提供的连接字符串正确无误,并且没有额外的空格或格式问题。例如:

python 复制代码
conn = oracle.connect('user/key@ip:port/database')

检查是否能够通过 SQL*Plus 或其他工具连接到 Oracle 数据库,确认连接信息是正确的。

6. 重启你的 Python 程序

配置完环境变量后,重新启动 Python 程序来测试更改是否生效。

如果以上步骤没有解决问题,建议检查 cx_Oracle 的安装日志或使用调试信息来进一步排查。

三、离线配置LD_LIBRARY_PATH

要离线安装 libaio1,你可以按照以下步骤操作:

1. 下载 .deb

首先,你需要手动下载 libaio1.deb 安装包。你可以在没有互联网的机器上或者其他可以联网的机器上执行这个步骤。

  • 访问 Ubuntu Packages 或其他源,查找与你的系统版本(例如 Ubuntu Jammy 版本)兼容的 libaio1 包。
  • 下载对应的 .deb 包。比如,选择版本为 0.3.112-13build1libaio1

下载的 .deb 文件通常会是类似以下的文件名:

bash 复制代码
libaio1_0.3.112-13build1_amd64.deb

2. 将 .deb 包传输到目标机器

将你下载的 .deb 文件通过 USB 或者其他方式,传输到目标机器上,假设你将其放在 /home/user/Downloads/ 目录下。

3. 使用 dpkg 安装

在目标机器上,打开终端并切换到 .deb 包所在目录,使用 dpkg 命令安装:

bash 复制代码
sudo dpkg -i /home/user/Downloads/libaio1_0.3.112-13build1_amd64.deb

如果有依赖问题,可以使用以下命令来修复:

bash 复制代码
sudo apt-get install -f

这会自动安装缺失的依赖项。

4. 确认安装

完成安装后,你可以通过以下命令确认 libaio1 是否安装成功:

bash 复制代码
dpkg -l | grep libaio1

如果安装成功,你将看到 libaio1 包的版本信息。

5. 离线更新依赖(可选)

如果你没有离线安装其他依赖项,并且需要通过 apt-get 完成其他离线安装,可以使用 apt--download-only 选项,在有网络连接的机器上下载依赖包,然后再传输到目标机器上安装。

bash 复制代码
sudo apt-get --download-only install <package_name>

这将把所有依赖包下载到 /var/cache/apt/archives/ 目录,你可以将这些包复制到目标机器并使用 dpkgapt 来离线安装。

四、离线版本问题

要查看 Ubuntu 系统的版本信息,你可以使用以下命令:

  1. 查看 Ubuntu 版本:

    bash 复制代码
    lsb_release -a

    这个命令会显示包括版本号、发行代号(如 Ubuntu 20.04 LTS)、描述等详细信息。

  2. 查看内核版本:

    bash 复制代码
    uname -r

    这个命令会显示当前运行的 Linux 内核版本。

  3. 查看系统的其他详细信息:

    bash 复制代码
    cat /etc/os-release

    这个命令会显示操作系统的详细信息,包括版本、发行版名称等。

以上命令可以帮助你快速查看当前的系统版本。如果你有任何具体问题,告诉我,我可以进一步帮助解答!

ubuntu软件包下载在不同 CPU 架构下的下载项。
你应该下载哪个,取决于你现在使用的设备/操作系统的 CPU 架构。

下面是简单判断方法:

架构 适用设备/系统
amd64 绝大多数 64 位桌面/笔记本 PC,Windows、Linux、Mac(Intel)都可能用这个
i386 老旧 32 位 PC(如果你的系统是 32 位 Linux/Windows)
arm64 (aarch64) 新款 ARM 设备:树莓派 4/5、华为、安卓手机、苹果 M1/M2/M3
armhf 旧款树莓派、某些低功耗 ARM 设备(32 位 ARM)
riscv64 RISC-V 开发板、嵌入式系统(一般人不用)
ppc64el IBM POWER/企业服务器
s390x IBM 大型机(基本只在大型企业)

如果你是普通电脑用户,用的是 Windows/Linux 64 位 PC → 选 amd64

如果是苹果 M 系列 Mac → arm64

如果是树莓派:

  • 树莓派 4/5 使用 64 位系统 → arm64
  • 老款 32 位 → armhf
相关推荐
vvw&2 小时前
如何在 Ubuntu 上安装 PostgreSQL
linux·运维·服务器·数据库·ubuntu·postgresql
ShiinaKaze2 小时前
Ubuntu 18.04 XRDP 黑屏
ubuntu·xrdp
小跌—2 小时前
Linux:多路转接
linux·网络
csdn_aspnet2 小时前
如何在 Mac、Ubuntu、CentOS、Windows 上安装 MySQL 客户端
linux·windows·mysql·macos·centos
铭哥的编程日记2 小时前
【Linux网络】传输层协议UDP
linux·网络·udp
x_lrong3 小时前
Linux虚拟机配置jupyter环境并在宿主机访问
linux·运维·笔记·jupyter·虚拟机
羚羊角uou3 小时前
【Linux网络】Socket编程TCP-实现Echo Server(上)
linux·运维·服务器
爱奥尼欧3 小时前
【Linux笔记】网络部分——数据链路层mac-arp
linux·网络·笔记
Evan_ZGYF丶3 小时前
深入解析CFS虚拟运行时间:Linux公平调度的核心引擎
linux·驱动开发·嵌入式·bsp