[Oracle] 用外部表与DBMS_SYSTEM有效控制Oracle的Alert.log(Tip)

作者:Fenng
日期:02-Nov-2004 
出处:http://www.dbanotes.net
版本:0.01


利用Oracle 9i开始提供的外部表技术可以有效地监控alert日志。而DBMS_SYSTEM的KSDWRT过程可以定制对日志的写入内容, 二者结合使用,在一些特定环境下比较有用。

我们先创建关于Oracle告警日志的外部表:

SQL>CREATE DIRECTORY alertlog AS '/u01/app/oracle/admin/Tulip/bdump';

SQL> CREATE TABLE alert_tab ( text VARCHAR2(80) )
  2  ORGANIZATION EXTERNAL (
  3  TYPE oracle_loader
  4  DEFAULT DIRECTORY alertlog
  5      ACCESS PARAMETERS (
  6          RECORDS DELIMITED BY NEWLINE
  7      )
  8  LOCATION('alert_Tulip.log')
  9  )
 10  REJECT LIMIT 9999;

Table created.
SQL>
SQL> SELECT *
  2    FROM alert_tab
  3   WHERE text LIKE '%ORA-%'
  4  /

TEXT
--------------------------------------------------------------------------------
ORA-00600: internal error code

SQL> 
然后我们看一下dbms_system 的一些功能:

SQL> DESC dbms_system
......
......

PROCEDURE KSDWRT
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 DEST                           BINARY_INTEGER          IN
 TST                            VARCHAR2                IN
......
......
在这里省略了一些和本例无关的信息.KSDWRT的两个参数说明:
参数说明
dest 1:写入跟踪文件;
2:写入alert日志中;
3:写入跟踪文件和alert日志中
tst文本信息.最大长度未知.在Oracle的一些版本上这里存在着内存溢出的漏洞,用的时候要慎重
我们可以在一些特定需求下向alert写入定制的信息:
SQL> EXEC dbms_system.ksdwrt(2,'ORA-myAPP: ETL Done !');

PL/SQL procedure successfully completed.
现在,我们向alert_Tulip.log (Tulip 是我的数据库实例名字)写入了一条信息,表示我们的ETL过程已经完成。 可以在以后的时间查看:
SQL> SELECT *
  2    FROM alert_tab
  3   WHERE text LIKE '%ORA-%';

TEXT
--------------------------------------------------------------------------------
ORA-00600: internal error code
ORA-myAPP: ETL Done !

SQL> 

通过以上的内容,我们演示了一种更为灵活控制alert日志的可能方法。但是要注意的是在Oracle的一些版本上Buffer overflow 的漏洞,也即DBMS_SYSTEM.KSDWRT的TST参数可被恶意利用,造成缓冲区溢出。Oracle 9.2.0.5 修复了这个问题,10g 不受影响。

参考信息


关于dbms_system的更多信息:

dbms_system参考 - http://www.psoug.org/reference/dbms_system.html


本文作者

Fenng,某美资公司DBA,业余时间混迹于各数据库相关的技术论坛且乐此不疲。 目前关注如何利用ORACLE数据库有效地构建企业应用。对Oracle tuning、troubleshooting有一点研究。
个人技术站点:http://www.dbanotes.net/ 。 可以通过电子邮件 [email protected] 联系到他。

原文出处

http://www.dbanotes.net/Oracle/Alert_Table.htm

回上页<-|->回首页

All Articles (by Fenng) are licensed under a Creative Commons License.
I would welcome any feedback. Please send questions, comments or corrections to [email protected]
Valid XHTML 4.01 / Valid CSS