诊断文件概述
Oracle数据库包括用于预防,检测,诊断和解决数据库问题的故障诊断基础结构。问题包括严重错误,例如代码错误,元数据损坏和客户数据损坏。
高级故障诊断基础架构的目标如下:
- 主动发现问题
- 检测到问题后限制损坏和中断
- 减少问题诊断和解决时间
- 通过启用跟踪文件进行分区来提高可管理性,允许用户定义每个部件的大小和要保留的最大件数,并在达到用户指定的磁盘空间限制后禁用跟踪
-
自动诊断存储库
自动诊断存储库(ADR)是一个基于文件的存储库,用于存储数据库诊断数据,如跟踪文件,警报日志,DDL日志和Health Monitor报告。
ADR的主要特征包括: 统一目录结构
- 一致的诊断数据格式
- 统一工具集
ADR位于数据库之外,这使Oracle数据库能够在物理数据库不可用时访问和管理ADR。数据库实例可以在创建数据库之前创建ADR。
问题和事故
ADR主动跟踪问题,这些问题是数据库中的关键错误。
严重错误表现为内部错误,例如ORA-600
,或其他严重错误。每个问题都有一个问题键,它是描述问题的文本字符串。
当多次出现问题时,ADR会为每次出现创建带时间戳的事件。事件由数字事件ID唯一标识。发生事件时,ADR会向企业管理器发送事件警报。诊断和解决严重错误通常始于事件警报。
由于问题可能在短时间内产生许多事件,因此ADR会在达到某些阈值后对事件生成应用洪水控制。一个洪水控制的事件生成警报日志条目,但不生成事件的转储。通过这种方式,ADR会通知您正在发生严重错误,而不会使系统过载诊断数据。
ADR结构
在ADR基是ADR根目录。
ADR基础可以包含多个ADR 主目录,其中每个ADR主目录是所有诊断数据跟踪,转储,警报日志等的根目录,用于Oracle产品或组件的实例。例如,在具有共享存储和Oracle ASM的Oracle RAC环境中,每个数据库实例和每个Oracle ASM实例都有自己的ADR主目录。
下图说明了数据库实例的ADR目录层次结构。其他Oracle产品或组件(如Oracle ASM或Oracle Net Services)的其他ADR主目录可以存在于此层次结构中,位于相同的ADR基础之下。
警报日志
每个数据库都有一个警报日志,这是一个XML文件,包含数据库消息和错误的时间顺序日志。
警报日志内容包括以下内容:
- 所有内部错误(
ORA-600
),阻止损坏错误(ORA-1578
)和死锁错误(ORA-60
) - 管理操作,如SQL * Plus命令
STARTUP
,SHUTDOWN
,ARCHIVE LOG
,和RECOVER
- 与共享服务器和调度程序进程的功能相关的若干消息和错误
- 自动刷新物化视图期间的错误
Oracle数据库使用警报日志替代在企业管理器GUI中显示信息。如果管理操作成功,则Oracle数据库会将消息作为“已完成”和时间戳写入警报日志。
DDL日志
该DDL日志具有相同的格式和基本行为警报日志,但只包含DDL语句和细节。数据库将DDL信息写入其自己的文件,以减少警报日志中的混乱。
DDL日志记录是DDL文本,可选择使用补充信息进行扩充。每个DDL语句都存在一条日志记录。DDL日志存储在log/ddl
ADR主目录的子目录中。
跟踪文件的类型
每个服务器和后台进程都可以定期写入关联的跟踪文件。这些文件包含有关进程环境,状态,活动和错误的信息。
SQL跟踪工具还会创建跟踪文件,这些文件提供有关各个SQL语句的性能信息。您可以通过各种方式为客户端标识符,服务,模块,操作,会话,实例或数据库启用跟踪。例如,您可以在DBMS_MONITOR
包中执行适当的过程或设置事件。
跟踪文件的位置
ADR将跟踪文件存储在trace
子目录中。跟踪文件名与平台有关,并使用扩展名.trc
。
通常,数据库后台进程跟踪文件名包含Oracle SID,后台进程名称和操作系统进程号。该RECO
过程的跟踪文件的示例是mytest_reco_10355.trc
。
服务器进程跟踪文件名包含Oracle SID,字符串ora
和操作系统进程号。服务器进程跟踪文件名的示例是mytest_ora_10304.trc
。
有时跟踪文件具有相应的跟踪元数据文件,以扩展名结尾.trm
。这些文件包含称为跟踪映射的结构信息,数据库用于搜索和导航。
跟踪文件的分段
当跟踪文件大小有限时,数据库可能会自动将其拆分为最多五个段。段是与活动跟踪文件同名的单独文件,但附加了段号,如下所示ora_1234_2.trc
。
每个细分通常是设定限制的20%MAX_DUMP_FILE_SIZE
。当所有段的组合大小超过限制时,数据库将删除最旧的段(尽管从不是第一段,其中可能包含有关该过程初始状态的相关信息),然后创建一个新的空段。
诊断转储
甲诊断转储文件是一种特殊类型,它包含约详细的状态或结构点在时间信息跟踪文件的。
跟踪倾向于连续输出诊断数据。相反,转储通常是响应于事件的诊断数据的一次性输出。
跟踪转储和事件
大多数转储都是由于事故而发生的。
发生事件时,数据库会将一个或多个转储写入为事件创建的事件目录。事件转储还包含文件名中的事件编号。
在事件创建期间,应用程序可能会将堆或系统状态转储作为操作的一部分。在这种情况下,数据库会将转储名称附加到事件文件名而不是默认的跟踪文件名。例如,由于进程中发生事件,数据库会创建文件prod_ora_90348.trc
。事件中的转储生成文件,其中是事件的数字ID。作为事件的一部分创建的堆转储操作会生成堆转储文件,其中是跟踪转储的数字ID。prod_ora_90348__incident_id_.trc``_incident_id_``prod_ora_90348__incident_id___dump_id_.trc``_dump_id_
跟踪文件
一个跟踪文件是包含用于研究问题的诊断数据的文件。此外,跟踪文件可以为调整应用程序或实例提供指导。
1.查看diagnostic_dest 属性值
SQL> show parameter dia
NAME TYPE VALUE
------------------------------------ ----------- -----------------------------
-
diagnostic_dest string /opt/oracle
2.查看 v$diag_info视图查看相关路径
select * from v$diag_info;