作者介绍

姚远:鼎甲科技高级技术顾问,墨天轮MVP。Oracle ACE,华为云MVP,专注于 Oracle、MySQL 数据库多年,拥有 Oracle 10g、12c OCM, MySQL 5.6、5.7、8.0 OCP,并在:EMC、IBM p、RedHat、Cisco、SQL Server、DB2 等领域拥有 20 + 技术认证。两次获得国家部级科技进步奖,发明过两项计算机相关专利。现在广州鼎甲任高级技术顾问,向同事和客户提供Oracle 和 MySQL方面的培训和技术咨询。

ADR 的作用

Oracle 数据库如果出现故障,我们的第一个反应是查看数据库的 alert log,但一些工程师对 alert log 不熟悉,实际上 alert log 位于Oracle 数据库自动诊断库(Automatic Diagnostic Repository,以下简称 ADR) 中,要熟悉 alert log,我们必需全面了解 ADR 的概念。

ADR(Automatic Diagnostic Repository)是一个基于文件的存储库,用于存储数据库诊断数据,如跟踪、转储、警报日志、运行状况监视报告等。它具有跨多个实例和多个产品的统一目录结构。为什么基于文件的原因是显而易见的,因为数据库出现故障的时候数据库可能无法打开,将诊断信息放到文件里面保证了随时可以查阅。数据库、Oracle自动存储管理(Oracle ASM)、侦听器、Oracle Clusterware和其他Oracle产品或组件将所有诊断数据存储在ADR中。每个产品的每个实例都将诊断数据存储在ADR中自己的主目录下。例如,在具有共享存储和 Oracle ASM 的 Oracle Real Application Clusters 环境中,每个数据库实例和每个 Oracle ASM 实例都有一个ADR主目录。

ADR 中的文件

  • trace:每个服务器和后台进程都可以写入关联的 trace 文件。trace 文件在流程的整个生命周期内定期更新,可以包含有关流程环境、状态、活动和错误的信息。此外,当进程检测到严重错误时,它会将有关该错误的信息写入其 trace 文件。

  • dumps:dumps 是一种特定类型的 trace 文件。它通常是针对事件(如事件)的诊断数据的一次性输出,而 trace file 往往是诊断数据的连续输出。

  • core:core 文件包含一个内存转储,采用全二进制的格式。

  • Alert Log 和 sbtio.log 在后面说明。

ADR 的目录结构

ADR 的基目录称为 ADR base ,其位置由数据库的参数 DIAGNOSTIC_DEST 决定,如果省略此参数或将其留空,则数据库将在启动时采用下面的规则进行设置:

  1. 如果设置了环境变量 ORACLE_BASE,则 DIAGNOSTIC_DEST  设置为 ORACLE_BASE 指定的目录。

  2. 如果未设置环境变量 ORACLE_BASE,则 DIAGNOSTIC_DEST 设置为 ORACLE_HOME/log。
    因此,目前一个常见的 ADR base 例子是 /u01/app/oracle。
    在ADR base中,可以有多个 ADR home,其中每个 ADR home 是特定 Oracle 产品或组件的特定实例的所有诊断数据跟踪、转储、警报日志等的根目录。例如,在带有 Oracle ASM 的 Oracle Real Application Clusters 环境中,每个数据库实例、Oracle ASM实例和侦听器都有一个ADR home,结构如下:

一个方便的查询所有组件的家目录的方法是在 adrci 工具中用 show homes 的命令,例如:

ADR base = "/u01/app/grid"adrci> show homes;ADR Homes: diag/asm/+asm/+ASM1diag/crs/rac1/crsdiag/clients/user_grid/host_1874443374_110diag/clients/user_root/host_1874443374_110diag/tnslsnr/rac1/asmnet1lsnr_asmdiag/tnslsnr/rac1/listener_scan1diag/tnslsnr/rac1/listenerdiag/asmcmd/user_grid/rac1diag/asmcmd/user_oracle/rac1diag/kfod/rac1/kfod

数据库的 ADR 家目录结构

每个产品的 ADR 家的路径构成如下:(从 ADR 的基目录开始)

diag/product_type/product_id/instance_id

我们以数据库为例:

例如一个 DB_UNIQUE_NAME 和 SID 都是 orcl 的数据库 ADR 家目录是:/u01/app/oracle/diag/rdbms/orcl/orcl

