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日志审计存储过程示例的主要内容,如果未能解决你的问题,请参考以下文章