数据库的告警日志以文本的格式保存到文件系统中,虽然可以很方便的通过操作系统命令进行查看,而且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 加载程序一样修剪空白 |
Pingback: ROWNUM固化外部表结果集存在问题 | yangtingkun
Pingback: ROWNUM固化外部表结果集存在问题(二) | yangtingkun