每个子目录的作用如下:
· alert:XML格式的 alert log
· cdump:core 文件
· incident: 多个子目录,其中每个子目录都是针对特定事件命名的,每个子目录只包含与该事件相关的转储
· trace:  后台和服务器进程跟踪文件、SQL跟踪文件和文本格式的 alert log
· others: ADR home的其他子目录,存储事件包、运行状况监视报告、警报日志以外的日志(例如DDL日志和调试日志)以及其他信息

在视图 v$diag_info 中存储着 ADR 重要目录的路径:

select * from v$diag_info   INST_ID NAME       VALUE                     CON_ID---------- ---------------------------- ---------------------------------------------------------------- ----------   1 Diag Enabled     TRUE                    0   1 ADR Base      /u01/app/oracle                 0   1 ADR Home      /u01/app/oracle/diag/rdbms/orcl/orcl            0   1 Diag Trace      /u01/app/oracle/diag/rdbms/orcl/orcl/trace          0   1 Diag Alert      /u01/app/oracle/diag/rdbms/orcl/orcl/alert          0   1 Diag Incident    /u01/app/oracle/diag/rdbms/orcl/orcl/incident          0   1 Diag Cdump      /u01/app/oracle/diag/rdbms/orcl/orcl/cdump          0   1 Health Monitor    /u01/app/oracle/diag/rdbms/orcl/orcl/hm           0   1 Default Trace File    /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_33364.trc      0   1 Active Problem Count   0                    0   1 Active Incident Count  0                    0   1 ORACLE_HOME      /u01/app/oracle/product/19.0.0/db_1            0

Alert Log

Alert Log 可能是运维工程师最关心的日志,它是按时间顺序记录消息和错误的日志。每个 ADR 家目录中都有一个警报日志。每个警报日志都特定于其组件类型,如数据库、Oracle ASM、侦听器和Oracle Clusterware。

对于数据库,Alert Log 包含有关以下内容的消息:

  • 严重错误(事件)

  • 管理操作,如启动或关闭数据库、恢复数据库、创建或删除表空间等。

  • 自动刷新实化视图时出错

  • 其他数据库事件

Alert Log 的格式有两种,XML 格式和文本格式。您可以使用 cloud control 和ADRCI实用程序以文本格式(去掉XML标记)查看警报日志。为了向后兼容,ADR中还存储了一个文本格式的警报日志版本。但是,Oracle建议使用 XML 格式的版本对警报日志内容进行任何解析,因为文本格式是非结构化的,可能会因版本而异。
对于我们前面列举的 orcl 数据库,这两类的 alert log 如下:

 $ tail /u01/app/oracle/diag/rdbms/orcl/orcl/alert/log.xml  <txt>Closing Resource Manager plan via scheduler window </txt></msg><msg time='2020-12-07T18:00:00.130+08:00' org_id='oracle' comp_id='rdbms' type='UNKNOWN' level='16' host_id='dell.scutech' host_addr='fe80::655e:8314:f61f:9bac%em1' pid='42245' con_uid='1784183627' con_id='5' con_name='SALESPDB'> <txt>Clearing Resource Manager plan via parameter </txt></msg>$ tail /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log 2020-12-07T18:00:00.077657+08:00PDB1(3):Closing scheduler windowPDB1(3):Closing Resource Manager plan via scheduler windowPDB1(3):Clearing Resource Manager plan via parameterHRPDB(4):Closing scheduler windowHRPDB(4):Closing Resource Manager plan via scheduler windowHRPDB(4):Clearing Resource Manager plan via parameterSALESPDB(5):Closing scheduler windowSALESPDB(5):Closing Resource Manager plan via scheduler windowSALESPDB(5):Clearing Resource Manager plan via parameter

下面是一个 crs 的两类 alert log 的例子:

