Oracle9i新特性之数据库监控系列详解

文章作者 100test 发表时间 2007:03:14 14:02:40
来源 100Test.Com百考试题网


以下两个过程呢,其实是辅助过程,一个是完成写日志,一个是完成发邮件,在以后的程序中,可能会经常用到。

1、写日志过程

  

  name:sp_Write_log

  parameter:textContext in varchar2 日志内容

  create date:2003-06-01

  creater:chen jiping

  desc: &.#8226.写日志,把内容记到服务器指定目录下

  &.#8226.必须配置Utl_file_dir初始化参数,

    并保证日志路径与Utl_file_dir路径一致或者是其中一个

  

  create or replace PROCEDURE sp_Write_log(textContext VARCHAR2)

  IS

  file_handle   UTL_FILE.file_type.

  Write_content  VARCHAR2(1024).

  Write_file_name VARCHAR2(50).

  BEGIN

  --打开文件

  --Write_file_name := rtrim(to_char(SYSDATE,YYYY-MM-DD))||.log.

  Write_file_name := db108_alert.log.

  file_handle   := UTL_FILE.FOPEN(/u01/product/admin/ora81/logs,Write_file_name,a).

  Write_content  := to_char(SYSDATE,yyyy-mm-dd hh24:mi:ss)||||||textContext.

  --写文件

  IF UTL_FILE.IS_OPEN(file_handle) THEN

  UTL_FILE.PUT_LINE(file_handle,Write_content).

  END IF.

  --关闭文件

  UTL_FILE.Fclose(file_handle).

  EXCEPTION

  WHEN OTHERS THEN

  IF UTL_FILE.IS_OPEN(file_handle) THEN

  UTL_FILE.Fclose(file_handle).

  END IF.

  END sp_Write_log.
  

2、发送Email的过程

  

  name:sp_Send_mail

  parameter: Rcpter in varchar2 接收者邮箱

  Mail_Content in Varchar2 邮件内容

  create date:2003-06-01

  creater:chen jiping

  desc: &.#8226.发送邮件到指定邮箱

  &.#8226.只能指定一个邮箱,如果需要发送到多个邮箱,需要另外的辅助程序

  

  create or replace procedure sp_send_mail(

  Rcpter IN VARCHAR2,

  Mail_Content IN VARCHAR2)

  IS

  conn utl_smtp.connection.

  PROCEDURE send_header(NAME IN VARCHAR2, header IN VARCHAR2) AS

  BEGIN

  utl_smtp.write_data(conn, NAME || :  || header || utl_tcp.CRLF).

  END.

  

  BEGIN

  conn := utl_smtp.open_connection(smtp.ur.net.cn).

  utl_smtp.helo(conn, oracle).

  utl_smtp.mail(conn, oracle info).

  utl_smtp.rcpt(conn, Rcpter).

  utl_smtp.open_data(conn).

  send_header(From,  Oracle Database).

  send_header(To,   "Recipient" <||Rcpter||>).

  send_header(Subject, Hello).

  utl_smtp.write_data(conn, utl_tcp.CRLF || Mail_Content).

  utl_smtp.close_data(conn).

  utl_smtp.quit(conn).

  EXCEPTION

  WHEN utl_smtp.transient_error OR utl_smtp.permanent_error THEN

  BEGIN

  utl_smtp.quit(conn).

  EXCEPTION

  WHEN utl_smtp.transient_error OR utl_smtp.permanent_error THEN

  NULL. -- When the SMTP server is down or unavailable, we dont have

  -- a connection to the server. The quit call will raise an

  -- exception that we can ignore.

  END.

  raise_application_error(-20000,

  Failed to send mail due to the following error:  || SQLERRM).

  END sp_send_mail.


相关文章


跟踪Oracle9i的CPU和I_O使用代价
在Oracle_2000中调用WindowsAPI函数
将RAC数据库更改为不归档日志的模式
开发基于Oracle数据库的管理信息系统
Oracle9i新特性之数据库监控系列详解
诊断Oracle数据库Hanging问题
管理OracleOLAP时清除通往OLAP的障碍
Oracle碎片整理全面解析
Oracle巧取指定记录与巧用外关联查询
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