Heim  >  Artikel  >  Datenbank  >  Oracle监控系统错误日志过程

Oracle监控系统错误日志过程

WBOY
WBOYOriginal
2016-06-07 15:54:59947Durchsuche

--创建临时表用来存放系统错误信息create table superflow(cust_id number(10),cust_name varchar2(100),d varchar(50),error_in

--创建临时表用来存放系统错误信息
create table superflow(cust_id number(10),cust_name varchar2(100),d varchar(50),error_info varchar2(500),client_ip varchar2(50),protocol varchar2(100),t number(20),sj date) tablespace db_data;
   
 --drop table superflow
 
--创建数据写入路径 
create directory db_dir as '/home/Oracle';

--把目录授权给用户
grant read,write on directory db_dir to db;

监控系统错误日志 
过程完成任务有
 把抽取出来错误日志插入到superflow
错误日志会写入操作系统/home/oracle/sql.txt文件下面
create or replace procedure pro_superflow as

 pro_name  VARCHAR2(50);
 err_info  VARCHAR2(1000);
 v_Sql    VARCHAR2(1000);
 sj        VARCHAR2(20);
 JL        NUMBER(10);
  --cursor record_t_sms_customer_errlog is select c.cust_id "客户ID",cu.cust_name "客户名称",c.d "状态",c.error_info "错误信息",c.client_ip "客户IP",c.protocol "协议",c.t "记录数" from (select CUST_ID,case ACTION when '1' then '登入' else '下行' end d,ERROR_INFO,CLIENT_IP,PROTOCOL,COUNT(ERRLOG_ID) t from t_sms_customer_errlog where create_time > sysdate - interval '1' hour and err_code=8 group by cust_id, action, ERROR_INFO,client_ip, protocol) c,t_sms_customer cu where c.cust_id=cu.cust_id and t>5;
   
  cursor record_t_sms_customer_errlog is select c.cust_id "客户ID",cu.cust_name "客户名称",c.d "状态",c.error_info "错误信息",c.client_ip "客户IP",c.protocol "协议",c.t "记录数" from (select CUST_ID,case ACTION when '1' then '登入' else '下行' end d,ERROR_INFO,CLIENT_IP,PROTOCOL,COUNT(ERRLOG_ID) t from t_sms_customer_errlog where err_code=8  group by cust_id, action, ERROR_INFO,client_ip, protocol) c,t_sms_customer cu where c.cust_id=cu.cust_id;
   
 --all_record t_sms_customer_errlog%rowtype;
  type table_type is record( cust_id_1 number(10),cust_name_1 varchar2(100),d varchar2(20),error_info_1 varchar2(1000),client_ip_1 varchar2(50),protocol_1 varchar2(1000),t_1 number(10));
 
  all_record table_type;
 
 
  vsfile  UTL_FILE.file_type;
 begin
  SELECT COUNT(1)INTO JL FROM superflow;
  IF JL >10000 THEN
   
    delete FROM SUPERFLOW where sj    
    END IF;
    vsfile :=                   
        UTL_FILE.fopen ('DB_DIR',  --->使用fopen打开文件,定义了文件路径,文件名,读写方式以及每一行字符的最大长度,缺省为1024
                        'sql.txt',
                        'W');
  for all_record in record_t_sms_customer_errlog
      loop
   
    insert into superflow values(all_record.客户id,all_record.客户名称,all_record.状态,all_record.错误信息,all_record.客户ip,all_record.协议,all_record.记录数,sysdate);
    commit;
      UTL_FILE.put_line (vsfile, all_record.客户id);
      UTL_FILE.put_line (vsfile, all_record.客户名称);
      UTL_FILE.put_line (vsfile, all_record.状态);
      UTL_FILE.put_line (vsfile, all_record.错误信息);
      UTL_FILE.put_line (vsfile, all_record.客户ip);
      --UTL_FILE.put_line (vsfile, all_record.协议)
      UTL_FILE.put_line (vsfile, all_record.记录数);
      UTL_FILE.put_line (vsfile, sysdate);
      -- 把输入内容写入文件
    end loop;
    UTL_FILE.fflush (vsfile);
    UTL_FILE.fclose (vsfile);
    exception
  when others then
    --sg_log_err('manage_partition',sqlerrm);
    pro_name :='manage_partition';
    err_info :=sqlerrm;
    select sysdate into sj from dual;
    v_Sql := 'insert into err_log values('||'''PRO_SUPERFLOW'''||','''||err_info||''','''||sj||''')';
    execute immediate v_Sql;
    commit;
   
    dbms_output.put_line(sqlcode||sqlerrm);
    end pro_superflow;

把错误日志以邮件形式发出去
echo '监控日志'|mail -s '系统日志' [email protected] /oracle/sql.txt

本文永久更新链接地址

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn