Oracle - 4 - ADR(Automatic Diagnostic Repository)

2023-11-22 20:40

本文主要是介绍Oracle - 4 - ADR(Automatic Diagnostic Repository),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • problems和incidents (问题和事件)
    • 事件在ADR中有保留策略
    • incident packaging service
    • Diagnostic Frame Work(DFW)是如何工作的
    • ADR的结构和位置
    • adrci接口
    • packaging incidents(打包事件)
    • 使用ADRCI或SWB创建IPS包的步骤
    • ENABLE_DDL_LOGGING参数

在这里插入图片描述

ADR(Automatic Diagnostic Repository)是一个基于文件的档案库,用于存放数据库的诊断信息,例如跟踪文件,意外dump文件,IPS包,警告日志文件,健康监控报告,核心dump文件以及其它诊断信息。ADR的根目录叫做ADR base, 位置通过参数DIAGNOSTIC_DEST设置。ADR拥有统一的目录结构,在数据库之外存储多个产品和实例的诊断信息,因此即使在数据库关闭时仍然可以进行问题诊断。

从Oracle 11gR1 开始,ADR用于存储数据库,ASM,CRS和其它产品或组件(如listener)的诊断信息。每一个实例或者产品拥有各自的ADR home路径。例如在一个RAC环境下,ASM, 数据库实例拥有单独的ADR home。

改变
从11gR1开始,所有的诊断信息都保存在ADR中。ADR是一个外部的,迷你的XML数据库。
跟踪文件和进程的1:1对应不再存在。虽然进程跟踪文件仍然存在,但是它只记录每个事件2的trc和trm文件的位置。

Oracle为每一个事件产生一对儿文件——trc和trm文件。

  • trc文件存放诊断信息
  • trm文件存放元数据。

另外,文件的内部结构也发生了改变。例如一个XML格式的文件被引入,存放在ADR homealert路径下(ADR_BASE/diag/rdbms/<db_name>/<SID>/alert/log.xml)。trc文件由若干个标记过的XML记录构成,每个记录都是分层排序过的。这种改变更加容易找到文件中我们感兴趣的部分的信息。


在oracle 11g中,你不能在目录$ORACLE_BASE/diag/rdbms/$INSTANCE_NAME/$ORACLE_SID/alert中直接读取alert日志。而是读取其中的log.xml文件。该文件不是文本文件。除了所有标准的数据库操作信息外,alert日志里也包含关于事件的信息。你也可以从目录 $ORACLE_BASE/diag/rdbms/$INSTANCE_NAME/$ORACLE_SID/trace中读取以前版本的alert日志。

problems和incidents (问题和事件)

围绕着oracle 11g错误诊断结构有两种新的概念:problems和incidents。

  • problems
    问题
    任何严重错误1称之为problems,比如ORA-600错误,ORA-04031错误。所有涉及数据库problems的源数据都存储在ADR中。每一个问题分配一个关键字,以便于标识和描述问题。问题关键字包括oracle错误号和错误变量值。

  • incidents
    事件
    是一次问题的产生。一个问题可能会产生多次。每一次就是一个事件。每个事件有它自己的事件ID.

    比如:

    INCIDENT_ID PROBLEM_KEY CREATE_TIME
    ------------ ------------------ ---------------------------
    8801 ORA 600 [4899] 27-MAR-07 06.14.41.04-05:00
    

    当某一个事件(incident)产生时。在数据库里做三件事情:

    1. 为该事件创建一个告警日志行并分配合适安全告警。
    2. 在alert日志里创建相关条目。
    3. 收集和存储诊断数据放置在ADR结构中合适子目录中。

不能够禁止自动创建严重错误1事件。

事件在ADR中有保留策略

事件元数据保留在ADR中默认一年。
事件文件和dump保留在ADR中默认是一个月。
可以使用事件package configuration更改这些保留策略。后台进程MMON自动清洗过期的ADR数据。

incident packaging service

在oracle 11g中,你可以使用IPS来搜寻关于某一个事件或错误的相关trace filedump file告警日志并将其打包成压缩文件。

这个特性称之为(incident packaging serviceIPS

Diagnostic Frame Work(DFW)是如何工作的

在这里插入图片描述

  1. 当一个严重错误1发生时,DDE(diagnostic data extractor)被出发,并将相应的诊断信息写入到事件跟踪文件。
  2. ADR中的诊断信息可以通过ADRCI(命令行工具)或者SWBSupport WorkBench,图形界面)被访问。
  3. 通过ADRCISWBADR中抽取诊断信息并创建包,这称之为事件打包服务(IPS)。查看诊断信息或上传IPS包MOSIPS包包含对应事件的所有诊断信息。

ADR的结构和位置

初始化参数diagnostic_dest指定了ADR的根目录。

SQL> show parameter diagnostic_dest
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
diagnostic_dest                      string      /u01/app/oracle

即使你忽略了该初始化参数。 oracle也会创建ADR。如果你设置了ORACLE_BASE环境变量,那么diagnostic_dest缺省值是该目录。如果你没有设置ORACLE_BASE变量,该参数值为$ORACLE_HOME/log目录。

目录结构

ADR存储所有oracle产品的诊断数据。ADR为每一个oracle产品及其实例分配一个单独的home目录。因此一个ADR目录包含多个home目录。
每一个ADR的home目录是一个为每一个数据库实例或其它oracle产品或组件存储其诊断文件。其目录结构如下:

ADR_base/diag/product_type/product_id/instance_id/

比如一个 diagnostic_dest初始化参数为 /u05/app/oracle。那么一个oracle数据库的sid为prod1的home目录就如下所示:

/u05/app/oracle/diag/rdbms/prod1/prod1/

在一个ADR的home目录下有很多子目录:

  • alert:一个实例的告警日志文件(xml格式)。
  • cdump:core文件。
  • hm:健康检查报告。
  • incident:每一个事件一个子目录,其中包含所有trace dump文件。
  • incpkg:你创建的事件包,用于发给oracle支持所用。
  • ir:包含实例事件报告。
  • trace:存储回话trace文件。

可以通过视图v$diag_info来查询目录及其位置:

SQL> select inst_id, name, value from v$diag_info ; INST_ID NAME                                                             VALUE
---------- ---------------------------------------------------------------- --------------------------------------------------------------------------------1 Diag Enabled                                                     TRUE1 ADR Base                                                         /u01/app/oracle1 ADR Home                                                         /u01/app/oracle/diag/rdbms/orcl/orcl1 Diag Trace                                                       /u01/app/oracle/diag/rdbms/orcl/orcl/trace1 Diag Alert                                                       /u01/app/oracle/diag/rdbms/orcl/orcl/alert1 Diag Incident                                                    /u01/app/oracle/diag/rdbms/orcl/orcl/incident1 Diag Cdump                                                       /u01/app/oracle/diag/rdbms/orcl/orcl/cdump1 Health Monitor                                                   /u01/app/oracle/diag/rdbms/orcl/orcl/hm1 Default Trace File                                               /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_21745.trc1 Active Problem Count                                             31 Active Incident Count                                            311 rows selected

正如你所见,视图v$diag_info中包括问题和事件数量。

adrci接口

oracle为我们提供了一个挖掘ADR里的诊断数据的接口,叫adrci。这个命令行工具提供很多丰富的功能,比如将问题和事件打包为一个zip文件发给oracle技术支持。这些被压缩的诊断数据包括trace及dump文件,alert log条目以及oracle 11g的健康监视报告。可以使用adrci的交互模式或使用操作系统的脚本批处理执行这些命令。

在oracle用户执行adrci

[oracle@node1 ~]$ adrci
ADRCI: Release 11.1.0.6.0 - Beta on Thu Apr 5 09:23:37 2012
Copyright (c) 1982, 2007, Oracle. All rights reserved.
ADR base = "/home/oracle"
adrci>

输入帮助

