如何跟踪特定表的SQL语句?

时间:2016-08-25 11:51:20

标签: sql triggers db2 trace db2-luw

我目前正在使用DB2 v10.5,我需要记录特定表(A)上出现的所有SQL语句。例如,如果在表A上发生INSERT,我需要“抓取”该SQL语句并将其记录到另一个表(A_LOGGER)中。

我遇到的解决方案是在表A上创建一个TRIGGER(对于每个CRUD操作),查看表SYSIBMADM.SNAPDYN_SQL并尝试将最后执行的语句保存在表A上。

INSERT声明的示例:

CREATE OR REPLACE TRIGGER OPERATIONS_INSERT_TRIGGER 
AFTER INSERT ON REPLDEMO.OPERATIONS
REFERENCING NEW AS OBJ
FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
INSERT INTO REPLDEMO.OPERATIONS_LOGGER (LAST_SQL_STATEMENT)
SELECT STMT_TEXT FROM SYSIBMADM.SNAPDYN_SQL
WHERE 1=1
AND STMT_TEXT LIKE 'INSERT INTO REPLDEMO.OPERATIONS (%'
AND STMT_TEXT NOT LIKE '%?%';
END%

但是查看表SYSIBMADM.SNAPDYN_SQL并不是最好的解决方案,因为您不能保证您将获得在表A上执行的最后一个SQL语句。此外,如果在表A上执行了大量的sql语句在很短的时间内,TRIGGER将复制已经保存在A_LOGGER上的许多陈述。

所以,我的问题是:是否有一种有效且安全的方法来获取在表上执行的最后一个SQL语句?

感谢。

0 个答案:

没有答案