温馨提示×

如何解决centos oracle配置错误

小樊
43
2025-11-21 20:33:18
栏目: 云计算

CentOS 上 Oracle 配置错误的定位与修复指南

一、快速定位与通用检查

  • 明确症状:是本地无法登录(如 sqlplus 报错)、远程连不通(客户端报 TNS 或超时)、还是监听/实例起不来(告警日志报错)。
  • 检查监听与实例状态:
    • 查看监听:执行 lsnrctl status;必要时 lsnrctl start
    • 查看实例:以 sqlplus / as sysdba 登录后执行 startup
  • 核对网络与端口:
    • 本机连通性:如 ping <数据库主机>;端口探测:nc -vz <主机> 1521
    • 防火墙放行:
      • firewalld:firewall-cmd --permanent --add-port=1521/tcp && firewall-cmd --reload
      • 如使用 iptables:放行 -A INPUT -p tcp --dport 1521 -j ACCEPT 并保存。
  • 客户端与服务器端配置:确认 $ORACLE_HOME/network/admin 下的 listener.ora、tnsnames.ora、sqlnet.ora 存在且语法正确;必要时用 tnsping <服务名> 验证解析。
  • 系统与安全策略:
    • SELinux:临时排查可用 setenforce 0;生产环境请改为精确策略而非永久关闭。
    • 资源限制:检查 /etc/security/limits.conf 中 oracle 用户的 nofile、nproc 等限制。
  • 日志优先:优先查看 $ORACLE_HOME/diag/tnslsnr/<监听名>/trace/listener.log$ORACLE_BASE/diag/rdbms/<实例名>/<实例名>/trace/alert_<实例名>.log,从报错行号与时间点回溯根因。

二、常见错误与对应修复

症状与错误码 高频原因 修复要点
监听或实例起不来,报 ORA-00119 / ORA-00130 LOCAL_LISTENERlistener.ora/tnsnames.ora 中的 HOST 配置错误(主机名不可达、写错 IP、改过主机名未同步) 将两处文件中的 HOST 改为服务器可用地址(推荐服务器的 静态 IP 或可解析的主机名);确保 /etc/hostsIP <-> 主机名 映射;必要时把 .local_listener 改为显式地址:‘(ADDRESS=(PROTOCOL=TCP)(HOST=你的IP)(PORT=1521))’*,并用 create pfile from spfile; 修改后再 create spfile from pfile; startup 生效。
本地能连,远程连不通 监听仅绑定 127.0.0.1HOST 写成主机名但解析到错误网卡;防火墙未放行 1521 listener.oraHOST 设为服务器 对外 IP;在 /etc/hosts 明确映射;开放 1521/tcp;客户端 tnsnames.oraHOST 与服务器一致。
启动报 ORA-01078 / LRM-00109 找不到 init.ora 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.confkernel.shmall、kernel.shmmax(可按内存大小计算),并执行 sysctl -p;必要时增加 swap
安装/运行期报 semmni 等内核参数校验失败 /etc/sysctl.conf 未正确设置 kernel.sem(如 250 32000 100 128 的最后一位为 semmni sysctl.conf 中设置 kernel.sem=250 32000 100 128sysctl -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)。

三、网络与主机名配置要点

  • 使用固定且可达的 IP 作为 listener.ora/tnsnames.ora 中的 HOST,避免仅用可能漂移的主机名。
  • 正确设置主机名与解析:
    • 设置主机名:hostnamectl set-hostname <你的主机名>(或编辑 /etc/hostname)。
    • /etc/hosts 增加行:<服务器IP> <你的主机名>(可同时保留 127.0.0.1 localhost)。
  • 多网卡环境明确绑定:如虚拟机/云主机有多块网卡,务必让 HOST 指向用于数据库通信的那块网卡 IP

四、监听与客户端配置示例

  • 服务器端 listener.ora(示例):
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.38.39)(PORT = 1521))
        )
      )
    
  • 客户端 tnsnames.ora(示例):
    ORCL =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.38.39)(PORT = 1521))
        (CONNECT_DATA =
          (SERVICE_NAME = orcl)
        )
      )
    
  • 若使用 LOCAL_LISTENER 显式注册:
    • pfile 中设置:
      *.local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.38.39)(PORT=1521))'
      
    • 然后执行:create spfile from pfile; startup

五、服务启动与自启建议

  • 手工启停(oracle 用户):
    • 启动监听:lsnrctl start
    • 启动数据库:sqlplus / as sysdbastartup
    • 关闭顺序相反:shutdown immediatelsnrctl stop
  • 开机自启:
    • 使用 /etc/oratab 将实例标记为 Y,并确保 dbstart/dbshut 中的 ORACLE_HOME_LISTNER=$ORACLE_HOME;如需系统级服务,可编写 systemd unit 调用上述脚本。
  • 19c/18c 常见补充:如安装或运行 EM Express,同时放行 5500/tcp 等端口。

0