igozhang

——

    数据库客户端安装

    本文档记录各数据库客户端在目标主机上的安装位置、依赖与验证方法

    项目 说明
    目标主机 igohost01(Ubuntu 20.04.6 LTS,x86_64)
    安装数据盘 /data
    安装包备份约定 各产品独立目录,例如 /data/oracle19c
    文档维护 每新增一种客户端,增加独立章节

    1. Oracle 19c Instant Client

    1.1 环境与选型

    操作系统 Ubuntu 20.04.6 LTS(Focal)
    架构 x86_64
    产品形态 Instant Client 19.26(Basic + SQL*Plus)
    安装目录 /data/oracle/instantclient_19_26
    安装包备份 /data/oracle19c
    环境脚本 /data/oracle/oracle_env.sh
    TNS 目录 /data/oracle/instantclient_19_26/network/admin

    未选用完整 Client,Instant Client 体积小、满足常见连接与 sqlplus 运维需求。

    1.2 目录与权限

    /data 属主为 root,需用 sudo 创建目录并授权给操作用户(示例用户:igo):

    sudo mkdir -p /data/oracle19c /data/oracle
    sudo chown -R igo:igo /data/oracle19c /data/oracle
    

    1.3 系统依赖

    已确认需要:

    • libaio1(运行库)
    • unzip(解压 zip 安装包)
    • wgetcurl(下载)

    安装 unzip

    sudo apt-get install -y unzip
    

    说明:本机 apt 源中未找到 libnsl2;当前环境 sqlplus 可正常启动,若日后出现 libnsl.so.1 缺失,再补装对应 NIS 库包。

    1.4 下载安装包(并备份)

    官方包(需接受 Oracle 许可 Cookie):

    作用 URL
    Basic 核心运行库(libclntsh 等),提供 OCI 连接能力,是 Instant Client 的基础包,几乎所有场景都要装 https://download.oracle.com/otn_software/linux/instantclient/1926000/instantclient-basic-linux.x64-19.26.0.0.0dbru.zip
    SQL*Plus 命令行客户端工具 sqlplus,用于登录库、执行 SQL/脚本;依赖 Basic,需叠加安装 https://download.oracle.com/otn_software/linux/instantclient/1926000/instantclient-sqlplus-linux.x64-19.26.0.0.0dbru.zip

    下载到备份目录(两个包都要下;仅 Basic 可连库但无 sqlplus,仅 SQL*Plus 无法单独运行):

    cd /data/oracle19c
    wget -c --tries=0 \
      -O instantclient-basic-linux.x64-19.26.0.0.0dbru.zip \
      "https://download.oracle.com/otn_software/linux/instantclient/1926000/instantclient-basic-linux.x64-19.26.0.0.0dbru.zip"
    
    wget -c --tries=0 \
      -O instantclient-sqlplus-linux.x64-19.26.0.0.0dbru.zip \
      "https://download.oracle.com/otn_software/linux/instantclient/1926000/instantclient-sqlplus-linux.x64-19.26.0.0.0dbru.zip"
    

    备份目录中应保留上述两个 zip,便于重装或复制到其他主机。

    1.5 解压安装

    cd /data/oracle
    unzip -oq /data/oracle19c/instantclient-basic-linux.x64-19.26.0.0.0dbru.zip
    unzip -oq /data/oracle19c/instantclient-sqlplus-linux.x64-19.26.0.0.0dbru.zip
    

    解压后得到:/data/oracle/instantclient_19_26(内含 sqlpluslibclntsh.so* 等)。

    1.6 环境变量

    创建 /data/oracle/oracle_env.sh

    export ORACLE_HOME=/data/oracle/instantclient_19_26
    export TNS_ADMIN=/data/oracle/instantclient_19_26/network/admin
    export LD_LIBRARY_PATH=/data/oracle/instantclient_19_26${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
    export PATH=/data/oracle/instantclient_19_26${PATH:+:$PATH}
    

    并创建 TNS 配置目录:

    mkdir -p /data/oracle/instantclient_19_26/network/admin
    

    当前用户持久化(示例:igo~/.bashrc):

    # Oracle Instant Client 19c
    [ -f /data/oracle/oracle_env.sh ] && . /data/oracle/oracle_env.sh
    

    新开 shell 或执行 source /data/oracle/oracle_env.sh 后生效。

    1.7 sqlnet.ora(本环境必须)

    本机到目标库 1521 端口可达,但未配置时会出现:

    ORA-12637: Packet receive failed
    

    原因:SQL*Net 默认可能使用 TCP 紧急数据(OOB,Out-of-Band) 做取消/中断信号;途经防火墙、NAT、负载均衡等设备时,OOB 常被剥离或改写,导致收包失败。

    本环境处理:在 $TNS_ADMIN/sqlnet.ora 关闭 OOB(本机连库必需):

    cat > /data/oracle/instantclient_19_26/network/admin/sqlnet.ora <<'EOF'
    DISABLE_OOB=ON
    DIAG_ADR_ENABLED=OFF
    SQLNET.AUTHENTICATION_SERVICES=(NONE)
    EOF
    
    参数 说明
    DISABLE_OOB=ON 禁用 OOB,避免 ORA-12637;本环境必须
    DIAG_ADR_ENABLED=OFF 关闭 ADR 诊断目录写入,减少无关日志
    SQLNET.AUTHENTICATION_SERVICES=(NONE) 使用用户名密码认证,不做 OS 外部认证

    说明:这不是 Oracle 全局强制项,而是当前网络路径下的必需客户端配置;换到直连、无中间设备的环境后,有时可不设,但建议保留以降低同类故障。

    1.8 验证

    . /data/oracle/oracle_env.sh
    sqlplus -V
    

    预期输出类似:

    SQL*Plus: Release 19.0.0.0.0 - Production
    Version 19.26.0.0.0
    

    连接数据库示例(需已配置上一节 sqlnet.ora):

    echo "SELECT USER FROM dual;" | sqlplus -L -S user/password@//db_host:1521/service_name
    

    如需本地服务名,将 tnsnames.ora 放到 $TNS_ADMIN(即 network/admin)下。

    1.9 安装结果摘要

    路径 说明
    /data/oracle19c/*.zip 安装包备份
    /data/oracle/instantclient_19_26 客户端运行目录
    /data/oracle/oracle_env.sh 环境变量脚本
    /data/oracle/instantclient_19_26/network/admin TNS / sqlnet 配置目录
    /data/oracle/instantclient_19_26/network/admin/sqlnet.ora DISABLE_OOB=ON(本环境必须)

    连库查询(用 sqlplus 按明文账号连上 Oracle,查询指定表中 workipaddr 等于末尾 <work_ip> 的记录;需替换的参数为:<table_name>、、<db_host>、<service_name>、<work_ip>。 SET PAGESIZE 200 控制每页行数,SET LINESIZE 300 控制每行显示宽度)

    bash -c 'printf "%s\n" "SET PAGESIZE 200" "SET LINESIZE 300" "SELECT * FROM <table_name> WHERE workipaddr='\''$0'\'';" "EXIT" | sqlplus -L -S <username>/<password>@//<db_host>:1521/<service_name>' <work_ip>
    

    2. 其他数据库客户端(预留)

    后续 MySQL、PostgreSQL、SQL Server 客户端时:

    1. 安装包备份到 /data/<产品标识>/
    2. 软件安装到 /data/<产品>/ 或发行版默认路径

    MP3