Oracle 日志记录工具类

前端之家收集整理的这篇文章主要介绍了Oracle 日志记录工具类前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在我们编写存储过程,或者PKG时,总有一些异常情况考虑不到;为了快速排查定位问题,需要及时记录异常日志;
 
1.建表语句 : 异常日志表;正常日志表
create table SSS.TC_EXCEPTION_LOG
(
  log_id         NUMBER(20) not null,package_name   VARCHAR2(120),proc_name      VARCHAR2(120),exception_tm   DATE default sysdate,exception_code VARCHAR2(200),exception_desc VARCHAR2(1000),exception_remk VARCHAR2(600),line_no        NUMBER(10)
);
comment on table SSS.TC_EXCEPTION_LOG
  is ‘系统异常日志数据‘;
comment on column SSS.TC_EXCEPTION_LOG.log_id
  is ‘主键‘;
comment on column SSS.TC_EXCEPTION_LOG.package_name
  is ‘包名‘;
comment on column SSS.TC_EXCEPTION_LOG.proc_name
  is ‘过程名‘;
comment on column SSS.TC_EXCEPTION_LOG.exception_tm
  is ‘异常时间‘;
comment on column SSS.TC_EXCEPTION_LOG.exception_code
  is ‘异常编码‘;
comment on column SSS.TC_EXCEPTION_LOG.exception_desc
  is ‘异常描述‘;
comment on column SSS.TC_EXCEPTION_LOG.exception_remk
  is ‘异常说明‘;
comment on column SSS.TC_EXCEPTION_LOG.line_no
  is ‘异常行号‘;
create index SSS.IDX_TC_EXCEPTION_LOG1 on SSS.TC_EXCEPTION_LOG (PROC_NAME);
alter table SSS.TC_EXCEPTION_LOG add constraint IPK_TC_EXCEPTION_LOG primary key (LOG_ID);

create table SSS.TC_EXECUTE_LOG
(
  log_id        NUMBER(20) not null,package_name  VARCHAR2(120),proc_name     VARCHAR2(120),strat_tm      DATE default sysdate not null,end_tm        DATE,spend_tm      NUMBER(10),ref_data_rows NUMBER(10),remk          VARCHAR2(1000)
);

comment on table SSS.TC_EXECUTE_LOG
  is ‘公用执行日志表‘;
comment on column SSS.TC_EXECUTE_LOG.log_id
  is ‘执行日志ID‘;
comment on column SSS.TC_EXECUTE_LOG.package_name
  is ‘包名‘;
comment on column SSS.TC_EXECUTE_LOG.proc_name
  is ‘过程名‘;
comment on column SSS.TC_EXECUTE_LOG.strat_tm
  is ‘执行开始时间‘;
comment on column SSS.TC_EXECUTE_LOG.end_tm
  is ‘执行结束时间‘;
comment on column SSS.TC_EXECUTE_LOG.spend_tm
  is ‘执行花费时间(单位: 0.01秒)‘;
comment on column SSS.TC_EXECUTE_LOG.ref_data_rows
  is ‘执行涉及数据量‘;
comment on column SSS.TC_EXECUTE_LOG.remk
  is ‘注释‘;
create index SSS.INK_TC_EXECUTE_LOG_01 on SSS.TC_EXECUTE_LOG (PACKAGE_NAME,PROC_NAME,REMK);
create index SSS.INK_TC_EXECUTE_LOG_02 on SSS.TC_EXECUTE_LOG (STRAT_TM);
alter table SSS.TC_EXECUTE_LOG add constraint IPK_TC_EXECUTE_LOG primary key (LOG_ID,STRAT_TM);

  

