zoukankan      html  css  js  c++  java
  • 先学习Oracle 11g的Automatic Diagnostic Repository新功能

    Oracle 11g之前。当数据库出现故障,通常情况下,第一次需要看alert刊物。什么,看看哪些记录错误,您可以给我们的提示。alert文件名

    是alert_<ORACLE_SID>.log,文件存储路径由參数background_dump_dest决定,比如:

    SQL> show parameter background_dump_dest

    NAME                                            TYPE         VALUE

    ------------------------------------ ----------- ------------------------------

    background_dump_dest                 string        /opt/app/ora10g/admin/petest/bdump

    能够知道alert日志就保存在/opt/app/ora10g/admin/petest/bdump路径下。

    比如例如以下这个log后缀的alert日志,内容是文本格式的。能够直接打开查看:

    -rw-r-----. 1 oracle root 1.8G Jun 21 19:30 alert_bisal.log


    从Oracle 11g開始。alert除了文本格式。还提供了xml格式的,且日志路径有所变化。

    假设设置了參数diagnostic_dest。则原来的

    background_dump_dest等路径将失效。

    Oracle 11g提供的新特性“自己主动诊断库(Automatic Diagnostic Repository, ADR)”的目

    录就是通过这个參数设置的,这个文件夹下存放的是数据库诊断日志、跟踪文件等之前分布于bdump、cdump等路径中的文件,这个

    文件夹通常称为ADR base。比如:

    SQL> show parameter diag

    NAME                                     TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    diagnostic_dest                        string       /home/oracle

    diagnostic_dest的缺省值还和环境变量ORACLE_BASE有关,比如:

    >假设设置了ORACLE_BASE,则diagnostic_dest = $ORACLE_BASE

    >假设未设置ORACLE_BASE,则diagnostic_dest = $ORACLE_HOME/log

    依据eygle的介绍,11g将环境变量ORACLE_BASE引入到了数据库内部,使用隐含參数记录:

    SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.KSPPDESC PDESC

    FROM   SYS.x$ksppi x, SYS.x$ksppcv y

    WHERE  x.indx = y.indx AND x.ksppinm LIKE '%&par%';

    NAME             VALUE               PDESC

    --------------- ----------------- ------------------

    _oracle_base    /home/oracle    ORACLE_BASE

    注意这里SQL的输入的是小写oracle_base。


    能够使用v$diag_info查看ADR信息:

    SQL> select * from v$diag_info;

       INST_ID NAME                      VALUE

    ---------- ------------------------- -------------------------

             1 Diag Enabled                TRUE

             1 ADR Base                     /home/oracle

             1 ADR Home                   /home/oracle/diag/rdbms/galt/galt

             1 Diag Trace                   /home/oracle/diag/rdbms/galt/galt/trace

             1 Diag Alert                    /home/oracle/diag/rdbms/galt/galt/alert

             1 Diag Incident               /home/oracle/diag/rdbms/galt/galt/incident

             1 Diag Cdump                /home/oracle/diag/rdbms/galt/galt/cdump

             1 Health Monitor             /home/oracle/diag/rdbms/galt/galt/hm

             1 Default Trace File         /home/oracle/diag/rdbms/galt/galt/trace/galt_ora_8970.trc

             1 Active Problem Count   1

             1 Active Incident Count    50

    11 rows selected.

    当中Diag Alert保存的是xml格式的alert日志。Diag Trace保存的是文本格式的alert日志。


    还提供了一个新工具ADRCI(ADR Command Interpreter)。说是用于管理诊断数据,友好阅读xml格式的日志,但这里我还没搞清楚为什么须要xml格式的日志,请高手不吝赐教

    命令行中输入adrci就能够登录了,比如:

    [oracle@riserver2 diag]$ adrci

    ADRCI: Release 11.2.0.1.0 - Production on Sat Jun 21 18:51:31 2014

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

    ADR base = "/home/oracle"

    adrci>

    使用show alert能够选择须要查看的日志文件:

    adrci> show alert

    Choose the alert log from the following homes to view:

    1: diag/tnslsnr/riserver2/listener

    2: diag/rdbms/galt/galt

    Q: to quit

    Please select option: 


    接下来就是为什么要有ADR?

    ADR是将各类跟踪文件、日志文件的存储进行统一。不会像之前须要不同文件时要到不同文件夹中查找。有时还得看看參数设置到哪

    些路径下了。Oracle 11g提出了FDI,故障诊断基础框架,Fault Diagnosability Infrastructure。宗旨就是简化用户的数据库出现

    故障时向Oracle请求协助须要重复交互的过程。曾经用户须要依据Oracle的要求,不断重复交互,收集数据。再反馈Oracle,才干

    解决SR。通过FDI,可能会提高故障分析解决的效率。(由于我还没提过。所以不知道是否真的节省了成本?)

    FDI的核心组件是ADR,相关的日志文件进行了归类汇总都存储于ADR之下。同一时候使用IPS,事件打包服务,Incident Packaging 

    Service,能够将相关的数据、日志文件打包压缩。然后用户将这个文件传给Oracle诊断。

    比如:

    adrci> show incident

    ADR Home = /home/oracle/diag/tnslsnr/riserver2/listener:

    *************************************************************************

    0 rows fetched

    ADR Home = /home/oracle/diag/rdbms/galt/galt:

    *************************************************************************

    INCIDENT_ID          PROBLEM_KEY              CREATE_TIME                             

    -------------------- ------------------------ ----------------------------------------

    129708               ORA 4030                         2014-06-21 05:35:06.727000 +08:00

    129709               ORA 4030                         2014-06-21 05:35:15.598000 +08:00

    129710               ORA 4030                         2014-06-21 05:35:23.600000 +08:00

    129711               ORA 4030                         2014-06-21 05:35:31.526000 +08:00

    129712               ORA 4030                         2014-06-21 05:35:39.611000 +08:00

    5 rows fetched

    能够看到这里有5次INCIDENT,能够用例如以下命令查看详细的信息:

    adrci> show incident -mode DETAIL -p "incident_id=129708";
    ADR Home = /home/oracle/diag/tnslsnr/riserver2/listener:
    *************************************************************************
    0 rows fetched
    <INCIDENT_INFO mode="detail">
    <ADR_HOME name="/home/oracle/diag/tnslsnr/riserver2/listener">
    ADR Home = /home/oracle/diag/rdbms/galt/galt:
    *************************************************************************
    **********************************************************
    INCIDENT INFO RECORD 1
    **********************************************************
       INCIDENT_ID                   129708
       STATUS                           ready
       CREATE_TIME                   2014-06-21 05:35:06.727000 +08:00
       PROBLEM_ID                    1
       CLOSE_TIME                    <NULL>
       FLOOD_CONTROLLED       none
       ERROR_FACILITY             ORA
       ERROR_NUMBER               4030
       ERROR_ARG1                   832
       ERROR_ARG2                   callheap
       ERROR_ARG3                   temporary memory
       ERROR_ARG4                    <NULL>
       ERROR_ARG5                    <NULL>
       ERROR_ARG6                    <NULL>
       ERROR_ARG7                    <NULL>
       ERROR_ARG8                    <NULL>
       ERROR_ARG9                    <NULL>
       ERROR_ARG10                   <NULL>
       ERROR_ARG11                   <NULL>
       ERROR_ARG12                   <NULL>
       SIGNALLING_COMPONENT          <NULL>
       SIGNALLING_SUBCOMPONENT    <NULL>
       SUSPECT_COMPONENT               <NULL>
       SUSPECT_SUBCOMPONENT         <NULL>
       ECID                                 <NULL>
       IMPACTS                           0
       PROBLEM_KEY                   ORA 4030
       FIRST_INCIDENT               129708
       FIRSTINC_TIME                 2014-06-21 05:35:06.727000 +08:00
       LAST_INCIDENT                129757
       LASTINC_TIME                  2014-06-21 05:35:52.409000 +08:00
       IMPACT1                           34668547
       IMPACT2                           34668546
       IMPACT3                           0
       IMPACT4                           0
       KEY_NAME                        ProcId
       KEY_VALUE                       2.1
       KEY_NAME                        Client ProcId
       KEY_VALUE                       oracle@riserver2.3005_140012269696768
       KEY_NAME                        SID
       KEY_VALUE                       383.1
       OWNER_ID                        1
       INCIDENT_FILE                  /home/oracle/diag/rdbms/galt/galt/trace/galt_pmon_3005.trc
       OWNER_ID                        1
       INCIDENT_FILE                  /home/oracle/diag/rdbms/galt/galt/incident/incdir_129708/galt_pmon_3005_i129708.trc
    1 rows fetched

    能够看到文件夹下有异常事件的跟踪信息:

    [oracle@riserver2 diag]$ cd /home/oracle/diag/rdbms/galt/galt/incident/incdir_129708/

    [oracle@riserver2 incdir_129708]$ ls -l

    total 7408

    -rw-r-----. 1 oracle root 7561282 Jun 21 05:35 galt_pmon_3005_i129708.trc

    -rw-r-----. 1 oracle root   19034 Jun 21 05:35 galt_pmon_3005_i129708.trm

    以下就使用IPS进行打包:

    adrci> set homepath diag/rdbms/galt/galt

    adrci> ips create package incident 129708

    Created package 1 based on incident id 129708, correlation level typical

    adrci> ips generate package 1 in /home/oracle/diag

    Generated package 1 in file /home/oracle/diag/ORA4030_20140621184527_COM_1.zip, mode complete

    Additional incremental files:

    /home/oracle/diag/ORA4030_20140621184527_INC_2.zip

    解压缩这两个文件能够看到像alert日志等都打进来了,这里两文件压缩后是17MB左右,但alert日志就有1.7GB。所以压缩效率还非常高。

    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    default关键字用法
    【转载】SpringMvc和servlet简单对比介绍
    build模式入门,build模式理解(转载)
    tomcat logs 目录下各日志文件的含义
    @Component, @Repository, @Service,@Controller的区别
    在项目开发时为什么要先写接口,再写实现类?
    java 中static关键字注意事项
    this关键字使用注意事项
    两个对象之前如何建立联系
    html页面监听事件
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4823659.html
Copyright © 2011-2022 走看看