首先明确故障现象(如数据库无法连接、性能骤降、报错信息等),记录故障发生时间、持续时长、影响范围(如特定业务模块、所有用户)。这一步是后续排查的基础,有助于聚焦问题方向。
日志是故障定位的关键线索,需重点检查以下日志:
$ORACLE_BASE/diag/rdbms/db_name/instance_name/trace目录,记录数据库启动、关闭及运行时错误(如ORA-开头的错误)。可通过tail -f alert_sid.log实时查看最新日志,或用grep "ORA-" alert_sid.log过滤错误信息。ora_12345.trc),记录具体进程的详细错误(如死锁、SQL执行失败)。使用tkprof工具格式化trace文件(如tkprof trace_file.trc output.txt explain username/password@db),便于分析。/var/log/messages或/var/log/syslog,查看是否有系统级错误(如磁盘满、内存不足、进程被杀),这些错误可能间接导致Oracle故障。sqlplus / as sysdba登录,执行SELECT instance_name, status FROM v$instance;。正常状态应为OPEN(正常运行),若为MOUNTED(挂载)或NOMOUNT(未挂载),需进一步检查控制文件或启动脚本。lsnrctl status命令检查监听器是否运行。若未启动,执行lsnrctl start;若监听器存在但无法连接,需检查listener.ora配置文件(位于$ORACLE_HOME/network/admin)中的主机名、端口是否正确。top或ps -eo pid,user,cpu,command --sort=-%cpu | grep ora_命令,找出占用CPU高的Oracle进程(如ora_pmon、ora_dbw0)。若进程持续高CPU,需结合AWR报告分析是否为SQL执行慢导致。free -m查看系统内存剩余,vmstat 1 5查看内存交换(swap)情况。若swap使用率高,说明物理内存不足,需调整Oracle的sga_target或pga_aggregate_target参数。df -h检查数据库文件所在分区(如/u01/app/oracle/oradata)的剩余空间,若剩余空间小于20%,需清理归档日志或临时文件。@?/rdbms/admin/awrrpt.sql生成,分析数据库性能瓶颈(如高负载SQL、等待事件)。报告中“Top 5 Timed Events”部分可快速定位主要性能问题。@?/rdbms/admin/ashrpt.sql生成,查看实时会话活动(如当前正在执行的SQL、等待事件),适用于分析瞬时性能问题。v$session:查看会话状态(如ACTIVE、INACTIVE)、阻塞情况(blocking_session字段);v$sql:查看高负载SQL的执行计划、执行次数;v$lock:查看锁等待(如deadlock死锁),定位阻塞会话。SELECT * FROM v$lock WHERE request>0;找出阻塞会话,执行ALTER SYSTEM KILL SESSION 'sid,serial#';终止阻塞会话。Library Cache Lock等待、硬解析高。优化SQL(减少重复解析)、增大shared_pool_size参数,或执行ALTER SYSTEM FLUSH SHARED_POOL;清空共享池。db file sequential read或db file scattered read等待时间长。优化SQL(添加索引、减少全表扫描)、调整磁盘布局(如将redo logs与数据文件放在不同磁盘)。HOST(主机名)、PORT(端口,默认1521)配置正确,确保与客户端连接信息一致。control_files、db_name、memory_target)是否正确,避免因参数错误导致数据库无法启动。oracle)对数据库文件(数据文件、控制文件、redo logs)、目录($ORACLE_HOME、$ORACLE_BASE)有读写权限。用chown -R oracle:oinstall /u01/app/oracle修改所有权,用chmod -R 750 /u01/app/oracle设置权限。kernel.shmmax应大于SGA大小、fs.file-max应大于Oracle最大文件句柄数)。修改/etc/sysctl.conf后执行sysctl -p生效。若故障导致数据丢失或损坏,使用RMAN(Recovery Manager)进行恢复:
rman target / → RUN { RESTORE DATABASE; RECOVER DATABASE; };rman target / → RUN { RESTORE DATABASE UNTIL SCN 123456; RECOVER DATABASE; }(123456为SCN号)。若以上步骤无法解决问题,收集以下信息联系Oracle官方技术支持:
SELECT * FROM v$version;)、补丁信息。