温馨提示×

Ubuntu上Oracle数据库故障如何排查

小樊
35
2025-12-18 18:31:33
栏目: 云计算

Ubuntu上Oracle数据库故障排查清单

一 快速定位与日志优先

  • 切换到 oracle 用户并确认实例与监听状态:
    • 查看实例:ps -ef | grep ora_pmon;若已存在同名实例,先 shutdown immediate 再启动
    • 查看监听:lsnrctl status;未运行则 lsnrctl start
  • 第一时间查看告警日志,定位根因:
    • 路径:$ORACLE_BASE/diag/rdbms/<DB_NAME>//trace/alert_.log
    • 命令:tail -f alert_.log
  • 同步检查系统资源:内存 free、磁盘空间 df -h、CPU 负载 top,排除资源瓶颈导致的异常。

二 常见故障与处理要点

  • 命令未找到(sqlplus/lsnrctl 不存在)

    • 原因:环境变量未设置或 PATH 未包含 $ORACLE_HOME/bin
    • 处理:在 ~/.bashrc 或 /etc/profile 中设置 ORACLE_HOME、PATH、LD_LIBRARY_PATH,执行 source 使其生效;确认 echo $ORACLE_HOME 与 which sqlplus 正常。
  • ORA-12162 TNS:net service name is incorrectly specified

    • 原因:未设置 ORACLE_SID
    • 处理:export ORACLE_SID=<你的SID> 后重试;建议写入环境变量持久化。
  • ORA-12514 TNS:listener does not currently know of service requested

    • 原因:监听未识别数据库服务(常见于动态注册未生效或配置缺失)
    • 处理:
      • 确认监听已启动:lsnrctl status
      • 在 $ORACLE_HOME/network/admin/listener.ora 的 SID_LIST_LISTENER 中显式注册实例: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = ORCL) (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1) (SID_NAME = ORCL) ) )
      • 重载监听:lsnrctl reload;必要时 lsnrctl stop/start。
  • TNS: no listener(客户端或 Navicat 报错)

    • 原因:监听未启动、配置错误或防火墙阻断
    • 处理:
      • 启动监听:lsnrctl start
      • 核对 listener.ora 中 HOST/PORT(默认端口 1521)与服务器一致
      • 检查服务器防火墙(如 ufw/iptables)是否放行 1521
      • 客户端 tnsnames.ora 的 SERVICE_NAME/HOST/PORT 与服务器一致。
  • 启动失败并伴随 ORA-27102: out of memory

    • 原因:操作系统共享内存等内核参数不足
    • 处理:调大 /proc/sys/kernel/shmmax、/proc/sys/kernel/shmall 等共享内存参数后重启实例。

三 监听与服务配置检查

  • 监听状态与日志

    • 状态:lsnrctl status;启动/停止/重载:lsnrctl start|stop|reload
    • 监听日志与 ADR:位于 ADR_BASE_LISTENER 指定路径,异常时优先查看。
  • 配置文件要点

    • listener.ora(示例): SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = ORCL) (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1) (SID_NAME = ORCL) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) ) )
    • tnsnames.ora(示例): ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )
    • 修改后执行 lsnrctl reload 使配置生效。

四 连接与网络验证

  • 本机连通性:sqlplus sys/@localhost:1521/orcl as sysdba
  • 远程连通性:tnsping ORCL 或在客户端工具中测试
  • 端口监听:ss -lntp | grep 1521 或 netstat -nlpt | grep 1521
  • 防火墙:sudo ufw allow 1521/tcp(或对应防火墙放行规则),并确认云主机安全组策略允许入站。

五 实用命令清单

  • 实例与监听
    • ps -ef | grep ora_pmon
    • lsnrctl status|start|stop|reload
  • 日志与诊断
    • tail -f $ORACLE_BASE/diag/rdbms/<DB_NAME>//trace/alert_.log
    • 进入诊断:adrci
  • 参数与资源
    • SQL> show parameters sga_target pga_aggregate_target processes
    • SQL> select name from v$database;
    • free -h;df -h;top
  • 网络
    • ss -lntp | grep 1521;ping;traceroute
  • 环境
    • echo $ORACLE_HOME $ORACLE_SID $PATH $LD_LIBRARY_PATH

如需,我可以基于你的具体报错(如告警日志片段、lsnrctl status 输出、listener.ora/tnsnames.ora 内容)给出更精确的修复步骤。

0