我正在使用db2 (如果您有另一个数据库的解决方案,我仍然感兴趣),并且正在尝试识别从特定表获取的每一行。解决方案需要在数据库级别,因为我不能访问导致提取的实际SELECT语句。对于从特定表获取的每一行,我至少希望将一个或多个列值捕获到日志/表中。
下面是一个例子:
Table1结构
CustNo (主键)
CustName
表1(两行)
12345,乔的蟹屋
98765,莫顿的牛排馆
流程
1)选择前,日志文件为空
2)执行: SELECT CustName from Table1 where CustNo=12345
3)选择后,日志文件包含:
LogFile1
---------
123454)执行: SELECT * from Table1
5) select后,日志文件包含:
LogFile1
---------
12345
12345
98765感谢您的任何建议/建议...
发布于 2014-03-21 22:35:56
如果您愿意调用SP来记录此信息,您可能只需要添加一个*READ触发器。每当从文件中读取任何记录时,尝试让某些函数运行并不是一个好主意,但*READ触发器可能是最有效的方式。
ADDPFTRG FILE(X) TRGTIME(*AFTER) TRGEVENT(*READ) PGM(Y)使用该命令形式将“只读”触发器程序(Y)添加到文件(X)中。程序Y可能会做一些快速的事情,比如将相关的数据项推送到数据队列中。然后拥有程序的多个批处理实例,该实例将条目从队列中拉出并将其写入日志文件。你真的不想让只读触发器做更多的工作,数据库I/O不应该出现在列表中。
预计性能会受到一些影响。
发布于 2014-02-07 18:45:46
您可以通过db2audit获取数据库上的操作,但无法获取所使用的值。使用审计或日志记录的值将危及敏感数据的安全。
http://pic.dhe.ibm.com/infocenter/db2luw/v10r5/topic/com.ibm.db2.luw.admin.cmd.doc/doc/r0002072.html
实际上,如果将给定表的所有读取行的ID放入其中,就相当于在日志表中多次复制ID列。同时,它没有给出任何顺序上下文,因为插入行的顺序与将存储或检索行的顺序不同。
您必须重新考虑您的日志记录策略,因为仅仅插入'fetched‘ID是不够的。为了利用这些数据,您还必须插入一些上下文信息,比如谁(用户)、何时(日期)、从哪里(计算机)。
您可以做的另一件事是在将开始游标返回给调用者之前,将select包装在存储过程中,并在日志表中插入ID值。
https://stackoverflow.com/questions/21613207
复制相似问题