adrci> help
HELP [topic]
Available Topics:
CREATE REPORT
ECHO
EXIT
HELP
HOST
IPS
PURGE
RUN
SET BASE
SET BROWSER
SET CONTROL
SET ECHO
SET EDITOR
SET HOMES | HOME | HOMEPATH
SET TERMOUT
SHOW ALERT
SHOW BASE
SHOW CONTROL
SHOW HM_RUN
SHOW HOMES | HOME | HOMEPATH
SHOW INCDIR
SHOW INCIDENT
SHOW PROBLEM
SHOW REPORT
SHOW TRACEFILE
SPOOL
There are other commands intended to be used directly by Oracle, type
"HELP EXTENDED" to see the list
adrci>

查看home目录

adrci> show home
ADR Homes:
diag/tnslsnr/node1/listener
diag/clients/user_oracle/host_514214572_11
diag/rdbms/rac/rac
adrci>

为了在shell脚本中使用adrci,你可以使用命令行参数exec来调用adrci。比如:

adrci exec="command[; command]..."

例如你想在脚本里使用show homesshow incident,使用如下语法:adrci exec="show homes; show incident"

[oracle@node1 ~]$
[oracle@node1 ~]$ adrci exec="show homes; show incident"
ADR Homes:
diag/tnslsnr/node1/listener
diag/clients/user_oracle/host_514214572_11
diag/rdbms/rac/rac
ADR Home = /home/oracle/diag/tnslsnr/node1/listener:
*************************************************************************
0 rows fetched
ADR Home = /home/oracle/diag/clients/user_oracle/host_514214572_11:
*************************************************************************
0 rows fetched
ADR Home = /home/oracle/diag/rdbms/rac/rac:
*************************************************************************
0 rows fetched
[oracle@node1 ~]$

每一个命令必须使用分号隔开。
下面这个例子是使用ADR命令行去执行vi alert命令。

adrci exec="set homepath diag/rdbms/rac/rac;set editor vi;show alert"

另外,你还可以使用管道方式来封装一个shell脚本,比如下面这个例子是查看alert日志条目中包含ORA-的相关错误及其错误发生的时间。

adrci << EOF
set homepath diag/rdbms/rac/rac
set editor vi
show alert -p "message_text like '%ORA-%'"
EOF

比如使用如下命令查看所有ORA-错误:

adrci> set homepath diag/rdbms/rac/rac
adrci> set editor vi
adrci> show alert -p "message_text like '%ORA-%'"
ADR Home = /home/oracle/diag/rdbms/rac/rac:
*************************************************************************
Output the results to file: /tmp/alert_10191_1638_rac_1.ado2012-03-29 20:56:12.266000 +08:00
ORA-1109 signalled during: ALTER DATABASE CLOSE NORMAL...
2012-03-29 20:56:27.810000 +08:00
Errors in file /home/oracle/diag/rdbms/rac/rac/trace/rac_ora_10453.trc:
ORA-00313: ??????? 1 (???? 1) ???
ORA-00312: ???? 1 ?? 1: '/home/oracle/oradata/rac/redo01.log'
ORA-27037: ????????
Linux Error: 2: No such file or directory
Additional information: 3
Errors in file /home/oracle/diag/rdbms/rac/rac/trace/rac_ora_10453.trc:
ORA-00313: ??????? 2 (???? 1) ???
ORA-00312: ???? 2 ?? 1: '/home/oracle/oradata/rac/redo02.log'
ORA-27037: ????????
Linux Error: 2: No such file or directory
Additional information: 3
2012-03-29 20:56:29.286000 +08:00
Errors in file /home/oracle/diag/rdbms/rac/rac/trace/rac_ora_10453.trc:
ORA-00313: ??????? 3 (???? 1) ???
ORA-00312: ???? 3 ?? 1: '/home/oracle/oradata/rac/redo03.log'
ORA-27037: ????????
Linux Error: 2: No such file or directory
Additional information: 3
2012-03-29 21:04:31.458000 +08:00
ORA-1089 : opidrv aborting process J000 ospid (10641_3081467584)
2012-04-03 21:14:42.300000 +08:00
Errors in file /home/oracle/diag/rdbms/rac/rac/trace/rac_j008_6295.trc:
ORA-12012: error on auto execute of job 11689
ORA-01403: no data found

