告警日志介绍

告警日志文件是一类特殊的跟踪文件(trace file)。告警日志文件命名一般为alert_<SID>.log,其中SID为ORACLE数据库实例名称。数据库告警日志是按时间顺序记录message和错误信息。

 

告警日志位置

在ORACLE 10g中,BACKGROUND_DUMP_DEST参数确定了告警日志的位置,但是告警日志的文件名无法修改,告警日志的名称为:alert_<SID>.log ,其中<SID>是实例的名称。BACKGROUND_DUMP_DEST参数是动态的。

SQL> show parameter background_dump_dest;

 

NAME                       TYPE        VALUE

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

background_dump_dest   string      /u01/app/oracle/admin/GSP/bdump

SQL> 

告警日志以及所有后台跟踪文件都会被写至BACKGROUND_DUMP_DEST参数所指定的目录。

在ORACLE 11g 以及ORACLE 12c中,告警日志文件的位置有了变化。主要是因为引入了ADR(Automatic Diagnostic Repository:一个存放数据库诊断日志、跟踪文件的目录),关于ADR对应的目录位置可以通过查看v$diag_info系统视图。如下所示(ORACLE 12c )

SQL> 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/ignite/epps                   0

      1 Diag Trace           /u01/app/oracle/diag/rdbms/ignite/epps/trace             0

      1 Diag Alert           /u01/app/oracle/diag/rdbms/ignite/epps/alert             0

      1 Diag Incident        /u01/app/oracle/diag/rdbms/ignite/epps/incident          0

      1 Diag Cdump           /u01/app/oracle/diag/rdbms/ignite/epps/cdump             0

      1 Health Monitor       /u01/app/oracle/diag/rdbms/ignite/epps/hm                0

      1 Default Trace File   /u01/app/oracle/diag/rdbms/ignite/epps/trace/epps_       0

                             ora_13810.trc

 

      1 Active Problem Count 0                                                        0

      1 Active Incident Coun 0                                                        0

        t

 

 

11 rows selected.

如上所示,Diag Trace对应的目录为文本格式的告警日志文件所在的目录,而Diag Alert对应的目录为XML格式的警告日志(对应为log_x.xml)

[oracle@gettestlnx01 trace]$ pwd

/u01/app/oracle/diag/rdbms/ignite/epps/trace

[oracle@gettestlnx01 trace]$ ls alert_epps.log 

alert_epps.log

[oracle@gettestlnx01 trace]$ cd ../alert/

[oracle@gettestlnx01 alert]$ pwd

/u01/app/oracle/diag/rdbms/ignite/epps/alert

[oracle@gettestlnx01 alert]$ ls

log_1.xml  log_2.xml  log_3.xml  log_4.xml  log_5.xml  log_6.xml  log_7.xml  log_8.xml  log_9.xml  log.xml

 

告警日志内容:

那么告警日志非常关键与重要,那么告警日志里面包含了那些内容信息呢?告警日志包含了下面一些内容的信息。像一些ORA错误,对于监控数据库有极其重要的作用。

1:所有的内部错误(ORA-600)信息,块损坏错误(ORA-1578)信息,以及死锁错误(ORA-60)信息等。

2:管理操作,例如CREATE、ALTER、DROP语句等,以及数据库启动、关闭以及日志归档的一些信息。

2.1 涉及物理结构的所有操作:例如创建、删除、重命名数据文件与联机重做日志文件的ALTER DATABASE命令,此外还涉及重新分配数据文件大小以及将数据文件联机与脱机的操作。

2.2 表空间操作,例如DROP与CREATE命令,此外还包括为了进行用户管理的备份而将表空间置入和取出热备份模式的操作

3:与共享服务器或调度进程相关功能的消息和错误信息。

4:物化视图的自动刷新过程中出现的错误。

5:动态参数的修改信息。

告警日志监控:

既然告警日志如此重要,而我们也不可能随时手工去查看告警日志文件,那么我们就必须监控告警日志,那么监控告警日志有哪些方案呢?下面归纳一下

方案1:Tom大师给出的一个方案(仅适用于ORACLE 10g),将告警日志文件信息读入全局临时表,然后我们就可以定制一些SQL语句查询告警日志的信息。

create global temporary table alert_log

( line   int primary key,

 

  text   varchar2(4000)

)

on commit preserve rows

/

 

 

 

 

 

create or replace procedure load_alert

