• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
SilentSamsara
博客园    首页    新随笔    联系   管理    订阅  订阅

Oracle 数据库连接失败问题排查

Oracle 数据库连接失败问题排查

问题现象

应用启动正常,业务功能在此前一段时间内一直可以正常访问 Oracle 数据库。

在运行过程中,当应用执行数据表信息查询操作时,突然出现数据库访问异常,具体表现为:

  • 页面或接口在查询数据库表数据时失败
  • 应用日志中出现数据库连接异常
  • 原本正常的 SQL 查询无法执行

应用日志报错信息如下:

Failed to initialize pool: IO Error: The Network Adapter could not establish the connection
com.zaxxer.hikari.pool.HikariPool$PoolInitializationException

该问题并非发生在应用启动阶段,而是在应用运行过程中访问 Oracle 数据库时触发。

补充说明

  • 问题发生前,应用已稳定运行
  • 应用侧代码及配置近期无变更
  • Oracle 数据库由公司其他人员维护,非当前人员日常负责范围
  • 应用侧无法主动恢复数据库连接

环境信息

  • 数据库:Oracle 19c
  • 操作系统:Linux
  • Oracle 运行用户:zzyoradmin
  • 监听端口:1521
  • 数据库实例:ORCLCDB
  • PDB:ORCLPDB1
  • 业务 Service:CAIWU / ORCLJIAOWU
  • 连接池:HikariCP

问题定位过程

  1. 网络连通性确认

    • 数据库 IP 可 ping 通

    • 网络层无异常

  2. Listener 状态检查

    lsnrctl status
    

    返回:

    TNS-12541: TNS:no listener
    Linux Error: 111: Connection refused
    

结论:Oracle Listener 未启动。

  1. 启动 Listener 失败原因分析

    lsnrctl start
    

    报错:

    Permission denied
    cannot open log file
    .../network/log/listener.log
    

    检查监听日志目录:

    ls -ld /opt/oracle/product/19c/dbhome_1/network/log
    

    发现:

    • 目录属主为 zzyoradmin
    • Listener 实际由 oracle 用户尝试启动
    • 用户不一致,导致无写权限

    结论:Oracle 运行用户不统一,监听进程启动用户与 ORACLE_HOME 实际属主不一致。

  2. 统一运行用户并修复权限

    将监听日志目录权限调整为 Oracle 实际运行用户:

    chown zzyoradmin:oinstall /opt/oracle/product/19c/dbhome_1/network/log
    

    随后使用 zzyoradmin 用户 启动 Listener:

    su - zzyoradmin
    lsnrctl start
    

    Listener 成功启动,1521 端口正常监听。

  3. 数据库实例状态检查

    select instance_name, status from v$instance;
    

    返回:

    ORA-01034: ORACLE not available
    

    结论:数据库实例未启动。

最终处理步骤

  1. 使用 zzyoradmin 启动数据库实例

    export ORACLE_SID=ORCLCDB
    sqlplus / as sysdba
    startup;
    
  2. 注册服务到 Listener

    alter system register;
    
  3. 打开 PDB

    alter pluggable database all open;
    

根因总结

  1. Oracle Listener 未启动
    • 启动用户与 ORACLE_HOME 实际属主不一致
    • 监听日志目录无写权限导致监听启动失败
  2. Oracle 数据库实例未启动
    • Listener 启动后仍无法提供数据库服务

经验与规范建议

  1. Oracle 相关进程(Listener / DB)必须统一由同一操作系统用户管理
  2. ORACLE_HOME、diagnostic、datafile 目录属主应保持一致
  3. 启动顺序规范:
    1. 启动 Listener
    2. 启动数据库实例
    3. 打开 PDB
  4. 应用连接报错优先从数据库环境排查

结论

该问题本质是 Oracle 运行用户不统一,导致监听启动失败,同时数据库实例未启动,与应用代码无关。

posted @ 2026-01-22 11:06  SilentSamsara  阅读(3)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3