Ubuntu下Oracle数据库故障排查步骤
记录故障的具体表现(如连接失败、SQL执行慢、数据库挂起)、发生频率(持续性/偶发性)、影响范围(单会话/全局),以及问题出现的时间段。这有助于缩小排查范围,例如偶发性连接失败可能与网络波动有关,而全局SQL慢可能与系统资源不足或SQL执行计划不佳相关。
systemctl命令确认Oracle数据库服务是否运行,若未运行则启动服务:sudo systemctl status oracle(查看状态)、sudo systemctl start oracle(启动服务)。lsnrctl命令检查监听器是否监听正确端口(默认1521),若未运行则启动:lsnrctl status(查看状态)、lsnrctl start(启动监听器)。Oracle的错误日志是故障排查的核心线索,其中Alert Log记录了数据库启动、关闭及关键错误信息,Trace文件包含详细的进程错误详情:
$ORACLE_BASE/diag/rdbms/<db_name>/<instance_name>/trace/alert_<instance_name>.log;tail -f命令实时监控日志更新,快速定位错误关键词(如ORA-01090、ORA-12560)。使用Ubuntu系统工具排查资源瓶颈:
free -m查看内存使用量,重点关注available字段(可用内存);df -h检查磁盘分区剩余空间,确保/u01(Oracle安装目录)、$ORACLE_HOME等目录所在分区有足够空间;top或htop查看CPU占用率,若某进程长期占用过高(如超过80%),可能影响数据库性能。sqlplus / as sysdba),执行SELECT instance_name, status FROM v$instance;,确认实例状态为OPEN(正常运行)。若状态为MOUNTED或CLOSED,需进一步检查控制文件或启动脚本;SELECT tablespace_name, status FROM dba_tablespaces;查看表空间状态,确保所有表空间均为ONLINE(在线)。若有表空间为OFFLINE,需检查对应数据文件是否损坏或丢失。ping命令测试客户端与数据库服务器之间的网络连通性,若不通需排查网络线路或防火墙;listener.ora文件(位于$ORACLE_HOME/network/admin),确认HOST(服务器IP/域名)和PORT(监听端口,默认1521)配置正确;tnsnames.ora文件,确保SERVICE_NAME(服务名)与数据库实例的服务名一致,可通过lsnrctl service命令查看服务名。adrci命令查看诊断信息(如adrci> show incident);@?/rdbms/admin/awrrpt.sql(AWR报告)、@?/rdbms/admin/ashrpt.sql(ASH报告);ALTER SESSION SET sql_trace = TRUE;开启,结束后用tkprof工具分析生成的.trc文件。ALTER TABLESPACE <tablespace_name> ADD DATAFILE '/path/to/new_file.dbf' SIZE 1G;)或清理无用数据;ALTER SYSTEM SET sga_target=2G SCOPE=BOTH;)、优化SQL语句(添加索引、避免全表扫描)、检查锁争用(SELECT * FROM v$lock;)。