62-Oracle ADR(Automatic Diagnostic Repository)

发布于:2025-06-24 ⋅ 阅读:(18) ⋅ 点赞:(0)

小伙伴有没有被alter、dump等各种日志、报警文件撑爆磁盘的经历。实例卡了崩了,满服务器翻alert.log、trace文件。现在可以直接adrci一条命令通吃所有组件日志。还有可以控制数据库抽风狂报ORA-600的时候,ADR自动限流,空间不再会被dump文件撑爆,现在即使实例崩了,还是adrci继续可用。不过XML格式的alert log,每次还是需要开ADRCI用show alert -p "message_text like '%ORA-%'"过滤错误。ips create package一键打包事件,官方支持更方便了。

一、ADR核心功能

统一诊断数据存储
  • 集中存储跟踪文件(Trace)、警报日志(Alert Log)、核心转储(Core Dumps)、健康检查报告(Health Monitor Reports)、DDL日志等。
  • 支持数据库、ASM、监听器、Clusterware等多组件,每个实例独立目录(ADR Home)。
问题-事件管理机制
  • 问题(Problem):严重错误(如ORA-600)分配唯一问题键(Problem Key)。
  • 事件(Incident):同一问题的每次发生生成带时间戳的事件,分配事件ID(Incident ID),自动触发告警至OEM。
  • 洪水控制(Flood Control):限制高频事件的诊断数据生成,避免系统过载(如仅记录日志,不生成转储)。
独立于数据库运行
  • 基于文件系统存储,数据库不可用时仍可访问(如崩溃恢复场景)。
自动化工具集成
  • 命令行工具adrci:查看日志、清理文件、打包事件数据。
  • 动态视图V$DIAG_INFO:实时查询关键路径(如警报日志位置)。

二、技术原理

1. 目录结构

层级

路径规则

说明

ADR Base

DIAGNOSTIC_DEST参数指定

(默认$ORACLE_BASE或$ORACLE_HOME/log)

根目录

ADR Home

diag/<product_type>/<product_id>/<instance_id>
(如diag/rdbms/orcl/orcl)

实例专属目录

子目录

alert/, trace/, incident/, cdump/, hm/

分别存储XML警报日志、跟踪文件、事件数据等

2. 诊断数据类型 

类型

内容

示例文件

警报日志(Alert Log)

内部错误(ORA-600)、管理操作(STARTUP/SHUTDOWN)、死锁事件

log.xml(XML格式)

跟踪文件(Trace)

进程活动、SQL执行详情、错误堆栈

orcl_ora_12345.trc

DDL日志

所有DDL语句记录(需手动启用)

ddl.log

3. 关键机制
  • 洪水控制:相同问题事件频繁发生时,抑制转储生成,仅保留日志条目。
  • 健康监控:自动生成报告(如数据块损坏检查),存储于hm/目录。

三、版本演进 

版本

关键改进

Oracle 11g

引入ADR,替代BACKGROUND_DUMP_DEST等分散参数,统一存储诊断数据。

Oracle 12c

增强多租户支持,每个PDB独立事件跟踪;优化adrci的事件打包(IPS)功能。

Oracle 19c~

集成机器学习(如自动根因分析);支持云环境诊断数据直传Oracle Support。

四、验证脚本

1. 查询ADR路径
-- 查看所有关键路径
SELECT name, value FROM V$DIAG_INFO;

输出示例23ai和19c: 

SELECT name, value FROM V$DIAG_INFO;