像vi编辑器一样退出后,可以在文件/tmp/alert_10191_1638_rac_1.ado中找到屏幕输出结果。便于分析,可见这个特性和unix中的grep |ORA-命令是大不相同,因为后者只能输出错误行,但是错误行发生的时间却不能显示,而 show alert则同时显示错误和发生时间。

但是这里要注意:
如果执行如下命令,会让你选择home目录,比如:

adrci> show alert
Choose the alert log from the following homes to view:
1: diag/tnslsnr/node1/listener
2: diag/clients/user_oracle/host_514214572_11
3: diag/rdbms/rac/rac
Q: to quit
Please select option:

这里执行show alert时并没有指定home目录,而是直接在root目录环境下执行show alert命令,因此你需要指定home目录环境或者选择在哪个home目录环境下执行该命令:
而采用下面这种方式,就不需要选择home目录,因为已经明确指定home目录(注意这里set homepath不能指定绝对路径):

adrci> set homepath diag/rdbms/rac/rac
adrci> show alert -p "message_text like '%ORA-%'"
ADR Home = /home/oracle/diag/rdbms/rac/rac:
*************************************************************************
Output the results to file: /tmp/alert_10511_1638_rac_2.ado
2012-03-29 20:56:12.266000 +08:00
ORA-1109 signalled during: ALTER DATABASE CLOSE NORMAL...
2012-03-29 20:56:27.810000 +08:00
Errors in file /home/oracle/diag/rdbms/rac/rac/trace/rac_ora_10453.trc:
ORA-00313: ??????? 1 (???? 1) ???
ORA-00312: ???? 1 ?? 1: '/home/oracle/oradata/rac/redo01.log'
ORA-27037: ????????
Linux Error: 2: No such file or directory
Additional information: 3
Errors in file /home/oracle/diag/rdbms/rac/rac/trace/rac_ora_10453.trc:
ORA-00313: ??????? 2 (???? 1) ???
ORA-00312: ???? 2 ?? 1: '/home/oracle/oradata/rac/redo02.log'
ORA-27037: ????????
Linux Error: 2: No such file or directory
Additional information: 3
2012-03-29 20:56:29.286000 +08:00
Errors in file /home/oracle/diag/rdbms/rac/rac/trace/rac_ora_10453.trc:
ORA-00313: ??????? 3 (???? 1) ???
ORA-00312: ???? 3 ?? 1: '/home/oracle/oradata/rac/redo03.log'
ORA-27037: ????????
Linux Error: 2: No such file or directory
Additional information: 3
2012-03-29 21:04:31.458000 +08:00
ORA-1089 : opidrv aborting process J000 ospid (10641_3081467584)
2012-04-03 21:14:42.300000 +08:00
Errors in file /home/oracle/diag/rdbms/rac/rac/trace/rac_j008_6295.trc:
ORA-12012: error on auto execute of job 11689
ORA-01403: no data found
~

当然某些命令可以支持当前home目录为多个,比如show tracefile等:
当不指定homepath或指定多个homepath时,那么默认是显示所有当前homepath下的tracefile。如果你单独指定某一个homepath,那么该命令只显示当前homepath的tracefile。
有些命令不支持当前homepath为多个,如前面的show alert,又如下面的命令:

adrci> ips create package;
DIA-48448: This command does not support multiple ADR homes
adrci>

这个时候,你必须设置单个homepath以支持该命令:

drci> set homepath diag/rdbms/rac/rac
adrci> ips create package;
Created package 1 without any contents, correlation level typical

你也可以像sqlplus一样将命令显示结果传送到一个文件中,如下所示:

adrci> spool /u01/app/oracle/strip_alert.log
adrci> show alert
adrci> spool off

显示事件:

adrci> show incident
ADR Home = C:\ORCL11\APP\ORACLE\DIAG\diag\rdbms\auxdb\auxdb:
**********************************************************************
0 incident info records fetched
ADR Home = C:\ORCL11\APP\ORACLE\DIAG\diag\rdbms\eleven\eleven:
**********************************************************************
INCIDENT_ID PROBLEM_KEY CREATE_TIME
------------ -------------- ---------------------------
8801 ORA 600 [4899] 17-MAR-07 06.14.41.04-05:00
16417 ORA 7445 [ACCESS_VIOLATION] 17-MAR-07 06.15.46.7905:00
2 incident info records fetched
ADR Home = C:\ORCL11\APP\ORACLE\DIAG\diag\rdbms\orcl11\orcl11:
**********************************************************************
INCIDENT_ID PROBLEM_KEY CREATE_TIME
-------------------- -------------------- ---------------------------
113769 ORA 1578 [2] [66598] 27-MAR-07 10.00.10.91-05:00
113770 ORA 1578 27-MAR-07 10.00.11.86-05:00
113771 ORA 1578 27-MAR-07 10.00.12.10-05:00
3 incident info records fetched
adrci>

上面的结果显示分析如下:
数据库auxdb没有打开的事件,数据库eleven有两个打开的事件,数据库orcl11有三个打开的事件。
如果你想下钻到具体某一个事件的详细情况,可是使用如下命令:

adrci> show incident -mode detail -p "incident_id=113769"
...
----------------------------------------------------------
INCIDENT FILES:
INCIDENT_ID 113769
OWNER_ID 1
BFILE C:\ORCL11\APP\ORACLE\DIAG\diag\rdbms\orcl11\orcl1
\incident\incdir_113769/orcl11_j003_4244_i113769.trc
Incident file number: 1
----------------------------------------------------------
1 incident info records fetched
adrci>

show incident命令有两个选项,-p 和-mode。你可是使用-p来界定字段,该字段必须使用双引号界定。下面的命令显示了可以使用的字段名:

adrci> set homepath diag/rdbms/rac/rac
adrci> describe incident
Name Type NULL?
----------------------------- --------------- -----------
INCIDENT_ID number
PROBLEM_ID number
CREATE_TIME timestamp
CLOSE_TIME timestamp
STATUS number
FLAGS number
FLOOD_CONTROLLED number
ERROR_FACILITY text(10)
ERROR_NUMBER number
ERROR_ARG1 text(64)
ERROR_ARG2 text(64)
ERROR_ARG3 text(64)
ERROR_ARG4 text(64)
ERROR_ARG5 text(64)
ERROR_ARG6 text(64)
ERROR_ARG7 text(64)
ERROR_ARG8 text(64)
SIGNALLING_COMPONENT text(64)
SIGNALLING_SUBCOMPONENT text(64)
SUSPECT_COMPONENT text(64)
SUSPECT_SUBCOMPONENT text(64)
ECID text(64)
IMPACT number
adrci>

除了-p选项外,-mode选项有三个字段可用,分别是detail,basic,brief。后两者显示基本内容,不显示详细内容。

packaging incidents(打包事件)

oracle 11g的一个很强有力的工具是打包事件。利用这个打包事件压缩的文件夹提交给oracle的支持来帮助解决分析问题。

一旦你创建一个事件包,将添加一个或多个相关的问题到打包文件中。其中包括trace文件dump文件等。
缺省情况下,每一个问题的事件包仅仅包括第一个和最后三个事件。事件包包含所有可以用于诊断的事件。也可以指定事件发生的时间或数量范围来打包。
一旦你创建了事件包,那么你能添加或移除文件。
具体步骤如下:

  1. 创建一个逻辑包:
    使用命令是ips create package。该命令可以创建一个空包,也可以能会创建自动包含诊断数据的包。这个命令有很多变量,你可以选择创建某一特定问题号,事件号,问题关键字,或基于期间的包。
  2. 添加诊断数据到逻辑包:
    这是一个可选步骤,如果你在第一步创建的是一个空包,那么你可以使用这一步骤添加诊断文件或数据。
    3:产生zip文件:
    可以增量添加文件到zip文件里。

示例如下

创建包:

