数据库的告警日志以文本的格式保存到文件系统中,虽然可以很方便的通过操作系统命令进行查看,而且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:ORACLEPRODUCTADMINYTK102BDUMP
SQL> create directory d_alert as 'D:ORACLEPRODUCTADMINYTK102BDUMP';
目录已创建。
一旦目录创建成功后,就可以创建外部表了:
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:oracleproductadminytk102bdumpalert_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:oracleproductadminytk102bdump
D:oracleproductadminytk102bdump>more T_ALERT_21436_532.log
日志文件打开于 08/25/11 00:15:54
表 T_ALERT 的字段定义
记录格式 DELIMITED BY NEWLINE
文件中的数据与该平台的 endianness 格式相同
接受带有空字段的行
数据源中的字段:
TEXT CHAR (255)
记录位置 (1, 255)
像 SQL 加载程序一样修剪空白