- 首页 >
- 问答 >
-
云计算 >
- Ubuntu Oracle如何解决常见错误
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.ora 的 SID_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.ora 与 tnsnames.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 用户可读可执行。
以上可显著改善日常命令行交互体验。