[grid@rac1 crs]$ tail /u01/app/grid/diag/crs/rac1/crs/alert/log.xml  <txt>2020-12-03 18:52:29.951 [ORAAGENT(35496)]CRS-8500: Oracle Clusterware ORAAGENT process is starting with operating system process ID 35496 </txt></msg><msg time='2020-12-03T18:52:52.787+08:00' org_id='oracle' comp_id='crs' msg_id='clsdadr_process_queue:4927:2974305713' type='UNKNOWN' group='CLSDADR' level='16' host_id='rac1' host_addr='192.168.82.175' pid='36879'> <txt>2020-12-03 18:52:52.679 [ORAAGENT(36879)]CRS-8500: Oracle Clusterware ORAAGENT process is starting with operating system process ID 36879 </txt></msg>[grid@rac1 crs]$ tail /u01/app/grid/diag/crs/rac1/crs/trace/alert.log 2020-12-03 18:52:13.218 [OCTSSD(34536)]CRS-2401: The Cluster Time Synchronization Service started on host rac1.2020-12-03 18:52:13.218 [OCTSSD(34536)]CRS-2407: The new Cluster Time Synchronization Service reference node is host rac2.2020-12-03 18:52:20.552 [CRSD(34786)]CRS-8500: Oracle Clusterware CRSD process is starting with operating system process ID 347862020-12-03 18:52:23.601 [CRSD(34786)]CRS-1012: The OCR service started on node rac1.2020-12-03 18:52:23.671 [CRSD(34786)]CRS-1201: CRSD started on node rac1.2020-12-03 18:52:24.356 [ORAAGENT(35004)]CRS-8500: Oracle Clusterware ORAAGENT process is starting with operating system process ID 350042020-12-03 18:52:24.420 [ORAROOTAGENT(35014)]CRS-8500: Oracle Clusterware ORAROOTAGENT process is starting with operating system process ID 350142020-12-03 18:52:24.480 [ORAAGENT(35028)]CRS-8500: Oracle Clusterware ORAAGENT process is starting with operating system process ID 350282020-12-03 18:52:29.951 [ORAAGENT(35496)]CRS-8500: Oracle Clusterware ORAAGENT process is starting with operating system process ID 354962020-12-03 18:52:52.679 [ORAAGENT(36879)]CRS-8500: Oracle Clusterware ORAAGENT process is starting with operating system process ID 36879[grid@rac1 crs]$

sbtio log

sbtio.log,从这个文件的名字我们可以很容易推断这个日志文件是干什么用的,大家知道 rman 有两种通道,一种是 disk,另一种是 sbt,您可以认为是磁带机用的通道,io 的意思就不用说了吧,这个文件保存由介质管理软件写入的特定信息,例如鼎甲科技的迪备软件,Veritas的 nbu 软件都会在这个文件里面记录日志。
对于我们前面列举的 orcl 数据库,sbtio.log 的例子如下:

$ tail /u01/app/oracle/diag/rdbms/orcl/orcl1/trace/sbtio.log
SBT-19152 11/18/20 22:40:43 [LM_ERROR] 7501: Failed to start session with server: Protocol not supported

ADRCI 工具

ADRCI 工具是 Oracle11g 版本推出的新工具,主要用来管理alert文件、trace文件、dump文件、健康检查报告等。这个工具可以快速查询错误相关的所有trace文件,并将这些文件打包到一个zip文件,以便将问题相关的信息提供给Oracle的技术支持。
下面是生成一个问题报告的例子。

[grid@rac1 crs]$ adrciADRCI: Release 19.0.0.0.0 - Production on Tue Dec 8 11:26:34 2020Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.ADR base = "/u01/app/grid"adrci> show problemsADR Home = /u01/app/grid/diag/crs/rac1/crs:*************************************************************************PROBLEM_ID           PROBLEM_KEY                                                 LAST_INCIDENT        LASTINC_TIME                             -------------------- ----------------------------------------------------------- -------------------- ---------------------------------------- 1                    CRS 8503                                                    33                   2020-12-03 18:34:59.547000 +08:00       1 row fetchedadrci> set homepath diag/crs/rac1/crsadrci>  IPS CREATE PACKAGE PROBLEM 1Created package 1 based on problem id 1, correlation level typicaladrci> ips generate package 1 in /tmpGenerated package 1 in file /tmp/CRS8503_20201208114517_COM_1.zip, mode completeadrci>

压缩文件 /tmp/CRS8503_20201208114517_COM_1.zip 中包含了问题 1 相关的日志和 trace 文件。

墨天轮原文链接:https://www.modb.pro/db/41837(复制到浏览器中打开或者点击“阅读原文”立即查看)

推荐阅读:144页!分享珍藏已久的数据库技术年刊

推荐下载:2020数据技术嘉年华PPT下载

2020数据技术嘉年华近50个PPT下载、视频回放已上传墨天轮平台,可在“数据和云”公众号回复关键词“DTC2020”获得!

视频号,新的分享时代,关注我们,看看有什么新发现?

数据和云

ID:OraNews

如有收获,请划至底部,点击“在看”,谢谢!

点击下图查看更多 ↓

云和恩墨大讲堂 | 一个分享交流的地方

长按,识别二维码,加入万人交流社群

请备注:云和恩墨大讲堂

  点个“在看”