adrci>ips create package
Created package 1 without any contents, correlation level typical
adrci>

添加诊断信息到空包中:

adrci>ips add incident 113769 package 1;
kaged: ADD INCIDENT
Cmd: --- incid 113769
Cmd: --- pkgid 1
adrci>

这一步仍然没有实际的诊断数据,你还需要执行第三部添加诊断元数据到包中。

adrci>ips generate package 4 in /u01/app/oracle/adrci/support
Cmd: GENERATE PACKAGE
Cmd: package id is 4
Cmd: file C:\ORCL11\APP\ORACLE
Cmd: --- mode full
adrci>

这个命令创建一个zip文件在/u01/app/oracle/adrci/目录中。这样创建的压缩文件称之为完全压缩文件。你也可以产生一个增量zip文件。

adrci> ips generate package 5 in /u01/app/oracle/adrci/support incremental

比如会产生以下两个文件:

ORA222_20070304124515_COM_1.zip
ORA222_20070304124515_INC_2.zip

第一个文件是完整zip文件,第二个是增量zip文件。

以下是ips命令的各种变种:

  • ips create package creates an empty package.
  • ips create package problem creates a package based on a problem ID.
  • ips create package problem key creates a problem key–based package.
  • ips create package incident creates a package based on an incident ID.
  • ips create package time creates a package for a specified time range.

使用ADRCI或SWB创建IPS包的步骤

ADRCI

  1. 进入ADRCI

    [oracle@oracle dbs]$ adrciADRCI: Release 12.2.0.1.0 - Production on Sun May 9 16:19:56 2021Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.ADR base = "/u01/app/oracle"
    
  2. 显示存在的ADR home

    adrci> show home;
    ADR Homes:
    diag/rdbms/jopv_pitr_orcl/jopv
    diag/rdbms/egim_pitr_orcl/Egim
    diag/rdbms/orcl/orcl
    diag/rdbms/gede_pitr_orcl/gede
    diag/clients/user_oracle/host_4224465895_107
    diag/tnslsnr/oracle/listener
    
  3. 设定 ADR home

    adrci> set home diag/rdbms/orcl/orcl
    adrci> show home
    ADR Homes:
    diag/rdbms/orcl/orcl
    

    若这里不设置,后面会可能会报错

    adrci> ips pack incident 38425
    DIA-48448: This command does not support multiple ADR homes
    
  4. 显示所有问题3 show problem

    adrci> show problemADR Home = /u01/app/oracle/diag/rdbms/jopv_pitr_orcl/jopv:
    *************************************************************************
    0 rows fetchedADR Home = /u01/app/oracle/diag/rdbms/egim_pitr_orcl/Egim:
    *************************************************************************
    0 rows fetchedADR Home = /u01/app/oracle/diag/rdbms/orcl/orcl:
    *************************************************************************
    PROBLEM_ID           PROBLEM_KEY                                                 LAST_INCIDENT        LASTINC_TIME
    -------------------- ----------------------------------------------------------- -------------------- ----------------------------------------
    2                    ORA 600 [723]                                               38425                2021-05-02 10:38:35.550000 +08:00
    1                    ORA 600 [907]                                               38426                2021-05-02 10:38:37.233000 +08:00
    3                    ORA 1243                                                    40993                2021-05-04 11:07:10.554000 +08:00ADR Home = /u01/app/oracle/diag/rdbms/gede_pitr_orcl/gede:
    *************************************************************************
    0 rows fetchedADR Home = /u01/app/oracle/diag/clients/user_oracle/host_4224465895_107:
    *************************************************************************
    0 rows fetchedADR Home = /u01/app/oracle/diag/tnslsnr/oracle/listener:
    *************************************************************************
    0 rows fetched
  5. 显示所有事件2 show incident

    adrci> show incidentADR Home = /u01/app/oracle/diag/rdbms/jopv_pitr_orcl/jopv:
    *************************************************************************
    0 rows fetchedADR Home = /u01/app/oracle/diag/rdbms/egim_pitr_orcl/Egim:
    *************************************************************************
    0 rows fetchedADR Home = /u01/app/oracle/diag/rdbms/orcl/orcl:
    *************************************************************************
    INCIDENT_ID          PROBLEM_KEY                                                 CREATE_TIME
    -------------------- ----------------------------------------------------------- ----------------------------------------
    38425                ORA 600 [723]                                               2021-05-02 10:38:35.550000 +08:00
    38426                ORA 600 [907]                                               2021-05-02 10:38:37.233000 +08:00
    40993                ORA 1243                                                    2021-05-04 11:07:10.554000 +08:00ADR Home = /u01/app/oracle/diag/rdbms/gede_pitr_orcl/gede:
    *************************************************************************
    0 rows fetchedADR Home = /u01/app/oracle/diag/clients/user_oracle/host_4224465895_107:
    *************************************************************************
    0 rows fetchedADR Home = /u01/app/oracle/diag/tnslsnr/oracle/listener:
    *************************************************************************
    0 rows fetched
  6. 打包事件的诊断信息 adrci>ips pack incident <incident id>

    adrci> ips pack incident 38425
    Generated package 1 in file /u01/app/oracle/product/12.2.0/db_1/dbs/ORA600723_20210509163516_COM_1.zip, mode complete
    

