利用外部表读取告警日志文件

数据库的告警日志以文本的格式保存到文件系统中,虽然可以很方便的通过操作系统命令进行查看,而且11g中Oracle甚至还提供了专门的adrci工具,但是对于只能通过SQLPLUS或者其他查询工具连接到数据库的人而言,还是非常不方便。
不过其实这个问题可以很容易的通过外部表的方式解决。最简单的办法就是将alert文件中的每一行记录都当做表中一个VARCHAR2(4000)类型列的一行记录,这样就可以轻松的通过SQL的方式来访问告警日志了。
在创建外部表之前,需要创建一个DIRECTORY,这个目录的位置就是background_dump_dest初始化参数指定的位置。

SQL> SHOW parameter background_dump_dest
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
background_dump_dest                 string      D:\ORACLE\PRODUCT\ADMIN\YTK102\BDUMP
SQL> CREATE directory d_alert AS 'D:\ORACLE\PRODUCT\ADMIN\YTK102\BDUMP';

目录已创建。
一旦目录创建成功后,就可以创建外部表了:

SQL> CREATE TABLE t_alert
  2  (text varchar2(1000)
  3  )
  4  organization external
  5  (TYPE oracle_loader
  6  DEFAULT directory d_alert
  7  access parameters
  8  (records delimited BY newline
  9  FIELDS (text (1:255) CHAR))
 10  location ('alert_ytk102.log'));
表已创建。
SQL> SELECT * FROM t_alert WHERE rownum < 10;
TEXT
-----------------------------------------------------------------------------
Dump file d:\oracle\product\admin\ytk102\bdump\alert_ytk102.log
Sat DEC 25 15:55:43  2010
ORACLE V10.2.0.5.0 - Production vsnsta=0
vsnsql=14 vsnxtr=3
Windows NT Version V6.1
CPU                 : 4 - TYPE 586, 2 Physical Cores
Process Affinity    : 0x00000000
Memory (Avail/Total): Ph:1594M/2995M, Ph+PgF:4318M/5989M, VA:1911M/2047M
Sat DEC 25 15:55:43  2010
已选择9行。

现在已经可以正常访问告警日志了,为了确认外部表的加载没有错误,可以检查D_ALERT目录下的加载日志:

D:\>cd D:\oracle\product\admin\ytk102\bdump
D:\oracle\product\admin\ytk102\bdump>more T_ALERT_21436_532.log
 日志文件打开于 08/25/11 00:15:54
表 T_ALERT 的字段定义
  记录格式 DELIMITED BY NEWLINE
  文件中的数据与该平台的 endianness 格式相同
  接受带有空字段的行
  数据源中的字段:
    TEXT                            CHAR (255)
      记录位置 (1, 255)SQL 加载程序一样修剪空白
This entry was posted in ORACLE and tagged , , . Bookmark the permalink.

3 Responses to 利用外部表读取告警日志文件

  1. Pingback: ROWNUM固化外部表结果集存在问题 | yangtingkun

  2. Pingback: ROWNUM固化外部表结果集存在问题(二) | yangtingkun

Leave a Reply

Your email address will not be published. Required fields are marked *