CentOS 上 Oracle 配置错误的定位与修复指南
一、快速定位与通用检查
二、常见错误与对应修复
| 症状与错误码 | 高频原因 | 修复要点 |
|---|---|---|
| 监听或实例起不来,报 ORA-00119 / ORA-00130 | LOCAL_LISTENER 或 listener.ora/tnsnames.ora 中的 HOST 配置错误(主机名不可达、写错 IP、改过主机名未同步) | 将两处文件中的 HOST 改为服务器可用地址(推荐服务器的 静态 IP 或可解析的主机名);确保 /etc/hosts 有 IP <-> 主机名 映射;必要时把 .local_listener 改为显式地址:‘(ADDRESS=(PROTOCOL=TCP)(HOST=你的IP)(PORT=1521))’*,并用 create pfile from spfile; 修改后再 create spfile from pfile; startup 生效。 |
| 本地能连,远程连不通 | 监听仅绑定 127.0.0.1 或 HOST 写成主机名但解析到错误网卡;防火墙未放行 1521 | 将 listener.ora 的 HOST 设为服务器 对外 IP;在 /etc/hosts 明确映射;开放 1521/tcp;客户端 tnsnames.ora 的 HOST 与服务器一致。 |
| 启动报 ORA-01078 / LRM-00109 找不到 init |
ORACLE_SID 与实际的 SID 不一致,或 $ORACLE_HOME/dbs 缺少相应 pfile/init.ora | 在 oracle 用户下核对 echo $ORACLE_SID;若缺失,可用 create pfile from spfile; 生成基础模板,再按需编辑并 create spfile from pfile; startup。 |
| 共享内存创建失败 ORA-27125 / Linux Error 28 | kernel.shmall、kernel.shmmax 等内核参数过小或系统内存/交换不足 | 增大 /etc/sysctl.conf 的 kernel.shmall、kernel.shmmax(可按内存大小计算),并执行 sysctl -p;必要时增加 swap。 |
| 安装/运行期报 semmni 等内核参数校验失败 | /etc/sysctl.conf 未正确设置 kernel.sem(如 250 32000 100 128 的最后一位为 semmni) | 在 sysctl.conf 中设置 kernel.sem=250 32000 100 128 后 sysctl -p 生效。 |
| dbstart/dbshut 无效或报错 | $ORACLE_HOME_LISTENER 取值错误或 /etc/oratab 中实例未设为 Y | 编辑 $ORACLE_HOME/bin/dbstart/dbshut,将 ORACLE_HOME_LISTNER=$1 改为 ORACLE_HOME_LISTNER=$ORACLE_HOME;在 /etc/oratab 将实例行末尾改为 Y(如:orcl:/u01/app/oracle/product/19.3/dbhome_1:Y)。 |
三、网络与主机名配置要点
四、监听与客户端配置示例
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.38.39)(PORT = 1521))
)
)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.38.39)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
*.local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.38.39)(PORT=1521))'
五、服务启动与自启建议