如何获取DB2 LUW中表的最后访问日期及访问用户信息
DB2 LUW 表访问用户及历史查询记录获取方案
一、表最后访问对应用户的直接查询能力说明
DB2 LUW 自带的SYSCAT.TABLES视图中仅存储了表的最后访问时间LAST_USED字段,默认没有内置的系统表或视图直接存储该次访问对应的用户ID/用户名,该字段仅记录时间戳,不关联访问主体信息。
二、历史查询记录(含用户、执行时间)的查询方案
你可以通过两类内置能力获取对应信息,分别对应短期缓存查询和长期留存查询两种场景:
1. 短期最近查询查询(包缓存)
DB2 会将近期执行过的SQL语句缓存在包缓存中,你可以通过MON_GET_PKG_CACHE_STMT管理视图查询缓存内的记录,包含执行用户、执行时间、SQL文本等核心字段,示例查询语句如下:
SELECT DISTINCT AUTHID AS EXECUTE_USER, LAST_EXEC_TIME AS EXECUTE_TIMESTAMP, LEFT(STMT_TEXT, 1000) AS EXECUTE_SQL FROM TABLE(MON_GET_PKG_CACHE_STMT(NULL, NULL, NULL, -2)) WHERE STMT_TEXT LIKE '%<你的目标表名>%' AND STMT_TEXT NOT LIKE '%EXPLAIN%' -- 过滤掉执行计划生成等系统类查询 ORDER BY LAST_EXEC_TIME DESC;
注意:该视图的数据仅存在于包缓存中,当缓存被清理、实例重启或者语句缓存失效后,对应记录就会丢失,仅能查询到近期的执行记录。
2. 长期历史查询留存方案
如果需要长期存储所有历史查询记录,需要提前开启DB2的对应审计或监控功能,两个常用方案如下:
- 审计功能:创建审计策略并开启
EXECUTE类别的审计规则,所有符合规则的SQL执行记录都会写入审计日志,后续可以通过SYSPROC.AUDIT_DELIM_EXTRACT存储过程解析日志,获取执行用户、时间、访问对象等完整信息。 - 语句事件监视器:创建语句类型的事件监视器,配置将所有SQL执行日志持久化存储到指定表或文件中,永久留存所有执行记录,包含完整的用户、时间、SQL文本、访问对象属性。
注意:上述两类持久化记录功能默认不会开启,会产生一定的性能开销和存储占用,需要DBA根据业务需要提前配置启用。
内容的提问来源于stack exchange,提问作者maseed ilyas
相关产品推荐
相关产品推荐

