Oracle SOA BPEL审计线索在数据库中的存储

BPEL审计线索数据保存在表AUDIT_TRAIL和AUDIT_DETAILS两张表中,当数据量小于阀值时保存在AUDIT_TRAIL表中,但数据量大于阀值时保存在AUDIT_DETAILS表中,默认阀值是50KB,数据都经过压缩后保存在数据库中,可以调用UTL_COMPRESS.lz_uncompress(BIN)进行解压,但AUDIT_TRAIL表的存储情况稍微有点复杂,AUDIT_TRAIL会把数据拆分成多个记录存储,在解压前必须合并这些记录才能进行解压操作,下面这个函数是从OTN上找到的,可以根据BPEL的CIKEY对数据进行合并:

CREATE OR REPLACE FUNCTION get_audit_trail_log(cikey IN INTEGER) RETURN blob IS
--
CURSOR c_log(l_cikey INTEGER) IS
SELECT *
FROM audit_trail atr
WHERE cikey = l_cikey 
ORDER BY count_id;
-- 
bl BLOB;
BEGIN
dbms_lob.createtemporary (bl, TRUE);
FOR r_log IN c_log(cikey) 
LOOP
dbms_lob.append (bl,r_log.log); 
END LOOP;
--
RETURN(bl);
END;

接着再调用UTL_COMPRESS.lz_uncompress(BIN)就可以对数据进行解压。

SELECT UTL_COMPRESS.lz_uncompress(get_audit_trail_log(488838)) FROM dual;
SELECT UTL_COMPRESS.lz_uncompress(AUDIT_DETAILS.BIN) FROM AUDIT_DETAILS;

参考资料:

https://forums.oracle.com/message/3857155

http://docs.oracle.com/cd/E27559_01/doc.1112/e28552/bpel.htm

http://oracleaia.blogspot.com/2010/06/database-tables-used-to-store-instance.html(需翻墙)

原文地址:https://www.cnblogs.com/weisuoc/p/3409936.html