• 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','END','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','END','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,
           PROC_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, 1, 120),
           P_EXCEP_DT,
           SUBSTR(P_EXCEP_CODE, 1, 200),
           SUBSTR(P_EXCEP_DESC, 1, 1000),
           SUBSTR(P_EXCEP_REMK, 1, 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,
           PACKAGE_NAME,
           PROC_NAME,
           STRAT_TM,
           END_TM,
           SPEND_TM,
           REF_DATA_ROWS,
           REMK)
        VALUES
          (SEQ_LOG.NEXTVAL,
           SUBSTR(P_PACKAGE_NAME, 1, 120),
           SUBSTR(P_PROC_NAME, 1, 120),
           P_EXEC_START_TM,
           P_EXEC_END_TM,
           P_EXEC_PEND_TM,
           P_EXEC_REF_DATA_ROWS,
           SUBSTR(P_EXEC_REMK, 1, 1000));
        COMMIT;
    
      EXCEPTION
        WHEN OTHERS THEN
          DBMS_OUTPUT.PUT_LINE('TC_EXECUTE_LOG' || SQLCODE || ':' || SQLERRM);
          ROLLBACK;
      END EXECUTE_LOG;
    
    END PKG_SYS_LOG;
    /
    

      

  • 相关阅读:
    使用气泡图分析产品价格变动带来的影响
    如果数据太“ 脏 ”,你知道如何处理吗?
    Power BI文件夹管理,99%的人都不知道的技巧
    如果数据太“ 脏 ”,你知道如何处理吗?
    Power BI文件夹管理,99%的人都不知道的技巧
    微软Power BI 每月功能更新系列——Power BI 3月版本功能更新新鲜出炉
    textarea右下角黑点
    CSS布局-body高度不等于页面高度
    PS切图采坑
    诡异的bug!!
  • 原文地址:https://www.cnblogs.com/fubinhnust/p/9928207.html
Copyright © 2020-2023  润新知