Oracle ETL日志审计存储过程示例

Posted ShenLiang2025

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle ETL日志审计存储过程示例相关的知识,希望对你有一定的参考价值。

Oracle ETL日志审计存储过程示例

需求概述

在ETL中,为了方便跟踪每个步骤的执行情况,需要建立日志审计表来跟踪以便后期的跟踪与问题问题。本文就通过一个存储过程来实现对存储过程执行异常的跟踪(审计)。

代码实现 

-- 1 存储过程ETL_TRACE跟踪存储过程执行情况
/*
功能:用于记录存储过程运行的日志
参数说明:
	ownername	存储过程的用户名
	procname	存储过程名
	stepname 	步骤名
	errcode	错误码
	errtext	错误内容
*/
CREATE OR REPLACE PROCEDURE ETL_TRACE
(ownername in varchar2,
procname in varchar2,
stepname in varchar2,
errcode in number,
errtext in varchar2) AS
begin
    --如果没有异常发生,将ownername,procname,stepname参数写入到日志表
    if (errcode = 0 or errtext is null)
    then
        -- 没有错误号, 直接设为 NULL
        insert into ETL_LOGINFO( owner,  procname,  step,time, errorcode,  errortext )
			values (ownername,procname,stepname, sysdate,  '', '' );
    else
        insert into ETL_LOGINFO ( owner,  procedure_name,  step,time, errorcode,  errortext  )
		values (ownername,procname,stepname, sysdate,  errcode, errtext );
    end if;
    commit;
exception
    when others then
        rollback;
end;

-- 2 存储过程ETL_TRACE对应的表结构

create table ETL_LOGINFO
(
  owner          VARCHAR2(50),
  procname VARCHAR2(100),
  step           VARCHAR2(30),
  time           DATE,
  errorcode      VARCHAR2(100),
  errortext      VARCHAR2(4000)
);
comment on column ETL_LOGINFO.owner
  is '存储过程调用用户名';
comment on column ETL_LOGINFO.procname
  is '存储过程名';
comment on column ETL_LOGINFO.step
  is '步骤标记';
comment on column ETL_LOGINFO.time
  is '调用时间';
comment on column ETL_LOGINFO.errorcode
  is '错误代码';
comment on column ETL_LOGINFO.errortext
  is '错误说明';

-- 3 其它存储过程与日志审计过程ETL_TRACE结合使用伪代码
CREATE OR REPLACE PROCEDURE P_PROCDEMO(INDATE    IN VARCHAR2) IS
	  ERRCODE NUMBER DEFAULT 0;
	  ERRTEXT VARCHAR2(300) DEFAULT NULL;
	  OWNERNAME VARCHAR2(40) DEFAULT NULL; 
	  PROCNAME VARCHAR2(40) DEFAULT NULL; 
	  STEP  VARCHAR2(6);
	  EXCE EXCEPTION;
BEGIN
  SELECT T.USERNAME INTO OWNERNAME FROM USER_USERS T;
  PROCNAME := 'P_PROCDEMO';
  -- 日志记录
  ETL_TRACE(OWNERNAME, PROCNAME, 'BEGIN', ERRCODE, ERRTEXT);

  -- 按日期清理数据 
  DELETE FROM LOGICTAB WHERE sjrq = INDATE;
  COMMIT;
  --写入数据到目标表
  STEP := '00001';
  --业务逻辑(伪代码)
  INSERT INTO LOGICTAB SELECT XX FROM TBL ... 
  COMMIT;
  ETL_TRACE(OWNERNAME, PROCNAME, 'END', ERRCODE, ERRTEXT);
  STEP := '00002';

-- 异常时记录错误到
EXCEPTION
  WHEN OTHERS THEN
    ERRCODE := SQLCODE; --设置异常代码
    ERRTEXT := SUBSTR('第'||STEP || '步错误见:' || SQLERRM, 1, 250); --拼接出异常描述,方便根据存储过程步骤诊断问题。
    ROLLBACK; 
	
    ETL_TRACE(OWNERNAME,PROCNAME,'ERROR',ERRCODE,ERRTEXT);
END;

以上是关于Oracle ETL日志审计存储过程示例的主要内容,如果未能解决你的问题,请参考以下文章

oracle audit,如何审计ORACLE日志

oracle存储过程代码日志记录

Oracle 存储过程日志文件

oracle 审计功能怎么配置

oracle 审计包括哪几种,都是啥

oracle数据库的审计功能