SWB

  1. 登录到企业管理器
  2. 单击链接‘support workbench
  3. 选择‘all active’的问题
  4. 单击‘问题id’查看对应的事件
  5. 选择相应的事件
  6. 单击 ‘quick package
  7. 输入包名,描述信息,选择是否上传到oracle support
  8. 查看包中的信息
  9. 选择‘立即’创建包,并单击按钮‘submit’
    在这里插入图片描述

ENABLE_DDL_LOGGING参数

在之前的版本中没有可选方法来对DDL操作进行日志记录。只有通过logmnr工具对日志进行分析,有时候对误操作的时间点无法判断,分析起来非常麻烦。而在12c R1中,你现在可以将DDL操作写入xml和日志文件中。

这对于了解谁在什么时间执行了create或drop命令是十分有用的。要开启这一功能必须对ENABLE_DDL_LOGGING初始参数加以配置。这一参数可以在数据库或会话级加以设置。当此参数为启用状态,所有的DDL命令会记录在$ORACLE_BASE/diag/rdbms/DBNAME/log|ddl 路径下的xml和日志文件中。一个xml中包含DDL命令,IP地址,时间戳等信息。这可以帮助确定在什么时候对用户或表进行了删除亦或是一条DDL语句在何时触发。

  • 该参数为动态参数,设置如下
    SQL>alter system set enable_ddl_logging=true;
    
  • DDL日志和alter日志有相似的格式和行为。但是只包含DDL语句日志
  • oracle只是为数据库组件提供DDL日志,且需要将参数enable_ddll_logging设置为true
  • 在DDL日志中,每个DDL语句对应一条日志,一种是以xml文件形式,一种是txt文本
  • 日志位于ADR目录下的log/ddl子目录

Oracle 12C – ADRCI查看DDL日志

[oracle@oracle dbs]$ adrciADRCI: Release 12.2.0.1.0 - Production on Mon May 10 01:23:44 2021Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.ADR base = "/u01/app/oracle"
adrci> show log;Choose the home from which to view diagnostic logs:1: diag/rdbms/jopv_pitr_orcl/jopv
2: diag/rdbms/egim_pitr_orcl/Egim
3: diag/rdbms/orcl/orcl
4: diag/rdbms/gede_pitr_orcl/gede
5: diag/clients/user_oracle/host_4224465895_107
6: diag/tnslsnr/oracle/listener
Q: to quitPlease select option: 3
Output the results to file: /tmp/utsout_29195_14053_1.ado# "/tmp/utsout_29195_14053_1.ado" 23L, 772C                                                                                                                          21,1          All2021-05-02 11:06:38.078000 +08:00
ADR sweep of inc 38426 completed
2021-05-02 11:06:39.728000 +08:00
ADR sweep of inc 38425 completed
2021-05-04 11:12:17.799000 +08:00
ADR sweep of inc 40993 completed
ADR sweep of inc2 40993 completed
2021-05-09 19:00:52.924000 +08:00
truncate table wri$_adv_addm_pdbs
2021-05-09 20:00:19.737000 +08:00
truncate table wri$_adv_addm_pdbs
2021-05-09 21:01:33.275000 +08:00
truncate table wri$_adv_addm_pdbs
2021-05-09 22:00:40.560000 +08:00
truncate table wri$_adv_addm_pdbs
2021-05-09 23:01:42.704000 +08:00
truncate table wri$_adv_addm_pdbs
2021-05-10 00:01:54.938000 +08:00
truncate table wri$_adv_addm_pdbs
2021-05-10 01:01:38.315000 +08:00
truncate table wri$_adv_addm_pdbs
2021-05-10 01:19:37.094000 +08:00
create table qq11(id int )

