加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle 日志记录工具类

发布时间:2020-12-12 13:41:35 所属栏目:百科 来源:网络整理
导读:在我们编写存储过程,或者PKG时,总有一些异常情况考虑不到;为了快速排查定位问题,需要及时记录异常日志; ? 1.建表语句 : 异常日志表;正常日志表 create table SSS.TC_EXCEPTION_LOG( log_id NUMBER(20) not null,package_name VARCHAR2(120),proc_name V

在我们编写存储过程,或者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;
/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读