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 内容)给出更精确的修复步骤。