在进行Oracle数据库故障排查前,需完成以下基础准备工作,确保排查方向明确且高效:
Oracle服务的运行状态是数据库可用的前提,需优先验证:
SELECT instance_name, status FROM v$instance;,确认实例处于OPEN状态。若状态为MOUNTED或SHUTDOWN,需进一步检查启动日志。lsnrctl status命令查看监听器是否运行(显示“RUNNING”),并确认监听端口(默认1521)是否监听正确服务名。若监听未启动,执行lsnrctl start启动。Oracle错误日志包含详细的故障信息,是排查问题的核心线索:
$ORACLE_BASE/diag/rdbms/<db_name>/<instance_name>/trace/,其中alert_<instance_name>.log为关键告警文件。tail -f alert_<instance_name>.log实时监控最新日志,或通过SQL查询默认跟踪文件路径:SELECT * FROM v$diag_info WHERE name = 'Default Trace File';。系统资源不足(内存、磁盘、CPU)会导致数据库性能下降甚至崩溃:
free -m查看物理内存与交换空间(Swap)使用率,若Swap使用率过高(>20%),需扩展物理内存。df -h检查数据库文件所在分区(如/u01/app/oracle)的剩余空间,确保至少保留10%以上空闲空间。top或htop查看CPU占用率,若某进程长期占用过高(>80%),需进一步分析该进程的SQL活动。错误的参数设置可能导致性能问题或功能失效:
SHOW PARAMETERS;,重点检查以下关键参数:
SGA_TARGET/PGA_AGGREGATE_TARGET:内存分配是否合理(建议占总内存的70%-80%);PROCESSES/SESSIONS:进程/会话数是否满足并发需求;OPEN_CURSORS:游标数是否足够(避免应用频繁打开/关闭游标)。init.ora或spfile.ora文件(位于$ORACLE_HOME/dbs/)中的参数设置是否正确,避免手动修改导致的配置冲突。表空间或数据文件损坏会导致数据库无法正常运行:
SELECT tablespace_name, status FROM dba_tablespaces;,确保所有表空间状态为ONLINE。SELECT file_name, status FROM dba_data_files;,若数据文件状态为OFFLINE,需使用ALTER DATABASE DATAFILE '<file_path>' ONLINE;将其恢复在线。SELECT tablespace_name, ROUND((1-(free_space/tablespace_size))*100,2) "Usage%" FROM (SELECT tablespace_name, SUM(bytes)/1024/1024 tablespace_size FROM dba_data_files GROUP BY tablespace_name), (SELECT tablespace_name, SUM(bytes)/1024/1024 free_space FROM dba_free_space GROUP BY tablespace_name) WHERE tablespaces_name = tablespace_name;,若使用率超过80%,需扩展表空间或清理无用数据。tnsnames.ora文件中服务名配置错误或未配置。解决方法:检查$ORACLE_HOME/network/admin/tnsnames.ora文件,确保服务名与数据库实例名一致。lsnrctl status确认实例是否在监听列表中,若未注册,重启数据库或监听器。alert.log确认启动进度,若为控制文件问题,使用CREATE CONTROLFILE命令重建。SELECT blocking_session, sid, serial#, wait_class, seconds_in_wait FROM v$session WHERE blocking_session IS NOT NULL;识别阻塞会话,使用ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;终止阻塞会话(谨慎操作)。ALTER TABLESPACE undotbs1 ADD DATAFILE '/path/to/new_file.dbf' SIZE 1G;),或优化查询减少事务执行时间。SHARED_POOL_SIZE参数,或使用SQL Plan Baseline固定执行计划。ALTER DATABASE DATAFILE '/path/to/file.dbf' RESIZE 2G;)或新增数据文件。rm -rf /tmp/*),或修改数据文件所在目录的权限(chown oracle:oinstall /u01/app/oracle)。ADR是Oracle 11g及以上版本引入的集中式诊断工具,用于收集、管理故障数据:
SELECT value FROM v$diag_info WHERE name = 'ADR Home';,获取ADR根目录。adrci命令行工具分析故障,常用命令:adrci> show incident;(查看故障事件)、adrci> ips pack incident_id=12345;(打包故障数据)。SQL Trace用于捕获SQL语句的执行细节,TKPROF用于格式化跟踪文件:
ALTER SESSION SET sql_trace = TRUE;或EXEC DBMS_SESSION.SESSION_TRACE_ENABLE;,开启当前会话的Trace。tkprof <trace_file.trc> <output_file.txt> explain=username/password,生成易读的执行计划与统计信息。AWR(自动工作负载存储库)用于收集系统性能数据,ADDM(自动数据库诊断监视器)用于分析AWR数据并提供优化建议:
SELECT output FROM TABLE(dbms_workload_repository.awr_report_html(<dbid>, <instance_num>, <begin_snap_id>, <end_snap_id>));,获取HTML格式的性能报告。dbms_addm.analyze_awr包生成,重点关注“Top Findings”中的优化建议。SELECT COUNT(*) FROM v$transaction;),避免数据丢失。