在这里插入图片描述


参考:

  1. 《Oracle 11g 诊断新特性——ADR 简介》 https://blogs.oracle.com/database4cn/oracle-11g-adr

  1. 严重错误Critical Error)是指会产生跟踪文件的Oracle内部错误。
    Oracle把他们划分为不同的类别,内部错误(ORA-600),系统访问异常(ora-7445,ora-3113),锁相关的错误,坏块(ORA-1578)和内存不足(ORA-4030/4031)等。 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  2. 事件Incident)是指一次严重错误1,每出现一次严重错误,就会产生一次事件。ADR会跟踪每一个事件并产生唯一的事件ID。 ↩︎ ↩︎

  3. 问题Problem)是一组严重错误1,他们拥有一组共同的属性。ADR跟踪每一个问题,并且给每一个问题产生一个唯一的问题ID. ↩︎

这篇关于Oracle - 4 - ADR(Automatic Diagnostic Repository)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/412786

相关文章

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

PLsql Oracle 下载安装图文过程详解

《PLsqlOracle下载安装图文过程详解》PL/SQLDeveloper是一款用于开发Oracle数据库的集成开发环境,可以通过官网下载安装配置,并通过配置tnsnames.ora文件及环境变... 目录一、PL/SQL Developer 简介二、PL/SQL Developer 安装及配置详解1.下

oracle如何连接登陆SYS账号

《oracle如何连接登陆SYS账号》在Navicat12中连接Oracle11g的SYS用户时,如果设置了新密码但连接失败,可能是因为需要以SYSDBA或SYSOPER角色连接,解决方法是确保在连接... 目录oracle连接登陆NmOtMSYS账号工具问题解决SYS用户总结oracle连接登陆SYS账号

Oracle数据库如何切换登录用户(system和sys)

《Oracle数据库如何切换登录用户(system和sys)》文章介绍了如何使用SQL*Plus工具登录Oracle数据库的system用户,包括打开登录入口、输入用户名和口令、以及切换到sys用户的... 目录打开登录入口登录system用户总结打开登录入口win+R打开运行对话框,输php入:sqlp

查询Oracle数据库表是否被锁的实现方式

《查询Oracle数据库表是否被锁的实现方式》本文介绍了查询Oracle数据库表是否被锁的方法,包括查询锁表的会话、人员信息,根据object_id查询表名,以及根据会话ID查询和停止本地进程,同时,... 目录查询oracle数据库表是否被锁1、查询锁表的会话、人员等信息2、根据 object_id查询被

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

oracle中exists和not exists用法举例详解

《oracle中exists和notexists用法举例详解》:本文主要介绍oracle中exists和notexists用法的相关资料,EXISTS用于检测子查询是否返回任何行,而NOTE... 目录基本概念:举例语法pub_name总结 exists (sql 返回结果集为真)not exists (s

Oracle的to_date()函数详解

《Oracle的to_date()函数详解》Oracle的to_date()函数用于日期格式转换,需要注意Oracle中不区分大小写的MM和mm格式代码,应使用mi代替分钟,此外,Oracle还支持毫... 目录oracle的to_date()函数一.在使用Oracle的to_date函数来做日期转换二.日