Oracle 10g提供UTL_FILE包,提供对服务器上文件的读写功能。它由UTL_FILE_DIR参数控制目录权限,并且必须在参数文件中修改,不能使用alter system。

比如提供对D:\Zeeno目录的读写权限,可以这样设置:

ORCL.UTL_FILE_DIR=D:\Zeeno

或者:

ORCL.UTL_FILE_DIR=*

这表示对所有目录拥有读写权限,适合在测试数据库中使用。这样,我们就可以在不登录服务器的前提下查看Alert,并用自己的SQL做简单的统计和分析,比如统计最近的alter database记录。

首先建立一存放日志数据的表:

SQL> create table zeeno_alertlog(t varchar2(1000));

Table created.

读取日志:

declare
fh utl_file.file_type;
buffer varchar2(2000);
begin
fh := utl_file.fopen('C:\oracle\product\10.2.0\admin\orcl\bdump','alert_orcl.log','r');
loop
utl_file.get_line(fh,buffer);
dbms_output.put_line(buffer);
insert into zeeno_alertlog values(buffer);
commit;
end loop;
exception
when NO_DATA_FOUND
then
utl_file.fclose(fh);
end;
/
SQL> select * from zeeno_alertlog where t like 'Completed: alter%';

T
------------------------------------------------------------------
Completed: alter database "orcl" open resetlogs
Completed: alter database rename global_name to "orcl"
Completed: alter database character set INTERNAL_CONVERT ZHS16GBK
Completed: alter database archivelog
Completed: alter database open
Completed: alter database recover datafile list clear
Completed: alter database recover datafile list
Completed: alter database recover if needed
Completed: alter database flashback on
...

15 rows selected.

SQL> select * from zeeno_alertlog where regexp_instr(t,'ARC.*shutdown.*')=1;

T
---------------------------------------------------------------------
ARCH: Archival disabled due to shutdown: 1089
ARCH: Archival disabled due to shutdown: 1089
ARCH: Archival disabled due to shutdown: 1089
ARCH: Archival disabled due to shutdown: 1089
ARCH: Archival disabled due to shutdown: 1089
ARCH: Archival disabled due to shutdown: 1089
...

24 rows selected.

如果数据库服务器上启动了dbconsole(我是很少用的),可以在EM中直接查看最新的预警日志条目。

一个有趣的应用是:根据启动和关闭数据库的时间来统计在线时间 :)