2. 记录异常的PKG

 

 
CREATE OR REPLACE PACKAGE BODY SSS.PKG_SYS_LOG IS

  --*************************************************************
  -- AUTHOR  : KELIVEN LIU
  -- CREATED : 2008-05-20
  -- PURPOSE : 记录系统中存储过程运行日志

  -- PARAMETER:
  -- P_PACKAGE_NAME VARCHAR2      包名
  -- P_PROC_NAME    VARCHAR2,过程名
  -- P_EXCEP_DT     DATE,执行日期
  -- P_EXCEP_CODE   VARCHAR2,异常代码
  -- P_EXCEP_DESC   VARCHAR2,异常描述信息
  -- P_EXCEP_REMK   VARCHAR2,备注,可能的值为‘BEGIN‘,‘END‘,‘ERROR‘
  -- P_LINE_NO      NUMBER  行号

  -- MODIFY HISTORY
  -- PERSON          DATE            COMMENTS
  -- -------------------------------------------------------------
  --*************************************************************

  --*************************************************************
  -- AUTHOR  : KELIVEN LIU
  -- CREATED : 2008-05-20
  -- PURPOSE : 记录系统中存储过程运行日志

  -- PARAMETER:
  -- NAME            TYPE            DESC
  -- P_SEQ_NO       NUMBER       发生异常存储过程中主要sequence的当前值
  -- P_PROC_NAME  VARCHAR2        存储过程名
  -- P_EXCEP_DT     DATE         时间,包括开始时间,结束时间,异常发生时间
  -- P_EXCEP_CODE   VARCHAR2      异常代码
  -- P_EXCEP_DESC   VARCHAR2      异常描述信息
  -- P_EXCEP_REMK   VARCHAR2      备注,可能的值为‘BEGIN‘,‘ERROR‘
  -- P_LINE_NO      NUMBER        行号

  -- P_PACKAGE_NAME       VARCHAR2,包名
  -- P_PROC_NAME          VARCHAR2,过程名
  -- P_EXEC_START_TM      DATE,执行开始时间
  -- P_EXEC_END_TM        DATE,执行结束时间
  -- P_EXEC_PEND_TM       NUMBER,执行花费时间
  -- P_EXEC_REF_DATA_ROWS NUMBER,涉及数据量
  -- P_EXEC_REMK          VARCHAR2    备注,可能的值为‘BEGIN‘,‘ERROR‘

  -- MODIFY HISTORY
  -- PERSON          DATE            COMMENTS
  -- -------------------------------------------------------------
  --*************************************************************
  PROCEDURE ERROR_LOG(P_PACKAGE_NAME VARCHAR2,P_PROC_NAME    VARCHAR2,P_EXCEP_DT     DATE,P_EXCEP_CODE   VARCHAR2,P_EXCEP_DESC   VARCHAR2,P_EXCEP_REMK   VARCHAR2,P_LINE_NO      NUMBER) AS
    PRAGMA AUTONOMOUS_TRANSACTION;
  BEGIN
    INSERT INTO TC_EXCEPTION_LOG
      (LOG_ID,PACKAGE_NAME,EXCEPTION_TM,EXCEPTION_CODE,EXCEPTION_DESC,EXCEPTION_REMK,LINE_NO)
    VALUES
      (SEQ_LOG.NEXTVAL,SUBSTR(P_PACKAGE_NAME,1,120),SUBSTR(P_PROC_NAME,P_EXCEP_DT,SUBSTR(P_EXCEP_CODE,200),SUBSTR(P_EXCEP_DESC,1000),SUBSTR(P_EXCEP_REMK,600),P_LINE_NO);

    COMMIT;

  EXCEPTION
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(‘STP_RUNNING_LOG‘ || sqlCODE || ‘:‘ || sqlERRM);
      ROLLBACK;
  END ERROR_LOG;

  ---系统执行日志
  PROCEDURE EXECUTE_LOG(P_PACKAGE_NAME       VARCHAR2,P_PROC_NAME          VARCHAR2,P_EXEC_START_TM      DATE,P_EXEC_END_TM        DATE,P_EXEC_PEND_TM       NUMBER,P_EXEC_REF_DATA_ROWS NUMBER,P_EXEC_REMK          VARCHAR2) AS
    PRAGMA AUTONOMOUS_TRANSACTION;
  BEGIN

    INSERT INTO TC_EXECUTE_LOG
      (LOG_ID,STRAT_TM,END_TM,SPEND_TM,REF_DATA_ROWS,REMK)
    VALUES
      (SEQ_LOG.NEXTVAL,P_EXEC_START_TM,P_EXEC_END_TM,P_EXEC_PEND_TM,P_EXEC_REF_DATA_ROWS,SUBSTR(P_EXEC_REMK,1000));
    COMMIT;

  EXCEPTION
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(‘TC_EXECUTE_LOG‘ || sqlCODE || ‘:‘ || sqlERRM);
      ROLLBACK;
  END EXECUTE_LOG;

END PKG_SYS_LOG;
/

猜你在找的Oracle相关文章