NAME                     VALUE
________________________ _____________________________________________________________
Diag Enabled             TRUE
ADR Base                 /opt/oracle
ADR Home                 /opt/oracle/diag/rdbms/free/FREE
Diag Trace               /opt/oracle/diag/rdbms/free/FREE/trace
Diag Alert               /opt/oracle/diag/rdbms/free/FREE/alert
Diag Incident            /opt/oracle/diag/rdbms/free/FREE/incident
Diag Cdump               /opt/oracle/diag/rdbms/free/FREE/cdump
Health Monitor           /opt/oracle/diag/rdbms/free/FREE/hm
Default Trace File       /opt/oracle/diag/rdbms/free/FREE/trace/FREE_ora_154577.trc
Active Problem Count     0
Active Incident Count    0
ORACLE_HOME              /opt/oracle/product/23ai/dbhomeFree
Attention Log            /opt/oracle/diag/rdbms/free/FREE/trace/attention_FREE.log

13 rows selected.
---
SYS@CDB$ROOT> SELECT name, value FROM V$DIAG_INFO;
NAME                    VALUE
Diag Enabled            TRUE
ADR Base                /u01/app/oracle
ADR Home                /u01/app/oracle/diag/rdbms/test19/test19
Diag Trace              /u01/app/oracle/diag/rdbms/test19/test19/trace
Diag Alert              /u01/app/oracle/diag/rdbms/test19/test19/alert
Diag Incident           /u01/app/oracle/diag/rdbms/test19/test19/incident
Diag Cdump              /u01/app/oracle/diag/rdbms/test19/test19/cdump
Health Monitor          /u01/app/oracle/diag/rdbms/test19/test19/hm
Default Trace File      /u01/app/oracle/diag/rdbms/test19/test19/trace/test19_ora_30455.trc
Active Problem Count    0
Active Incident Count   0
ORACLE_HOME             /u01/app/oracle/product/19.3.0/dbhome_1

已选择 12 行。
2. 使用adrci管理日志 
adrci
show homes                      -- 列出所有ADR Home
set home diag/rdbms/orcl/orcl   -- 切换目录
show alert -tail 20             -- 实时查看警报日志尾部
purge -age 1440 -type incident  -- 清理24小时内的事件数据
--
[oracle@OL97 ~]$ adrci

ADRCI: Release 23.0.0.0.0 - Production on Sun Jun 22 12:28:33 2025

Copyright (c) 1982, 2025, Oracle and/or its affiliates.  All rights reserved.

ADR base = "/opt/oracle"
adrci> show homes;
ADR Homes:
diag/rdbms/free/FREE
diag/clients/user_oracle/RMAN_3026389520_115
diag/clients/user_oracle/host_3026389520_115
diag/tnslsnr/OL97/listener
diag/orapwd/ol97/kuzr
adrci> set home diag/rdbms/free/FREE
adrci> show alert -tail 2
2025-06-22 08:37:44.840000 +08:00
  Current log# 2 seq# 59 mem# 0: /opt/oracle/oradata/FREE/redo02.log
NET  (PID:151752): Archived Log entry 54 added for B-1203593363.T-1.S-58 LOS:0x0000000000552488 NXS:0x0000000000552551 NAB:319 ID 0x57f538d2 LAD:1 [krse.c:4872]
adrci> purge -age 1440 -type incident
3. 启用DDL日志
---- 启用后DDL记录到log/ddl.log
ALTER SYSTEM SET enable_ddl_logging = TRUE;
SYS@CDB$ROOT> ALTER SYSTEM SET enable_ddl_logging = TRUE;
System altered.
4. 事件打包(供Oracle Support分析) 
adrci
ips create package incident <incident_id>    -- 创建逻辑包
ips generate package 1 in /tmp              -- 输出物理包到/tmp
5. 设置清理策略 
adrci
set control (SHORTP_POLICY = 120);  -- 跟踪文件保留5天
set control (LONGP_POLICY = 168);   -- 事件数据保留7天

五、使用体验

ADR通过标准化目录结构、事件驱动模型和洪水控制机制,实现了诊断数据的统一管理与高效分析。其演进过程体现了Oracle从分散管理到集中化、再到智能诊断的转型。通过adrci和动态视图的组合使用,管理员可快速定位问题,减少停机时间。


网站公告

今日签到

点亮在社区的每一天
去签到