Oracle 过程日志事件
Oracle Procedure Log Events
下面是我的程序。
CREATE OR REPLACE PROCEDURE "CUSTOMER_INCREMENTAL" (
IS
BEGIN
INSERT INTO PROC_LOG (START_DATE,OUTPUT) VALUES (sysdate,Process Started);
INSERT INTO NDB_AML_CUSTOMER
(ID, TITLE,...)
SELECT ID, TITLE,...
FROM NDB_CUSTOMER_NEW
WHERE DATE_TIME > (SELECT RUN_DATE FROM CHECK_POINT WHERE TABLE_NAME = 'NDB_CUSTOMER_NEW');
UPDATE CHECK_POINT SET RUN_DATE = SYSDATE WHERE TABLE_NAME = 'NDB_CUSTOMER_NEW';
COMMIT;
INSERT INTO PROC_LOG (END_DATE,OUTPUT) VALUES (sysdate,Process Ended);
END;
/
我想将日志事件输出到 table。例如,事件调用 "Process started" 的过程的开始日期和时间,过程结束日期和时间以及异常期间的错误消息。 Log_table 中的三列,开始日期、结束日期和输出。寻求专家的意见。
您可以像本文 Exception handling 中提到的那样捕获过程中的异常。对于开始和结束日期的记录,您可以使用简单的插入语句。
CREATE OR REPLACE PROCEDURE "CUSTOMER_INCREMENTAL" (
IS
BEGIN
Process start event
INSERT INTO LOG_TABLE(ID, START_DATE, END_DATE, MESSAGE) VALUES (ID, SYSDATE, NULL, NULL);
INSERT INTO NDB_AML_CUSTOMER
(ID, TITLE,...)
SELECT ID, TITLE,...
FROM NDB_CUSTOMER_NEW
WHERE DATE_TIME > (SELECT RUN_DATE FROM CHECK_POINT WHERE TABLE_NAME = 'NDB_CUSTOMER_NEW');
UPDATE CHECK_POINT SET RUN_DATE = SYSDATE WHERE TABLE_NAME = 'NDB_CUSTOMER_NEW';
COMMIT;
UPDATE LOG_TABLE SET END_DATE = SYSDATE WHERE ID = ID;
Process End event
EXCEPTION
WHEN OTHERS THEN
UPDATE LOG_TABLE SET END_DATE = SYSDATE, MESSAGE = EXCEPTION_MESSAGE WHERE ID = ID;
END;
类似这个片段的东西
我有一个单独的进程日志包,可以将消息输出到我的日志 table(使用 pragma autonomous transaction
),以及使用 dbms_application_info 以便您可以看到什么是会话查询 v$session 时做的事情。
然后我在我的实际代码包中有包装程序,它传递包信息、日志消息类型(信息、错误等)。
我强烈建议您查看 https://oracle-base.com/articles/misc/instrumenting-your-plsql-code,因为 Tim 提供了他的日志包示例供您查看。
下面是我的程序。
CREATE OR REPLACE PROCEDURE "CUSTOMER_INCREMENTAL" (
IS
BEGIN
INSERT INTO PROC_LOG (START_DATE,OUTPUT) VALUES (sysdate,Process Started);
INSERT INTO NDB_AML_CUSTOMER
(ID, TITLE,...)
SELECT ID, TITLE,...
FROM NDB_CUSTOMER_NEW
WHERE DATE_TIME > (SELECT RUN_DATE FROM CHECK_POINT WHERE TABLE_NAME = 'NDB_CUSTOMER_NEW');
UPDATE CHECK_POINT SET RUN_DATE = SYSDATE WHERE TABLE_NAME = 'NDB_CUSTOMER_NEW';
COMMIT;
INSERT INTO PROC_LOG (END_DATE,OUTPUT) VALUES (sysdate,Process Ended);
END;
/
我想将日志事件输出到 table。例如,事件调用 "Process started" 的过程的开始日期和时间,过程结束日期和时间以及异常期间的错误消息。 Log_table 中的三列,开始日期、结束日期和输出。寻求专家的意见。
您可以像本文 Exception handling 中提到的那样捕获过程中的异常。对于开始和结束日期的记录,您可以使用简单的插入语句。
CREATE OR REPLACE PROCEDURE "CUSTOMER_INCREMENTAL" (
IS
BEGIN
Process start event
INSERT INTO LOG_TABLE(ID, START_DATE, END_DATE, MESSAGE) VALUES (ID, SYSDATE, NULL, NULL);
INSERT INTO NDB_AML_CUSTOMER
(ID, TITLE,...)
SELECT ID, TITLE,...
FROM NDB_CUSTOMER_NEW
WHERE DATE_TIME > (SELECT RUN_DATE FROM CHECK_POINT WHERE TABLE_NAME = 'NDB_CUSTOMER_NEW');
UPDATE CHECK_POINT SET RUN_DATE = SYSDATE WHERE TABLE_NAME = 'NDB_CUSTOMER_NEW';
COMMIT;
UPDATE LOG_TABLE SET END_DATE = SYSDATE WHERE ID = ID;
Process End event
EXCEPTION
WHEN OTHERS THEN
UPDATE LOG_TABLE SET END_DATE = SYSDATE, MESSAGE = EXCEPTION_MESSAGE WHERE ID = ID;
END;
类似这个片段的东西
我有一个单独的进程日志包,可以将消息输出到我的日志 table(使用 pragma autonomous transaction
),以及使用 dbms_application_info 以便您可以看到什么是会话查询 v$session 时做的事情。
然后我在我的实际代码包中有包装程序,它传递包信息、日志消息类型(信息、错误等)。
我强烈建议您查看 https://oracle-base.com/articles/misc/instrumenting-your-plsql-code,因为 Tim 提供了他的日志包示例供您查看。