1. 定位Oracle日志路径
在Linux环境下,Oracle日志的路径需通过数据库视图查询获取,避免硬编码。常用路径查询方法:
SELECT value FROM v$parameter WHERE name = 'background_dump_dest';(10g及以上版本)或SELECT * FROM v$diag_info WHERE name = 'Background Dump Dest';(11g及以上版本)。SELECT value FROM v$parameter WHERE name = 'user_dump_dest';(专用服务器连接)或SELECT * FROM v$diag_info WHERE name = 'Default Trace File';(11g及以上版本)。$ORACLE_CRS_HOME/log/<hostname>/(如alert_<hostname>.log),ASM日志位于$ORACLE_BASE/diag/asm/+asm/+ASM1/trace/。2. 告警日志(alert_
告警日志是Oracle数据库的核心日志,记录了实例生命周期内的关键事件,需重点关注:
CREATE/ALTER/DROP等DDL操作、表空间操作(如扩展、删除)、归档日志切换等。ALTER SYSTEM SET语句)。3. Trace文件分析要点
Trace文件用于深度诊断特定会话或操作的详细信息,生成与分析步骤如下:
ALTER SESSION SET SQL_TRACE=TRUE;(会话级)或EXEC DBMS_MONITOR.SESSION_TRACE_ENABLE(sid, serial#);(特定会话)开启跟踪;也可使用ALTER SESSION SET EVENTS '10046 trace name context forever, level 12';(10046事件,更详细的执行计划)。USER_DUMP_DEST目录,文件名为<SID>_<PID>.trc;共享服务器连接则位于BACKGROUND_DUMP_DEST目录。tkprof工具将Trace文件转换为可读格式,常用命令:tkprof <tracefile> <outputfile> sys=no sort=prsela,exeela,fchela(sys=no排除SYS用户SQL,sort按解析时间、执行时间、fetch时间排序)。call count(调用次数)、cpu(CPU时间)、elapsed(总耗时)、disk(物理读)、query(逻辑读)、rows(处理行数),重点关注elapsed远大于cpu的SQL(存在等待)。Row Source Operation(行源操作,如INDEX UNIQUE SCAN、TABLE ACCESS FULL)和Execution Plan(优化器生成的执行计划),判断是否使用了合适的索引。waits=yes时显示的等待事件(如db file sequential read、enq: TX - row lock contention),定位性能瓶颈。4. 监听日志(listener.log)分析要点
监听日志记录了客户端的连接请求与监听器状态,适用于连接类问题排查,路径为$ORACLE_BASE/diag/tnslsnr/<hostname>/listener/trace/listener.log。需关注:
listener.ora中的SID_LIST配置)、TNS-12535(超时,需检查网络延迟或防火墙)。Service字段)、客户端连接IP与端口。5. 集群环境日志分析要点(RAC/ASM)
对于RAC或ASM环境,需额外关注集群与存储日志:
$ORACLE_CRS_HOME/log/<hostname>/alert<hostname>.log,记录集群组件状态(如CRS服务)、资源故障(如ASM磁盘组不可用)、节点心跳问题(CRS-4639节点间心跳失败)。$ORACLE_CRS_HOME/log/<hostname>/crsd/crsd.log(CRS守护进程)、$ORACLE_CRS_HOME/log/<hostname>/ocssd.log(CSS守护进程),关注资源启动失败(CRS-1006)、心跳超时等问题。$ORACLE_BASE/diag/asm/+asm/+ASM1/trace/alert_+ASM1.log,记录ASM磁盘组操作(如挂载/卸载)、磁盘故障(ORA-15063磁盘不可访问)、空间不足等问题。6. 日志管理与工具使用
cp alert_<SID>.log alert_<SID>_<date>.log.bak手动备份,或设置log_archive_dest_n参数自动归档。adrci(Oracle诊断工具)查看和管理日志,如adrci> show alert查看告警日志,adrci> show incident查看故障事件;或通过外部表将告警日志导入数据库,使用SQL查询(如SELECT * FROM alert_logs WHERE text LIKE '%ORA-%';)。@?/rdbms/admin/awrrpt.sql)分析数据库整体性能,结合Trace文件定位具体SQL瓶颈;使用LogMiner(DBMS_LOGMNR包)解读重做日志,追踪事务活动。