日志是数据库运行、诊断、审计和恢复的关键组成部分。
核心概念:日志的作用
日志文件的核心目的是记录数据库活动的轨迹,主要服务于:
- 数据持久性与恢复 (Redo Log): 确保已提交事务的更改不会因系统故障而丢失,支持实例恢复和介质恢复。
- 变更追踪与复制 (Redo Log, Archive Log): 捕获数据库的所有物理更改,用于逻辑或物理复制(如 Data Guard, GoldenGate)。
- 诊断与故障排除 (Alert Log, Trace Files): 记录数据库运行状态、错误、警告、内部事件,帮助DBA定位问题。
- 审计与安全 (Audit Logs): 记录用户活动,满足合规性要求,追踪可疑操作。
- 连接与会话管理 (Listener Log): 记录客户端连接请求、状态、失败信息。
- 操作记录 (Alert Log): 记录重要的管理操作(如启动、关闭、备份、恢复、参数修改)。
一、 核心日志:重做日志文件 (Redo Log Files)
- 原理:
- 记录内容: 记录数据库中所有已提交事务产生的物理更改(数据块修改)。包括 DML (INSERT, UPDATE, DELETE)、DDL (CREATE, ALTER, DROP) 以及部分内部操作(如索引维护)。它记录的是如何重建更改(例如,“在数据文件X的块Y的偏移量Z处写入值A”),而不是SQL语句本身。
- 目的: 确保数据库的持久性 (Durability) 和**可恢复性 (Recoverability)**。在系统崩溃(如断电)后,Oracle 使用重做日志将数据库恢复到崩溃前的一致状态(实例恢复)。在介质故障(磁盘损坏)后,结合备份和归档日志进行恢复(介质恢复)。
- 写入机制:
- 用户会话修改数据时,更改首先发生在数据库缓冲区缓存(内存)中。
- 对应生成的重做记录写入**重做日志缓冲区 (Redo Log Buffer)**(内存)。
- LGWR (Log Writer) 进程 负责将重做日志缓冲区的内容异步地、顺序地写入磁盘上的联机重做日志文件组。
- LGWR 在以下情况触发写操作:
- 用户提交事务 (
COMMIT)。 - 重做日志缓冲区达到 1/3 满。
- 每 3 秒超时。
- 在 DBWn (Database Writer) 进程将脏缓冲区写入数据文件之前(确保先记日志 Write-Ahead Logging - WAL 原则)。
- 检查点发生时。
- 用户提交事务 (
- 特性:
- 循环使用 (Circular): 数据库至少需要 2 个重做日志组(通常建议 3 个或更多)。LGWR 顺序写入当前组,写满后切换到下一个可用组(日志切换 - Log Switch)。切换时会触发检查点(Checkpoint),促使 DBWn 将相关的脏缓冲区写入数据文件。最后一个组写满后,循环回第一个组覆盖(如果第一个组已被归档)。
- 组与成员 (Groups & Members):
- 组 (Group): 逻辑概念,包含一个或多个完全相同的**成员文件 (Member File)**(镜像)。同一个组内的成员内容完全相同(冗余,提高可用性)。
- 成员 (Member): 物理文件。一个组至少有一个成员。
- 大小: 需要合理设置。太小会导致频繁的日志切换和检查点,影响性能。太大会增加恢复时间。通常考虑事务量和切换频率(如 10-30 分钟切换一次)。
- 位置: 需要高性能、高可用性的磁盘(通常与数据文件、控制文件分开存放)。
- 作用:
- 实例恢复 (Instance Recovery): 在数据库异常关闭(如断电)后重新启动时,Oracle 自动执行。使用当前联机重做日志中记录的、尚未写入数据文件的已提交更改(前滚 - Roll Forward)来回滚未提交的事务(回滚 - Roll Back)。
- 介质恢复 (Media Recovery): 当数据文件损坏或丢失时,使用备份的数据文件和应用归档日志(以及尚未归档的联机重做日志)将数据库恢复到故障点。
- 流复制与逻辑备库 (Streams, Logical Standby): 重做日志是捕获数据库变更的源头。
- 增量备份: 某些备份策略依赖于重做日志或归档日志。
- 路径:
- 路径由
CREATE DATABASE或ALTER DATABASE ADD LOGFILE ...语句指定。 - 通过视图查询:
SELECT GROUP#, MEMBER FROM V$LOGFILE;(显示所有成员文件路径)SELECT GROUP#, STATUS, SEQUENCE#, BYTES, MEMBERS FROM V$LOG;(显示组状态和序列号)
- 典型位置 (非绝对,取决于配置):
$ORACLE_BASE/oradata/<DB_NAME>/redo<group#>_<member#>.log(传统文件系统)+<DISKGROUP>/<DB_NAME>/ONLINELOG/group_<group#>.<member#>(ASM)
- 关键参数:
DB_CREATE_ONLINE_LOG_DEST_n(OMF 位置),LOG_ARCHIVE_DEST_n(归档目标,间接影响联机日志覆盖)
- 路径由
二、 归档日志文件 (Archive Log Files)
- 原理:
- 生成过程: 当数据库处于 ARCHIVELOG 模式下,发生日志切换时:
- ARCn (Archiver) 进程(默认启动一个 ARC0,可配置多个)会复制刚刚填满并被切换的联机重做日志组的内容。
- 将这些内容保存为一个独立的、不可更改的归档日志文件(通常带有唯一的序列号)。
- 成功归档后,该联机重做日志组才能被 LGWR 覆盖重用。
- 目的: 保留历史的重做日志信息,用于:
- 时间点恢复 (Point-in-Time Recovery): 将数据库恢复到过去的任意时间点(在备份保留期内)。
- 介质恢复: 恢复备份后创建的所有更改都记录在归档日志中。
- 备用数据库 (Data Guard): 物理备库持续应用主库传输过来的归档日志(或实时应用 Redo)保持同步。
- 生成过程: 当数据库处于 ARCHIVELOG 模式下,发生日志切换时:
- 特性:
- 时间序列: 每个归档日志文件对应一个联机重做日志序列号,按顺序生成。
- 不可修改: 一旦归档完成,文件内容即固定。
- 命名格式: 可配置(通过
LOG_ARCHIVE_FORMAT参数),通常包含线程号(RAC)、序列号等,如%t_%s_%r.arc。 - 保留策略: 可基于时间(
RECOVERY WINDOW)或冗余数量(REDUNDANCY)配置自动删除过期的归档日志(通过 RMAN)。手动删除可能导致恢复失败。
- 作用:
- 实现完全恢复: 是执行介质恢复(包括恢复到最新状态或过去时间点)的必要条件。
- 支持备用数据库: Data Guard 物理备库的核心依赖。
- 支持增量备份: RMAN 增量备份需要自上次备份以来的归档日志来应用。
- 审计与历史分析: 通过日志挖掘工具(如 LogMiner)可以分析历史变更。
- 路径:
- 主要配置参数:
LOG_ARCHIVE_DEST_n(n=1,2,...10),指定本地或远程(备库)的归档目标位置和属性。 - 通过视图查询:
SELECT NAME, DEST_ID, STATUS FROM V$ARCHIVED_LOG;(显示归档日志文件名、目标ID、状态)SHOW PARAMETER LOG_ARCHIVE_DEST_(显示当前配置的归档目标)
- 典型位置 (非绝对,取决于
LOG_ARCHIVE_DEST_n配置):- 本地文件系统:
/u01/archivelogs/<DB_NAME>/(例如LOG_ARCHIVE_DEST_1='LOCATION=/u01/archivelogs') - ASM:
+RECO/<DB_NAME>/ARCHIVELOG/(例如LOG_ARCHIVE_DEST_1='LOCATION=+RECO') - 远程备库:
SERVICE=<standby_service>(通过LOG_ARCHIVE_DEST_n配置)
- 本地文件系统:
- 关键参数:
LOG_ARCHIVE_DEST_n,LOG_ARCHIVE_FORMAT,DB_RECOVERY_FILE_DEST(快速恢复区,常作为归档目标),LOG_ARCHIVE_MIN_SUCCEED_DEST(指定必须成功归档的最小目标数)。
- 主要配置参数:
三、 警报日志文件 (Alert Log File / Alert SID.log)
- 原理:
- 记录内容: 一个按时间顺序记录的文本文件,包含数据库生命周期中发生的重大事件、错误、警告、状态变更、关键操作结果。
- 写入机制: 数据库后台进程(尤其是 MMON, MMAN)和实例本身直接将重要消息写入该文件。是诊断数据库问题的首要检查点。
- 特性:
- 纯文本: 可直接用文本编辑器(如
vi,less,tail -f)查看。 - 持续追加: 新消息不断追加到文件末尾。文件会增长,需要定期清理或轮换(Oracle 有自动清理机制,尤其在 ADR 中)。
- 关键信息源: 包含启动/关闭时间、检查点信息、内部错误(ORA-600)、块损坏错误(ORA-1578)、空间管理错误(ORA-165x)、参数修改记录、恢复操作记录、死锁信息等。
- 纯文本: 可直接用文本编辑器(如
- 作用:
- 实时监控:
tail -f alert_<SID>.log是监控数据库健康状态的经典方法。 - 故障诊断: 发生问题时(如实例崩溃、性能骤降、错误频发),警报日志是查找根本原因的第一手资料。
- 审计操作: 记录 DBA 执行的许多关键操作(如
ALTER DATABASE,ALTER SYSTEM)。 - 跟踪数据库状态: 记录实例启动阶段、NOMOUNT/MOUNT/OPEN 状态转换信息。
- 实时监控:
- 路径 (版本差异显著):
- Oracle 11g 及之前 (传统路径):
- 由
BACKGROUND_DUMP_DEST初始化参数指定。 - 典型路径:
$ORACLE_BASE/admin/<DB_NAME>/bdump/alert_<SID>.log
- 由
- Oracle 11g R2 及之后 (ADR - Automatic Diagnostic Repository):
- 警报日志是 ADR 的一部分。
- 路径由
DIAGNOSTIC_DEST初始化参数决定(通常指向$ORACLE_BASE)。 - 标准 ADR 路径:
$DIAGNOSTIC_DEST/diag/rdbms/<dbname_lowercase>/<SID>/trace/alert_<SID>.log - 示例:
/u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
- 查询路径方法:
SHOW PARAMETER BACKGROUND_DUMP_DEST(11g 及之前)SHOW PARAMETER DIAGNOSTIC_DEST(11g R2 及之后)SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Diag Trace';(11g R2 及之后,trace 目录,alert log 在此目录下)SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Alert Log';(11g R2 及之后,直接显示警报日志完整路径) <-- 推荐方法
- Oracle 11g 及之前 (传统路径):
四、 跟踪文件 (Trace Files)
- 原理:
- 记录内容: 包含特定进程(服务器进程、后台进程)或会话在运行期间产生的详细诊断信息、错误堆栈、执行计划、SQL 绑定变量、等待事件、性能统计信息等。比警报日志更详细、更具体。
- 触发方式:
- 内部错误: 当进程遇到严重错误(如 ORA-00600, ORA-07445)时,会自动生成一个包含错误详细信息的跟踪文件。
- 会话级跟踪: DBA 或用户可以通过
ALTER SESSION SET SQL_TRACE=TRUE;或DBMS_SESSION.SESSION_TRACE_ENABLE为当前会话启用 SQL 跟踪。使用DBMS_MONITOR包(如SESSION_TRACE_ENABLE)可以跟踪其他会话或模块/动作。 - 实例级跟踪: 设置
SQL_TRACE=TRUE在参数文件中(极度谨慎,性能影响巨大!)或动态设置ALTER SYSTEM SET SQL_TRACE=TRUE;(同样影响大)。 - 诊断事件: 设置特定的事件(如
EVENT="10046 trace name context forever, level 12")会生成详细的跟踪文件(包含等待事件和绑定变量)。 - 优化器跟踪:
ALTER SESSION SET EVENTS '10053 trace name context forever, level 1';用于跟踪 CBO 优化器决策过程。
- 特性:
- 纯文本或二进制: 大部分是文本(
.trc),原始跟踪文件较大,通常需要工具(如tkprof)格式化分析。部分诊断转储(如SYSTEMSTATE)可能是二进制。 - 按进程/会话生成: 每个进程(后台)或会话(服务器进程)在需要时生成自己独立的跟踪文件。
- 命名规则: 通常包含实例名(SID)、进程类型(如
ora)、进程ID(如_pmon_<pid>.trc,_<sid>_ora_<pid>.trc,_<sid>_<servicename>_<pid>.trc)。 - 核心诊断工具: 用于深入分析性能瓶颈、死锁、内部错误、SQL 执行细节。
- 纯文本或二进制: 大部分是文本(
- 作用:
- 深入故障诊断: 分析 ORA-00600/07445 等内部错误,查看错误堆栈和参数。
- SQL 性能调优: 通过 SQL Trace (
10046) 获取 SQL 执行统计信息(解析/执行/等待次数、时间、物理/逻辑读、行数)、执行计划、等待事件。使用tkprof格式化.trc文件生成可读报告。 - 优化器行为分析: 通过
10053事件跟踪理解 CBO 为何选择特定的执行计划。 - 死锁分析: 发生死锁时,会生成包含死锁图(
deadlock graph)的跟踪文件。 - 转储内部状态: 使用
ORADEBUG或ALTER SYSTEM DUMP命令生成特定结构(如控制文件、数据文件头、缓冲区缓存、SYSTEMSTATE)的转储到跟踪文件。
- 路径:
- 后台进程跟踪文件:
- 11g 及之前:
BACKGROUND_DUMP_DEST参数指定。 - 11g R2 及之后 (ADR):
$DIAGNOSTIC_DEST/diag/rdbms/<dbname_lowercase>/<SID>/trace/
- 11g 及之前:
- 服务器进程(用户会话)跟踪文件:
- 11g 及之前:
USER_DUMP_DEST参数指定。 - 11g R2 及之后 (ADR):
$DIAGNOSTIC_DEST/diag/rdbms/<dbname_lowercase>/<SID>/trace/(与后台进程跟踪文件在同一目录)
- 11g 及之前:
- 核心转储文件 (
core dump): 进程严重崩溃时生成,包含进程内存映像。- 11g 及之前:
CORE_DUMP_DEST参数指定(通常与BACKGROUND_DUMP_DEST相同)。 - 11g R2 及之后 (ADR):
$DIAGNOSTIC_DEST/diag/rdbms/<dbname_lowercase>/<SID>/cdump/
- 11g 及之前:
- 查询路径方法:
SHOW PARAMETER DUMP_DEST(显示 BACKGROUND, USER, CORE 的旧参数)SELECT NAME, VALUE FROM V$DIAG_INFO;(11g R2 及之后,查看Diag Trace,Diag Incident等路径)
- 后台进程跟踪文件:
五、 监听器日志文件 (Listener Log File)
- 原理:
- 记录内容: Oracle Net 监听器 (
lsnrctl进程) 的活动日志。记录客户端的连接请求、连接状态(成功/失败)、监听器启动/停止、服务注册/更新(动态注册)、拒绝的连接、负载均衡/故障转移决策等。 - 写入机制: 监听器进程自身写入。
- 记录内容: Oracle Net 监听器 (
- 特性:
- 纯文本: 可直接查看。
- 持续追加: 会不断增长,需要定期轮换或清理(监听器支持日志轮换命令
lsnrctl set log_status off->lsnrctl set log_status on)。 - 配置相关: 日志级别、格式、轮换策略可通过
listener.ora配置文件或lsnrctl命令设置。
- 作用:
- 诊断连接问题: 当客户端无法连接到数据库时,监听器日志是首要检查点,查看连接请求是否到达监听器、为何被拒绝(如协议错误、服务名错误、权限不足、防火墙拦截)。
- 监控连接活动: 了解哪些客户端、在什么时间、连接到了哪个服务。
- 审计连接: 记录连接来源(IP, Hostname)。
- 跟踪服务注册: 查看数据库实例是否成功动态注册到监听器。
- 路径:
- 由
listener.ora配置文件中的LOG_FILE_<listener_name>参数指定。如果未指定,默认使用监听器名称命名日志文件。 - 默认位置 (常见):
$ORACLE_HOME/network/log/listener.log$ORACLE_BASE/diag/tnslsnr/<hostname>/listener_<name>/trace/listener.log(在配置了 ADR 的环境下,12c 及之后更常见,即使数据库未使用 ADR,监听器也可能默认使用此路径)
- 查询路径方法:
lsnrctl status [listener_name](输出中包含Listener Log File的路径信息)- 检查
listener.ora文件 (通常在$ORACLE_HOME/network/admin/或$TNS_ADMIN目录下) 中的LOG_FILE_<listener_name>参数。
- 由
六、 审计日志文件 (Audit Trail Files)
- 原理:
- 记录内容: 根据配置的审计策略,记录用户的操作活动,以满足安全合规性要求。记录的内容包括:操作类型(如登录、登出、DDL、DML)、执行用户、执行时间、操作对象、使用的 SQL 语句、是否成功等。
- 写入机制: 由数据库内核根据审计设置生成记录。
- 特性:
- 存储位置:
- 数据库审计表: 默认且推荐方式。审计记录写入
SYS.AUD$和SYS.FGA_LOG$表(位于SYSTEM表空间)。可通过视图DBA_AUDIT_TRAIL,DBA_FGA_AUDIT_TRAIL查询。需要定期维护(清理或归档)以防止SYSTEM表空间耗尽。 - 操作系统文件: 配置
AUDIT_TRAIL=OS时,审计记录写入操作系统文件(位置由AUDIT_FILE_DEST指定)。文件格式是二进制,需要使用AUDIT_FILE_DEST或工具(如 Oracle Audit Vault)读取。 - XML 文件: 配置
AUDIT_TRAIL=XML或XML, EXTENDED时,写入 XML 文件到AUDIT_FILE_DEST。
- 数据库审计表: 默认且推荐方式。审计记录写入
- 粒度可配置: 可以审计整个数据库、特定用户、特定对象、特定语句类型、特定权限的使用等。标准审计和细粒度审计(FGA)。
- 性能开销: 审计会带来一定的性能开销,尤其是对高频操作进行详细审计时。需要平衡安全需求和性能。
- 存储位置:
- 作用:
- 安全合规: 满足法律法规(如 SOX, GDPR, HIPAA)和内部安全策略对数据库操作审计的要求。
- 问责制: 追踪谁在什么时间对数据做了什么操作。
- 入侵检测: 发现异常或恶意活动(如多次失败登录尝试、特权账户异常操作、敏感数据访问)。
- 故障排除(安全相关): 帮助分析安全相关的问题。
- 路径 (仅当使用 OS/XML 审计时):
- 操作系统文件: 由
AUDIT_FILE_DEST初始化参数指定。- 典型路径:
$ORACLE_BASE/admin/<DB_NAME>/adump/(传统) 或$DIAGNOSTIC_DEST/diag/rdbms/<dbname_lowercase>/<SID>/adump/(ADR)。 - 文件名通常包含
ora_<process_id>.aud或类似格式。
- 典型路径:
- XML 文件: 同样由
AUDIT_FILE_DEST指定路径。
- 操作系统文件: 由
- 关键参数:
AUDIT_TRAIL(取值 NONE, DB, DB_EXTENDED, OS, XML, XML_EXTENDED),AUDIT_FILE_DEST,AUDIT_SYS_OPERATIONS(是否审计以SYSDBA/SYSOPER连接的操作)。
七、 其他相关日志/文件
控制文件 (Control File):
- 严格来说不是日志文件,但记录了数据库的物理结构信息(数据文件、重做日志文件的位置、数据库名称、创建时间戳、检查点信息、备份元数据等)。
- 作用: 数据库启动时读取,用于验证和定位数据文件和重做日志文件。在恢复过程中至关重要。它本身也包含一些“日志”信息(如检查点SCN、归档日志序列历史)。
- 路径: 由
CONTROL_FILES参数指定,通常有多个副本。通过SELECT NAME FROM V$CONTROLFILE;查询。
闪回日志 (Flashback Logs - 如果启用了闪回数据库):
- 原理: 当数据库启用闪回数据库 (
FLASHBACK DATABASE ON) 时,DBWR 进程会将数据块在修改前的映像写入闪回日志。存储在快速恢复区(FRA)。 - 作用: 支持将整个数据库快速回退到过去的时间点(
FLASHBACK DATABASE),比传统的基于备份和恢复的时间点恢复快得多。 - 路径: 在快速恢复区 (
DB_RECOVERY_FILE_DEST) 内,由数据库自动管理。路径如$DB_RECOVERY_FILE_DEST/<DB_NAME>/FLASHBACK/。
- 原理: 当数据库启用闪回数据库 (
数据泵日志 (Data Pump Export/Import Log):
- 原理: 在执行
expdp(导出) 或impdp(导入) 命令时,可以指定日志文件 (LOGFILE=...)。 - 作用: 记录导出/导入作业的详细过程、状态、遇到的错误和警告。是诊断 Data Pump 作业问题的主要依据。
- 路径: 由用户在执行命令时显式指定(通常使用目录对象)。例如:
expdp ... logfile=DPUMP_DIR:expfull.log
- 原理: 在执行
Oracle Grid Infrastructure 日志 (对于 RAC/ASM):
- 如果数据库运行在 RAC 集群或使用 ASM 存储,还会涉及大量 GI 相关的日志(CRS 日志、ASM 警报日志和跟踪文件、集群同步服务 CSS 日志、节点应用 VIP/GSD/ONS 日志等),通常位于 GI 的 ADR 路径下 (
$GRID_HOME/log/<hostname>/或$ORACLE_BASE/diag/crs/<hostname>/crs/)。
- 如果数据库运行在 RAC 集群或使用 ASM 存储,还会涉及大量 GI 相关的日志(CRS 日志、ASM 警报日志和跟踪文件、集群同步服务 CSS 日志、节点应用 VIP/GSD/ONS 日志等),通常位于 GI 的 ADR 路径下 (
总结与关键视图/工具
- 视图:
V$LOG,V$LOGFILE(联机重做日志)V$ARCHIVED_LOG,V$ARCHIVE_DEST,V$ARCHIVE_PROCESSES(归档日志)V$DIAG_INFO(ADR 相关信息,包括警报日志和跟踪文件路径 - 最重要)V$SESSION,V$PROCESS(结合SQL_TRACE,10046事件用于生成会话跟踪)DBA_AUDIT_TRAIL,DBA_FGA_AUDIT_TRAIL(数据库审计表)DBA_DIRECTORIES(查看目录对象路径,用于 Data Pump 日志等)V$CONTROLFILE(控制文件路径)
- 工具:
- ADRCI (ADR Command Interpreter): 专门用于管理和查看 ADR 中的诊断信息(警报日志、跟踪文件、打包问题包 Incident Packages)。
- TKPROF: 格式化原始的 SQL 跟踪文件 (
.trc) 生成易读的性能报告。 - Enterprise Manager (OEM): 图形化界面提供集中的日志查看、监控和告警功能。
- LogMiner: 用于分析联机和归档重做日志文件中的内容。
- Oradebug / ALTER SYSTEM DUMP: 生成特定内部结构的诊断转储到跟踪文件。
管理要点:
- 监控: 定期检查警报日志 (
tail -f或 OEM)、监听器日志。监控归档日志目标空间是否充足。 - 轮换与清理: 制定策略清理或归档旧的跟踪文件、监听器日志、审计记录(尤其是
AUD$表)。利用 ADR 的自动清理策略 (ADRCI> PURGE)。切勿手动删除正在使用的联机重做日志或未归档的归档日志! - 备份: 归档日志文件是备份策略的核心部分,必须与数据库备份一起备份并通过 RMAN 管理其保留期。
- 位置规划: 将不同性能/可靠性要求的日志(如重做日志、归档日志、跟踪文件)放在合适的存储上(IOPS, 延迟, 冗余)。
- 安全: 保护日志文件(尤其是审计日志)不被未授权访问或篡改。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