你的喜欢会被看到❤

Oracle 数据库自动诊断库 ADR(Automatic Diagnostic Repository)简介相关推荐

  1. Oracle 数据库自动诊断库 ADR(Automatic Diagnostic Repository)简介 发表在 数据和云

    https://mp.weixin.qq.com/s/J3py2W8gN-Xx6wJb_BIFZQ 文章目录 ADR 的作用 ADR 中的文件 ADR 的目录结构 数据库的 ADR 家目录结构 Ale ...

  2. Oracle 11g新特性:Automatic Diagnostic Repository

    作者:eygle |English Version [转载时请以超链接形式标明文章出处和作者信息及本声明] 链接:http://www.eygle.com/archives/2007/08/11g_a ...

  3. Oracle ADR(Automatic Diagnostic Repository)介绍

    ADR(Automatic Diagnostic Repository)是一个基于文件结构的,Oracle数据库关于一切痕迹.dump.警报日志.健康监控报告等诊断信息的数据仓库.从11g开始,Ora ...

  4. Oracle ADDM 自动诊断监视工具 介绍

    Oracle AWR 介绍(AWR -- Automatic Workload Repository) http://blog.csdn.net/tianlesoftware/archive/2009 ...

  5. 下列关于oracle数据库的描述错误的是,Oracle数据库基础题库【含答案】.doc

    Oracle数据库基础题库[含答案] 判断题,正确请写写"T",错误请写写"F", 1.oracle数据库系统中,启动数据库的第一步是启动一个数据库实例.( T ...

  6. oracle怎么自动备份数据,ORACLE数据库自动备份_详细步骤

    <ORACLE数据库自动备份_详细步骤>由会员分享,可在线阅读,更多相关<ORACLE数据库自动备份_详细步骤(9页珍藏版)>请在人人文库网上搜索. 1.ORACLE数据库自动 ...

  7. Linux oracle数据库自动备份自动压缩脚本代码

    Linux oracle数据库自动备份自动压缩脚本代码 Linux oracle数据库备份完成后可以自动压缩脚本代码. 复制代码代码如下: #!/bin/bash #backup.sh #edit: ...

  8. oracle数据库自动备份

    oracle数据库自动备份 环境:windows server2008操作系统,oracle 10.2.0数据库 工具:windows命令窗口 ,windows任务计划 命令:exp  profile ...

  9. delphi Oracle导出多个表,Oracle数据库自动备份工具(Delphi源码)

    Oracle数据库自动备份工具(Delphi源码) 下载地址:http://www.blogjava.net/Files/96sd2/OraSvr.rar 『OracleBackupService』简 ...

最新文章

  1. 【JMS】JMS详解
  2. 商业逻辑12讲之战略管理的逻辑
  3. javascript DOM事件总结
  4. webStrorm js文件里 怎么去掉参数的下划线
  5. Spring安全依赖查找
  6. Java中list==null与list.size( )==0的区别
  7. python-获取当前文件名
  8. CSDN博客下载器 CSDNBlogDownloader
  9. 花生壳实现内网穿透教程
  10. 如何在win10上显示隐藏文件
  11. The requested URL was not found on this serve
  12. 【嵌入式系统开发19】理解嵌入式实时操作系统,以uc/OS为例利用C8T6完成LED周期闪烁以及串口周期输出
  13. 趁年轻,多尝试一些富有挑战的工作吧
  14. [Vmware]VCSA部署及遇到的问题
  15. [BZOJ4246]两个人的星座(计算几何)
  16. 2020,我不想奋斗了
  17. Hadoop集群搭建07_克隆搭建Linux集群环境
  18. 网络基础GPRS 中的PDP上下文名词解释
  19. 动漫人物的躯干如何画
  20. C语言位运算农夫过河,位运算常见操作和农夫过河问题(C++实现)

热门文章

  1. cpu负载转移内存_为什么将所有工作负载转移到云中是个坏主意
  2. MyBatis 实例
  3. localStorage sessionStorage
  4. UR5 IK group中遇到的问题
  5. linux发展前景2018,2018 年 Linux 的 8 个发展预测
  6. cdt规约报文用程序解析_用 Python 撸一个 Web 服务器第3章:使用 MVC 构建程序
  7. matlab 取绝对值最快的犯法,求助被积函数有绝对值号的问题。
  8. java excel条件格式_Java 使用条件格式高亮Excel单元格
  9. Luogu2014选课
  10. loc与iloc函数的使用