as

 

    l_background_dump_dest   v$parameter.value%type;

 

    l_filename               varchar2(255);

 

    l_bfile                  bfile;

 

    l_last                   number;

 

    l_current                number;

 

    l_start                  number := dbms_utility.get_time;

begin

 

    select a.value, 'alert_' || b.instance || '.log'

 

      into l_background_dump_dest, l_filename

 

      from v$parameter a, v$thread b

 

     where a.name = 'background_dump_dest';

 

 

 

    execute immediate

 

    'create or replace directory x$alert_log$x as

 

    ''' || l_background_dump_dest || '''';

 

 

 

 

    dbms_output.put_line( l_background_dump_dest );

 

    dbms_output.put_line( l_filename );

 

 

 

    delete from alert_log;

 

 

 

 

    l_bfile := bfilename( 'X$ALERT_LOG$X', l_filename );

 

    dbms_lob.fileopen( l_bfile );

 

 

 

    l_last := 1;

 

    for l_line in 1 .. 50000

 

    loop

 

 

 

        dbms_application_info.set_client_info( l_line || ', ' ||

 

        to_char(round((dbms_utility.get_time-l_start)/100, 2 ) ) 

 

        || ', '||

 

        to_char((dbms_utility.get_time-l_start)/l_line)

 

        );

 

        l_current := dbms_lob.instr( l_bfile, '0A', l_last, 1 );

 

        exit when (nvl(l_current,0) = 0);

 

 

 

        insert into alert_log

 

        ( line, text )

 

        values

 

        ( l_line, 

 

          utl_raw.cast_to_varchar2( 

 

              dbms_lob.substr( l_bfile, l_current-l_last+1, 

 

                                                    l_last ) )

 

        );

 

        l_last := l_current+1;

 

    end loop;

 

 

 

    dbms_lob.fileclose(l_bfile);

 

end;

/

但是这又一个问题,如果数据库宕机了的情况下,是无法获取这些错误信息,比方案3(从操作系统监控告警日志)对比,有些特定场景不适用。另外有一定不足之处,就是日志文件比较大的时候,监控告警日志信息比较频繁的时候,会产生不必要的IO操作。

方案2:通过外部表来查看告警日志文件的内容。相当的方便。然后也是使用定制SQL语句来查询错误信息。

SQL> create or replace directory bdump as '/u01/app/oracle/admin/GSP/bdump';

 

Directory created.

 

SQL> create table alert_logs

  2  (

  3     text  varchar2(2000)

  4  )

  5  organization external

  6  (

  7      type oracle_loader

  8      default directory bdump

  9      access parameters

 10    (

 11       records delimited by newline

 12       fields

 13       reject rows with all null fields

 14     )

 15    location

 16   (

 17             'alert_GSP.log'

 18   )

 19  )

 20  reject limit unlimited;

 

Table created.

 

SQL> select * from alert_logs;

 

TEXT

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

Thu Aug  7 14:50:28 2014

Thread 1 advanced to log sequence 14

  Current log# 1 seq# 14 mem# 0: /u01/app/oracle/oradata/GSP/redo01.log

 

SQL> 

方案3:我以前一篇博客归档—监控ORACLE数据库告警日志里面介绍了如何对告警日志进行归档、监控。这些脚本也确实很有效的替我监控着数据库的运行。

告警日志归档

告警日志如果不及时归档,时间长了,告警日志文件会变得非常大,查看、读取告警日志会引起额外的IO开销。所以一般应该按天归档告警日志文件,保留一段时间(例如 90天),超过规定时间的删除。

告警日志是否可以删除呢? 以前有位同事说background_dump_dest目录下的跟踪文件除了告警日志外都能删除,如果删除告警日志文件有可能会产生意想不到的错误,我半信半疑,在测试服务器删除告警日志,验证后发现没有什么影响,系统会重新生成告警日志文件(时间上不会立即生成告警日志文件,而是当进程向告警日志写入记录时就会生成新的告警日志文件)。

参考资料:

https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1352202934074

