oracle日志文件详解

Oracle 数据库使用多种类型的日志文件来保障数据一致性、支持恢复、记录操作行为以及辅助诊断。以下是 Oracle 主要日志类型 的详细说明,包括其作用、存储路径和查看方式。


✅ 1. 警报日志(Alert Log / alert_.log)

🔹 作用

  • 记录数据库 启动/关闭关键错误 (如 ORA- 错误)、参数变更检查点归档切换 等重要事件。
  • 是 DBA 日常监控和故障排查的 首要日志

🔹 默认路径(自动诊断仓库 ADR)

从 Oracle 11g 开始,日志统一存放在 ADR(Automatic Diagnostic Repository) 中:

复制代码
-- 查询路径
SELECT * FROM V $ DIAG_INFO WHERE NAME = 'Diag Trace';

典型路径:

复制代码
 $ ORACLE_BASE/diag/rdbms/<DB_NAME>/<INSTANCE>/trace/alert_<SID>.log

例如:

复制代码
/u01/app/oracle/diag/rdbms/orcl/ORCL/trace/alert_ORCL.log

💡 注意:alert.log 是文本文件,可用 tail -f 实时监控。


✅ 2. 跟踪日志(Trace Files)

🔹 作用

  • 记录 会话级或进程级 的详细诊断信息,用于性能调优、SQL 跟踪、错误分析。
  • 包括:
    • 用户会话跟踪(如启用 SQL_TRACE
    • 后台进程跟踪(如 DBWn、LGWR、PMON)
    • 错误时生成的 .trc 文件(含 call stack)

🔹 文件命名规则

  • <SID>_<PROCESS>_<PID>.trc
    例如:orcl_ora_12345.trc(用户会话)
    例如:orcl_dbw0_6789.trc(DBWR 进程)

🔹 路径

与 Alert Log 相同:

复制代码
 $ ORACLE_BASE/diag/rdbms/<DB_NAME>/<INSTANCE>/trace/

🔹 如何生成特定会话的 trace?

复制代码
-- 当前会话开启 SQL 跟踪
ALTER SESSION SET SQL_TRACE = TRUE;

-- 或使用 10046 事件(更详细)
EXEC DBMS_MONITOR.SESSION_TRACE_ENABLE(waits=>TRUE, binds=>TRUE);

Oracle 的跟踪日志(Trace Files) 是数据库诊断和性能调优的核心工具。它们记录了会话、进程或错误发生时的详细内部信息。下面从 命名规则、分类、识别方法、路径、用途 等角度,全面详解 Oracle 跟踪日志。


✅ 一、跟踪日志的总体分类

Oracle 跟踪日志主要分为三类:

表格

类型 生成主体 触发条件 典型用途
用户会话跟踪文件(User Trace) 用户会话(Server Process) 手动启用 SQL_TRACE / 10046 事件,或会话报错 SQL 性能分析、绑定变量、等待事件
后台进程跟踪文件(Background Trace) 后台进程(PMON, SMON, DBWn, LGWR 等) 进程启动、出错、内部事件触发 实例故障诊断、死锁、内部错误(ORA-600)
意外/错误跟踪文件(Incident Trace) 任意进程 发生严重错误(如 ORA-00600, ORA-07445) 提供给 Oracle Support 分析 bug

💡 所有跟踪文件都存放在 ADR(Automatic Diagnostic Repository)trace 目录下(11g 及以后)。


✅ 二、跟踪日志的命名规则(关键!)

📌 通用格式(Linux/Unix):

复制代码
<sid>_<process_name>_<pid>.trc

🔍 各部分含义:

表格

部分 说明 示例
<sid> 数据库实例名(ORACLE_SID) orcl, cdb1
<process_name> 进程类型标识 ora(用户会话)、pmonsmondbw0lms0(RAC)等
<pid> 操作系统进程 ID(Process ID) 12345
.trc 跟踪文件扩展名 .trc
.trm 跟踪元数据文件(可选,用于 ADR 索引) .trm

🧩 常见命名示例及含义:

表格

文件名 类型 说明
orcl_ora_12345.trc 用户会话跟踪 用户会话(PID=12345)产生的 trace,通常由 SQL_TRACE 或错误触发
orcl_pmon_6789.trc 后台进程跟踪 PMON 进程(PID=6789)的日志,记录实例恢复、会话清理等
orcl_dbw0_1011.trc 后台进程跟踪 DBWR 进程(第 0 个)的日志,可能包含写入延迟、检查点信息
orcl_m000_2021.trc MMON 或作业进程 自动任务(如 AWR 快照)产生的 trace
cdb1_ora_3030.trc_cdmp_20260130143000 错误转储(Incident) 因 ORA-00600 等错误自动生成的完整 dump 包

⚠️ Windows 系统中,PID 可能被线程 ID 替代,且使用反斜杠路径。


✅ 三、如何区分每个跟踪日志的类型?

方法 1:看文件名中的 <process_name>

表格

关键词 类型 说明
ora 用户会话 最常见,由客户端连接产生
pmon / smon / ckpt / lgwr / dbw0... 后台进程 对应 Oracle 后台进程
m000 / j000 作业或 MMON 进程 自动维护任务
_cdmp_ 错误转储包 由 ADRCI 自动打包,含多个文件

方法 2:查看文件内容开头

打开 .trc 文件,前几行通常包含:

复制代码
*** 2026-01-30 14:30:00.123
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
...
*** SESSION ID:(123.45678) 2026-01-30 14:30:00.123
*** CLIENT ID:() 2026-01-30 14:30:00.123
*** SERVICE NAME:(SYS $ USERS) 2026-01-30 14:30:00.123
*** MODULE NAME:(rman@host (TNS V1-V3)) 2026-01-30 14:30:00.123
*** ACTION NAME:() 2026-01-30 14:30:00.123
  • 如果有 MODULE NAME: (rman...) → RMAN 会话
  • 如果有 SESSION ID 但无后台进程名 → 用户会话
  • 如果开头是 PMON started with pid=... → 后台进程

方法 3:通过 SQL 查询当前会话的 trace 文件名

复制代码
-- 查询当前会话的 trace 文件路径
SELECT s.sid, s.serial#, p.spid, i.value || '/' || 
       LOWER(d.instance_name) || '_ora_' || p.spid || '.trc' AS trace_file
FROM v $ session s, v $ process p, v $ diag_info i, v $ instance d
WHERE s.paddr = p.addr
  AND s.audsid = SYS_CONTEXT('USERENV', 'SESSIONID')
  AND i.name = 'Diag Trace';

输出示例:

复制代码
SID   SERIAL#  SPID    TRACE_FILE
----  -------  ------  --------------------------------------------
123   45678    12345   /u01/app/oracle/diag/rdbms/orcl/ORCL/trace/orcl_ora_12345.trc

✅ 四、特殊跟踪文件:带 tracefile_identifier

你可以通过设置会话参数为 trace 文件"打标签",便于识别:

复制代码
ALTER SESSION SET tracefile_identifier = 'MY_TEST_20260130';
ALTER SESSION SET SQL_TRACE = TRUE;

生成的文件名变为:

复制代码
orcl_ora_12345_MY_TEST_20260130.trc

✅ 强烈推荐在生产环境使用此方法,避免混淆多个 trace 文件。


✅ 五、跟踪日志的存储路径

统一在 ADR 的 trace 目录下:

复制代码
-- 查询路径
SELECT VALUE FROM V $ DIAG_INFO WHERE NAME = 'Diag Trace';

典型路径:

复制代码
 $ ORACLE_BASE/diag/rdbms/<DB_UNIQUE_NAME>/<INSTANCE_NAME>/trace/

例如:

复制代码
/u01/app/oracle/diag/rdbms/prod/PROD1/trace/

💡 注意:<DB_UNIQUE_NAME> 不一定是 SID,可能是 db_unique_name 参数值。


✅ 六、总结:快速识别跟踪日志类型

表格

特征 日志类型
文件名含 _ora_ 用户会话跟踪
文件名含 _pmon_, _smon_, _dbw0_ 后台进程跟踪
文件名含 _cdmp_ 或在 incident 目录 错误转储包
文件内容有 SESSION IDMODULE NAME 用户会话(可进一步看模块名)
文件由 ALTER SESSION SET SQL_TRACE 生成 性能分析 trace
文件由 ORA-00600 错误触发 内部错误 trace(需提交 Oracle Support)

✅ 3. 重做日志(Redo Log)

🔹 作用

  • 记录 所有对数据库的修改操作 (INSERT/UPDATE/DELETE),用于 实例恢复介质恢复
  • 是数据库 ACID 特性中持久性(Durability)的核心保障

🔹 类型

  • 在线重做日志(Online Redo Log):当前正在使用的日志组,循环写入。
  • 归档重做日志(Archived Redo Log):在线日志切换后归档保存(仅在 ARCHIVELOG 模式下)。

🔹 查看路径

复制代码
-- 在线日志路径
SELECT GROUP#, MEMBER FROM V $ LOGFILE;

-- 归档日志路径
SHOW PARAMETER log_archive_dest;
-- 或
SELECT DEST_NAME, DESTINATION FROM V $ ARCHIVE_DEST WHERE STATUS = 'VALID';

典型路径:

  • 在线日志:+DATA/ORCL/ONLINELOG/group_1.261.1234567890(ASM)或 /u01/oradata/ORCL/redo01.log
  • 归档日志:USE_DB_RECOVERY_FILE_DEST(默认为闪回区)或自定义路径如 /archivelog/

✅ 4. 归档日志(Archive Log)

🔹 作用

  • 保存 历史重做日志 ,用于:
    • 时间点恢复(PITR)
    • Data Guard / ADG 同步
    • RMAN 增量备份恢复

🔹 存储位置

LOG_ARCHIVE_DEST_n 参数控制,默认使用闪回恢复区(FRA):

复制代码
SHOW PARAMETER db_recovery_file_dest;
-- 例如:/u01/fra

🔹 查看归档日志列表

复制代码
SELECT NAME, SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V $ ARCHIVED_LOG ORDER BY SEQUENCE#;

✅ 5. 审计日志(Audit Trail)

🔹 作用

  • 记录 用户操作行为(如登录、DDL、DML),用于安全合规和审计。

🔹 存储方式(两种)

表格

方式 说明 路径 / 查看方式
数据库审计(AUDIT_TRAIL=DB) 写入 SYS.AUD $ SELECT * FROM DBA_AUDIT_TRAIL;
操作系统审计(AUDIT_TRAIL=OS) 写入文件 $ ORACLE_BASE/admin/<SID>/adump/

⚠️ 默认情况下,审计可能未启用。可通过 SHOW PARAMETER audit_trail; 查看。


✅ 6. 监听器日志(Listener Log)

🔹 作用

  • 记录 客户端连接请求监听器启动/停止网络错误 等。

🔹 路径

复制代码
 $ ORACLE_HOME/network/log/listener.log

💡 可通过 lsnrctl status 查看监听器配置。


✅ 7. SBT I/O 日志(sbtio.log)

🔹 作用

  • 当使用 RMAN + SBT(磁带/云备份) 时,记录 RMAN 与 SBT 插件(如 NetBackup、Commvault)的交互。

🔹 路径

通常在:

复制代码
 $ ORACLE_HOME/rdbms/log/sbtio.log

或由 SBT 插件自定义路径(如你的 /opt/DRDBClient_.../log/


✅ 8. 控制文件(Control File)------虽非"日志",但常被混淆

🔹 作用

  • 记录数据库 物理结构元数据:数据文件、重做日志位置、SCN、检查点等。
  • 不是日志文件,但对恢复至关重要。

🔹 路径

复制代码
SELECT NAME FROM V $ CONTROLFILE;

📂 总结:Oracle 日志类型速查表

表格

日志类型 作用 默认路径 关键视图/命令
Alert Log 实例关键事件 $ ADR_HOME/trace/alert_<SID>.log V $ DIAG_INFO
Trace Files 会话/进程诊断 $ ADR_HOME/trace/ ALTER SESSION SET SQL_TRACE
Redo Log 记录数据变更 V $ LOGFILE V $ LOG, V $ LOGFILE
Archive Log 归档重做日志 LOG_ARCHIVE_DEST_n V $ ARCHIVED_LOG
Audit Log 用户操作审计 OS: $ ORACLE_BASE/admin/<SID>/adump/ DB: SYS.AUD $ DBA_AUDIT_TRAIL
Listener Log 网络连接日志 $ ORACLE_HOME/network/log/ lsnrctl
SBT I/O Log RMAN 备份插件日志 $ ORACLE_HOME/rdbms/log/sbtio.log ---
Control File 数据库元数据 V $ CONTROLFILE V $ CONTROLFILE
相关推荐
heartbeat..4 小时前
Redis 中的锁:核心实现、类型与最佳实践
java·数据库·redis·缓存·并发
Prince-Peng4 小时前
技术架构系列 - 详解Redis
数据结构·数据库·redis·分布式·缓存·中间件·架构
虾说羊4 小时前
redis中的哨兵机制
数据库·redis·缓存
_F_y4 小时前
MySQL视图
数据库·mysql
2301_790300965 小时前
Python单元测试(unittest)实战指南
jvm·数据库·python
九章-5 小时前
一库平替,融合致胜:国产数据库的“统型”范式革命
数据库·融合数据库
2401_838472515 小时前
使用Scikit-learn构建你的第一个机器学习模型
jvm·数据库·python
u0109272715 小时前
使用Python进行网络设备自动配置
jvm·数据库·python
wengqidaifeng6 小时前
数据结构---顺序表的奥秘(下)
c语言·数据结构·数据库
what丶k6 小时前
SpringBoot3 配置文件使用全解析:从基础到实战,解锁灵活配置新姿势
java·数据库·spring boot·spring·spring cloud