CentOS 上 Oracle 日志查看与分析实用指南
一 日志类型与定位
- 使用 ADRCI 快速定位各类日志与跟踪文件(推荐):
- 进入 ADRCI:adrci
- 设置主目录:show home;set home diag/rdbms//
- 查看告警日志:show alert -tail 200
- 按时间查看:show alert -p “message_text like ‘%ORA-%’ and originating_timestamp > ‘2025-12-20 00:00:00’”
- 列出与某告警关联的 trace:show trace
- 常用日志与路径要点:
- 告警日志(AlertSID.log):记录实例启停、参数变更、检查点、归档切换、恢复、ORA- 错误等;路径在 ADR 下,如:/u01/app/oracle/diag/rdbms///trace/alert_.log
- 后台进程 Trace:同 trace 目录,文件名形如:.trc
- 监听日志与连接诊断:
- 动态监听日志:show parameter listener;日志通常在 $ORACLE_HOME/diag/tnslsnr//trace/listener.log
- 静态监听日志:在 listener.ora 中配置 LOG_FILE、LOG_DIRECTORY 后生成
- 审计日志(若开启):由 AUDIT_TRAIL 决定,常见为 DB(写入数据字典视图)或 OS(写入操作系统审计文件)。
二 告警日志与跟踪文件的快速分析
- 告警日志的关键线索:
- 时间线:按时间戳定位问题发生点,关注紧邻的 ORA- 错误与 Checkpoint、Archive Log、Media Recovery、Instance Recovery 等关键字。
- 关联 Trace:告警中通常包含类似 “Errors in file /u01/…/trace/PROD1_lmd0_25432.trc” 的提示,直接打开对应 trace 文件深入分析进程栈与等待事件。
- 会话线索:部分告警会给出 SID/SERIAL#/CLIENT IP,可联动 v$session 定位来源。
- 常用 Linux 检索命令(在相应日志目录执行):
- 实时查看告警尾部:tail -f alert_.log
- 按错误码统计:grep -i “ORA-” alert_.log | awk ‘{print $0}’ | sort | uniq -c | sort -nr
- 提取某时间段的错误:sed -n ‘/2025-12-20 10:00:00/,/2025-12-20 11:00:00/p’ alert_.log | grep -i “ORA-”
- 跟踪文件快速定位异常函数/等待:grep -n -i “ksedmp|kgeriv|wait” *.trc
- 实用 SQL 辅助定位:
- 查看最近 1 小时告警(ADR 视图):
- SELECT originating_timestamp, message_text FROM v$diag_alert_ext WHERE originating_timestamp > SYSTIMESTAMP - INTERVAL ‘1’ HOUR ORDER BY originating_timestamp;
- 根据告警中的 SID 查询会话与来源:
- SELECT s.sid, s.serial#, s.username, s.machine, s.program, s.logon_time FROM v$session s WHERE s.sid = :sid;
- 检查检查点、归档与恢复相关活动是否频繁或异常(在告警中看到相关关键字时进一步核验)。
三 重做日志与归档日志的内容分析 LogMiner
- 适用场景:追溯历史 DML/DDL 变更、定位误删/误改的数据与时间点;基于 Redo/归档日志 的内容解析。
- 前置条件与准备:
- 建议开启 归档模式:archive log list(若为 NOARCHIVELOG,仅能分析在线日志,且窗口受限)。
- 建议开启 最小补全日志(便于解析到列级信息):
- SELECT supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_ui FROM v$database;
- 如未开启:ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;(可按需细化到 PK/UI/FK/ALL)。
- 标准步骤(基于目录法的经典流程):
- 指定数据字典目录(需库重启或按所用方法调整):
- show parameter utl_file_dir
- alter system set utl_file_dir=‘/u01/logmnr’ scope=spfile;(重启生效)
- 生成数据字典文件:
- EXEC DBMS_LOGMNR_D.BUILD(dictionary_filename=>‘logmnr_dict.dat’, dictionary_location=>‘/u01/logmnr’);
- 添加待分析日志(在线或归档均可):
- 查询日志组与文件:SELECT group#, sequence#, bytes, members, status FROM v$log; SELECT * FROM v$logfile;
- 添加日志:EXEC DBMS_LOGMNR.ADD_LOGFILE(options=>DBMS_LOGMNR.NEW, logfilename=>‘/u01/arch/…arc’);
- 启动 LogMiner(按时间或 SCN 窗口):
- EXEC DBMS_LOGMNR.START_LOGMNR(dictfilename=>‘/u01/logmnr/logmnr_dict.dat’, starttime=>TO_DATE(‘2025-12-20 10:00:00’,‘yyyy-mm-dd hh24:mi:ss’), endtime=>TO_DATE(‘2025-12-20 11:00:00’,‘yyyy-mm-dd hh24:mi:ss’));
- 查询解析结果:
- SELECT scn, timestamp, operation, seg_owner, seg_name, username, os_username, machine_name, session#, serial#, sql_redo, sql_undo FROM v$logmnr_contents WHERE seg_owner=‘YOUR_SCHEMA’;
- 如需撤销某条 DML,可在测试环境基于 sql_undo 构造回滚语句(务必谨慎评估)。
- 结束会话:EXEC DBMS_LOGMNR.END_LOGMNR;
- 常见排错与提示:
- 使用目录法时,确保 utl_file_dir 目录存在且 oracle 用户可写;否则会报 UTL_FILE 相关错误。
- 若无法使用目录法,可考虑 Online Catalog(不依赖数据字典文件),但对象名解析可能受限。
四 性能与问题的进一步诊断
- 性能与负载:
- 使用 AWR/ASH 报告定位高负载 SQL、等待事件与瓶颈(如:@?/rdbms/admin/awrrpt.sql;@?/rdbms/admin/ashrpt.sql)。
- 结合 OEM Cloud Control 或 ADRCI 做统一可视化与告警配置。
- 监听与连接问题:
- 监听状态:lsnrctl status;实时日志:tail -f $ORACLE_HOME/diag/tnslsnr//trace/listener.log
- 常见异常:TNS 超时、服务未注册、客户端 IP/程序名异常等,可联动 v$session 与客户端信息核对。