oracle plsql的逐步进度日志记录
我有一个带有ID、严重性级别、消息、日志日期和时间的消息日志表 我使用下面的过程在PL/SQL脚本中将日志消息插入到日志表中oracle plsql的逐步进度日志记录,oracle,logging,plsql,Oracle,Logging,Plsql,我有一个带有ID、严重性级别、消息、日志日期和时间的消息日志表 我使用下面的过程在PL/SQL脚本中将日志消息插入到日志表中 add_log(ID,'START','DEBUG','No CDR Detail to be processed', sysdate); 但如果出现故障,我会看到一些信息没有被记录下来。记录plsql进度的一步一步的最好方法是什么(如果需要,直到失败点) “如果出现故障,我看不到有消息被记录。记录plsql进度的逐步进度的最佳方法是什么(如果需要,直到故障点)
add_log(ID,'START','DEBUG','No CDR Detail to be processed', sysdate);
但如果出现故障,我会看到一些信息没有被记录下来。记录plsql进度的一步一步的最好方法是什么(如果需要,直到失败点)
“如果出现故障,我看不到有消息被记录。记录plsql进度的逐步进度的最佳方法是什么(如果需要,直到故障点)。”
您的ADD_LOG()过程不包括提交
——您可能依赖更广泛的事务来持久化日志记录。问题是,如果更广泛的事务失败,它将回滚并带走您的日志消息
这是自治事务pragma为数不多的合法用途之一。这将创建一个独立的事务(实际上是一个嵌套的会话),因此我们可以在不影响外部事务的情况下进行提交
create or replace procedure add_log (stp varchar2, code varchar2, log_message varchar2, logdat date)
is
PRAGMA AUTONOMOUS_TRANSACTION;
begin
insert into message_log
(SEQ,PROC_STEP,
CODE,
LOG_MESSAGE,
LOG_DATE
)
values
(log_SEQ.NEXTVAL,stp,code,log_message,logdat)
;
COMMIT;
end;
如果您将此更改为ADD_LOG(),则无论调用事务发生什么情况,您的所有消息都将被提交。在PLSQL脚本中使用适当的
异常处理
,并利用它将消息插入日志。您是在add\u log
过程中提交事务,还是在PL/SQL块中调用add\u log之后提交事务?
create or replace procedure add_log (stp varchar2, code varchar2, log_message varchar2, logdat date)
is
PRAGMA AUTONOMOUS_TRANSACTION;
begin
insert into message_log
(SEQ,PROC_STEP,
CODE,
LOG_MESSAGE,
LOG_DATE
)
values
(log_SEQ.NEXTVAL,stp,code,log_message,logdat)
;
COMMIT;
end;