ORACLE告警日志文件的更多相关文章

  1. Linux/Unix shell 监控Oracle告警日志(monitor alter log file)

    使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linu ...

  2. ORACLE告警日志

    告警日志介绍 告警日志文件是一类特殊的跟踪文件(trace file).告警日志文件命名一般为alert_<SID>.log,其中SID为ORACLE数据库实例名称.数据库告警日志是按时间 ...

  3. Oracle 监听器日志文件过大导致监听异常

    Oracle 监听器日志文件过大导致监听异常 db版本:11.2.0.1 os版本:windows2008 现象: 应用异常,无法连接数据库.登陆数据库服务器,查看监听已经断掉.尝试重启监听,重启失败 ...

  4. oracle删除日志文件

    oracle删除日志文件 删除日志文件的语法例如以下: alter database drop logfile member logfile_name; 删除日志文件须要注意例如以下几点: 1.该日志 ...

  5. Oracle重做日志文件

    一.联机重做日志的规划管理 1.联机重做日志 记录了数据的所有变化(DML,DDL或管理员对数据所作的结构性更改等) 提供恢复机制(对于意外删除或宕机利用日志文件实现数据恢复) 可以被分组管理  11 ...

  6. Oracle 归档日志文件

      今天数据群有人反应网站不能正常打开,经检查Oracle数据库远程连不上,提示信息:ORA-00257: archiver error. Connect internal only, until f ...

  7. oracle redo日志文件损坏恢复

    参考:How to Recover from Loss Of Online Redo Log And ORA-312 And ORA-313 (Doc ID 117481.1) 在线重做日志文件丢失后 ...

  8. oracle重做日志文件硬盘坏掉解决方法

    rman target/ list backup; list backup summary; 删除数据库数据文件夹下的log日志,例如/u01/app/oracle/oradata/ORCL下的所有后 ...

  9. 初识oracle重做日志文件

    转自 http://blog.csdn.net/indexman/article/details/7746948 以下易容翻译自oracle dba官方文档,不足之处还望指出. 管理重做日志文件 学习 ...

随机推荐

  1. grunt任务之seajs模块打包

    grunt与seajs grunt是前端流行的自定义任务的脚手架工具,我们可以使用grunt来为我们做一些重复度很高的事情,如压缩,合并,js语法检查等.通过定义grunt的配置文件Gruntfile ...

  2. Ajax提交参数的值中带有html标签不能提交成功的解决办法(ASP.NET)

    最近在公司做资源及文章上传功能遇到一个小问题,被坑了好半天. 该功能就类似利用富文本编辑器发布信息,但是用Ajax提交数据,因此提交参数值中不可避免的含有html标签. 在本地运行代码一直没问题,总是 ...

  3. OpenCV2:等间隔采样和局部均值的图像缩小

    图像的缩小从物理意义上来说,就是将图像的每个像素的大小缩小相应的倍数.但是,改变像素的物理尺寸显然不是那么容易的,从数字图像处理的角度来看,图像的缩小实际就是通过减少像素个数来实现的.显而易见的,减少 ...

  4. jQuery-1.9.1源码分析系列(三) Sizzle选择器引擎——词法解析

    jQuery源码9600多行,而Sizzle引擎就独占近2000行,占了1/5.Sizzle引擎.jQuery事件机制.ajax是整个jQuery的核心,也是jQuery技术精华的体现.里面的有些策略 ...

  5. Block知识点总结

    block的作用 block用于保存一段代码 在适当的时候再使用  它是一种数据类型 block的定义格式: 返回值  (^block变量名)(形参列表) = ^(形参列表) { 需要执行的代码}; ...

  6. AssetsManagerEx 组件使用说明

    原因 在网络上找了一圈也没有找到一个像样的说明.如果不是我们技术组的大大说这个东西可以用我都快放弃了. 稍微阅读了一下这个组件的源代码.发现该有的功能都有(如下所列). 其实最初吸引我们用这个东西的功 ...

  7. css3全屏背景图片切换特效

    效果体验:http://hovertree.com/texiao/css3/10/ 一般做图片切换效果,都会使用JS或者jQuery脚本,今天发现,其实只用CSS也可以实现.试试效果吧. 效果图: 代 ...

  8. nodejs 遍历数组的两种方法

    var array = [1,2,3]; array.forEach(function(v,i,a){ console.log(v); console.log(i); console.log(a); ...

  9. C++_系列自学课程_第_8_课_指针和引用_《C++ Primer 第四版》

    C语言最富有迷幻色彩的部分当属指针部分,无论是指针的定义还是指针的意义都可算是C语言中最复杂的内容.指针不但提供给了程序员直接操作硬件部分的操作接口,还提供给了程序员更多灵活的用法.C++继承这一高效 ...

  10. 向空项目添加 ASP.NET Identity

    安装 AspNet.Identity 程序包 Microsoft.AspNet.Identity.Core 包含 ASP.NET Identity 核心接口Microsoft.AspNet.Ident ...