温馨提示×

Ubuntu Oracle如何解决常见错误

小樊
43
2025-12-18 18:22:33
栏目: 云计算

Ubuntu 上 Oracle 常见错误与解决

一 环境准备与权限检查

  • 创建用户与组:建议以 root 执行,创建 oracle 用户及 oinstall、dba 组,设置安装目录属主为 oracle:oinstall,权限 0755
  • 内核与资源:确保 内存、交换分区 满足最低要求;必要时调整内核参数与用户资源限制。
  • 依赖包:安装常见依赖(示例)
    sudo apt-get update
    sudo apt-get install -y binutils libcap-dev gcc g++ make libaio1 libaio-dev libstdc++6 libxi6 libxtst6 sysstat unzip ksh
  • 环境变量:在 ~/.bashrc/etc/profile 中设置(示例)
    export ORACLE_HOME=/opt/oracle/product/11.2.0/dbhome_1
    export ORACLE_SID=orcl
    export PATH=$ORACLE_HOME/bin:$PATH
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
    source ~/.bashrc
  • 时间同步:避免与 Windows 双系统时间漂移
    sudo apt-get install -y ntpdate
    sudo ntpdate time.windows.com
    sudo hwclock --localtime --systohc
    以上步骤可显著降低安装与启动阶段的基础性报错概率。

二 安装阶段高频错误与修复

  • 链接器错误(ins_rdbms.mk 的 kfod/amdu 目标):
    编辑 $ORACLE_HOME/rdbms/lib/env_rdbms.mk,在对应链接行(KFOD_LINKLINE/AMDU_LINKLINE)中加入 -Wl,–no-as-needed,再重试安装/链接。
  • 找不到 64 位库(libpthread_nonshared.a、libc_nonshared.a):
    sudo mkdir -p /usr/lib64
    sudo ln -s /usr/lib/x86_64-linux-gnu/libpthread_nonshared.a /usr/lib64/
    sudo ln -s /lib/x86_64-linux-gnu/libc_nonshared.a /usr/lib64/
  • ctxhx 目标失败(字符集相关):
    sudo apt-get install -y gcc-multilib libstdc++5
  • emdctl 目标失败(代理组件):
    安装/修复编译工具与依赖后重试,必要时检查 $ORACLE_HOME/sysman/lib/ins_emagent.mk 日志定位具体缺失项。
  • ins_net_client.mk 失败(网络客户端):
    安装 gcc 等基础编译工具后重试。
  • 目录无法创建(权限/父目录不存在):
    预先以 root 创建目录并赋权:sudo mkdir -p /your/oracle/base /your/oracle/home && sudo chown -R oracle:oinstall /your/oracle
    以上为 Ubuntu 上安装 11g/10g 的常见 Makefile/依赖报错及对应修复要点。

三 监听与连接类错误

  • 命令未找到(lsnrctl/sqlplus):检查 ORACLE_HOME/bin 是否在 PATH,执行 source 使环境变量生效。
  • ORA-12162 TNS:net service name is incorrectly specified:未设置 ORACLE_SID,执行 export ORACLE_SID=orcl(写入 profile 持久化)。
  • ORA-12514 TNS:listener does not currently know of service requested in connect descriptor:在 $ORACLE_HOME/network/admin/listener.oraSID_LIST_LISTENER 中显式注册 SID:
    SID_LIST_LISTENER =
    (SID_LIST =
    (SID_DESC =
    (SID_NAME = orcl)
    (ORACLE_HOME = /opt/oracle/product/11.2.0/dbhome_1)
    )
    )
    然后重启监听:lsnrctl stop && lsnrctl start。
  • ORA-12505 TNS:listener does not currently know of SID given in connect descriptor:核对 listener.oratnsnames.ora 中的 SID/服务名 一致,并确保监听已启动。
  • EM/DB Console 无法启动(OC4J Configuration issue 或监听未注册):先确保监听运行,再执行重建:
    emca -config dbcontrol db -repos recreate
    若提示监听未启动或数据库未注册,先 lsnrctl start,必要时设置 ORACLE_HOSTNAME=localhost 后再启动 EM。
    以上步骤覆盖最常见的监听未注册、SID 不匹配与 EM 配置问题。

四 运行维护与诊断

  • 日志定位:优先查看告警日志
    tail -f $ORACLE_BASE/diag/rdbms///trace/alert_.log
  • 监听与服务状态:
    lsnrctl status
    ps -ef | grep pmon
    sqlplus / as sysdba(进入后执行 startup/select status from v$instance;)
  • 资源与网络:
    free -m、df -h、top;ping/traceroute;netstat -tulpen | grep 1521
  • 参数与空间:
    show parameter sga; show parameter pga;
    select tablespace_name, status, contents from dba_tablespaces;
  • 变更后重启:先停监听,再启库,最后启监听;必要时使用 ADR/SQL Trace 做进一步诊断。
    以上流程有助于快速定位实例、监听、资源与网络层面的运行问题。

五 sqlplus 使用体验优化

  • 方向键乱码(readline 不兼容):在 sqlplus 前设置终端类型
    export TERM=xterm
    或使用 rlwrap sqlplus / as sysdba 获得完整行编辑能力。
  • 共享库加载失败(libsqlplus.so 等):检查 LD_LIBRARY_PATH 包含 $ORACLE_HOME/lib,并确认目录权限对 oracle 用户可读可执行。
    以上可显著改善日常命令行交互体验。

0