Oracle把所有的主要系统消息都写入Oracle报警日志里。要为所有的Oracle 系统消息创建唯一的一个存放地点,Oracle 专业人士必须学会一种方法来把应用程序的消息写入到报警日志里去。
把所有的Oracle消息集中起来(不管是系统消息还是应用程序消息)确实能够简化数据库的治理,因为所有与Oracle相关的报警消息都存放在一个集中的文件里。
Oracle DBA可以创建一个全局的PL/SQL存储过程来处理与报警日志文件的交互过程,然后他们调用这个全局软件包,将合适的消息传递给这个存储过程。下面是这种调用的一个例子:
when others then
dbms_custom.write_alert
(:p_sysdate' Application error':var1' encountered');
要完成写的过程,你可以使用Oracle的UTL_FILE 包,它答应Oracle SQL 和PL/SQL 直接从服务器的文本文件进行读写。
要向Oracle 报警日志写入自定义的消息,应该遵循下面的步骤:
1. 找到后台转储路径(报警日志的位置)。
2. 设置UTL_FILE_DIR 初始化参数。
3. 执行UTL_FILE.FOPEN打开文件进行写访问。
4. 使用DBMS_OUTPUT.PUT_LINE向报警日志写入自定义的消息。
5. 执行UTL_FILE.FCLOSE来关闭文件。
下面是一个Oracle9i的程序例子:
-- ******************************************************
-- 取得报警日志文件的路径
-- ******************************************************
select
name into :alert_loc
from
v$parameter
where
name = 'background_dump_destination';
-- ******************************************************
--设置utl_file_dir
-- (在Oracle9i 以前,你必须返回数据库)
-- ******************************************************
alter system set utl_file_dir = ':alert_log');
-- ******************************************************
--打开报警文件进行写操作
-- ******************************************************
utl_file.fopen(':alert_loc','alertprod.log','W');
-- ******************************************************
--将自定义的消息写入报警日志文件里
-- ******************************************************
dbms_output.put_line('invalid_application_error');
-- ******************************************************
--关闭报警日志文件
-- ******************************************************
utl_file.fclose(':alert_loc');