首先明确故障现象(如数据库无法连接、性能下降、报错等),记录故障发生的时间、持续时长、影响范围(如影响的业务模块、用户)。这一步是后续排查的基础,有助于聚焦问题范围。
日志是故障诊断的“黄金线索”,需重点检查以下日志:
$ORACLE_BASE/diag/rdbms/db_name/instance_name/trace目录,记录数据库启动、关闭及运行时的关键错误(如ORA-错误)。可使用tail -f实时查看或grep "ORA-"过滤错误信息。ls -lt按时间排序,优先查看最新生成的跟踪文件。/var/log/messages或dmesg,查看是否有系统级错误(如内存不足、磁盘故障),这些错误可能间接影响Oracle运行。监听器负责客户端与数据库的连接,若监听器未启动或异常,会导致连接失败。使用以下命令检查:
lsnrctl status # 查看监听器状态(是否运行、监听端口、注册的实例)
lsnrctl start # 若未启动,启动监听器
若监听器无法启动,需检查listener.ora配置文件(位于$ORACLE_HOME/network/admin)的语法是否正确(如主机名、端口配置)。
资源不足(CPU、内存、磁盘)是Oracle性能问题的常见诱因,需通过以下命令检查:
top(按1查看每个CPU核心的使用情况,按M按内存排序)、mpstat -P ALL 2 5(查看每个CPU的详细使用率)。free -m(查看物理内存和交换分区使用量)、vmstat 1(查看内存交换、I/O等待情况,si/so不为0表示内存不足)。df -h(查看文件系统使用率,避免/u01/app/oracle等Oracle目录所在分区满)。iostat -x 1(查看磁盘读写延迟、利用率,await过高表示I/O瓶颈)。确认Oracle实例是否正常运行:
sqlplus / as sysdba
SELECT instance_name, status FROM v$instance; -- 检查实例状态(应为OPEN)
若状态为MOUNTED或NOMOUNT,需检查控制文件、数据文件是否完整(如SELECT name FROM v$datafile;),并尝试恢复实例。
SELECT s.sid, s.serial#, s.username, s.status, l.type, l.lmode, l.request
FROM v$lock l, v$session s
WHERE l.sid = s.sid AND l.request > 0; -- 查找等待锁的会话
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE; -- 终止阻塞会话
@?/rdbms/admin/awrrpt.sql)或ASH报告分析慢SQL,使用tkprof格式化跟踪文件(tkprof trace_file.trc output.txt),定位执行慢的SQL语句及执行计划。检查Oracle关键配置文件的正确性:
HOST = linux_host、PORT = 1521)是否正确。SERVICE_NAME、HOST)是否指向正确的数据库实例。SGA_TARGET、PGA_AGGREGATE_TARGET)是否符合当前系统资源情况(如内存大小)。oracle)对数据文件、日志文件、控制文件有读写权限(chown -R oracle:oinstall /u01/app/oracle,chmod -R 750 /u01/app/oracle)。/u01/app/oracle/oradata)是否正常挂载(mount | grep u01),避免因挂载失败导致数据无法访问。adrci命令查看警报日志、跟踪文件(adrci show alert -tail -f)。@?/rdbms/admin/awrrpt.sql生成AWR报告(分析性能瓶颈),@?/rdbms/admin/ashrpt.sql生成ASH报告(实时会话活动)。ALTER SESSION SET SQL_TRACE = TRUE;),记录会话的SQL执行细节,使用tkprof格式化分析。根据排查结果采取对应措施:
lsnrctl start)。ALTER TABLESPACE users ADD DATAFILE '/u01/app/oracle/oradata/users02.dbf' SIZE 1G;)。SGA_TARGET)。若以上步骤无法解决问题,收集相关日志(alert.log、跟踪文件、AWR报告),联系Oracle官方技术支持(My Oracle Support)寻求帮助。