DB2 Linux社区版自动生成含SQL事件的即时审计平面文件方案咨询
DB2 Community版自动生成即时平面审计日志方案
针对你在DB2 Community版上遇到的审计日志手动流程问题,有几个直接的配置和脚本方案可以实现自动生成包含SQL语句、主机、会话ID、时间戳的即时平面日志:
一、配置自动审计归档
先通过DB2参数开启自动归档,不用手动跑db2audit archive:
- 设置审计归档目录(替换成你实际的路径):
db2 update db cfg for <你的数据库名> using AUDITARCHPATH '/db2/audit/archive' - 开启自动归档开关:
当审计日志达到db2 update db cfg for <你的数据库名> using AUTOARCHIVE ONAUDITLOGSIZE(默认10000页)的阈值时,DB2会自动把当前日志归档到你指定的目录,不用人工干预。
二、自动提取归档文件为平面ASCII
用Linux的定时任务加Shell脚本,自动把归档的审计文件转成平面文件:
- 写个Shell脚本
auto_extract_audit.sh,内容如下(替换成你的数据库名和路径):#!/bin/bash DB_NAME="你的数据库名" ARCHIVE_DIR="/db2/audit/archive" FLAT_LOG_DIR="/db2/audit/flat_logs" # 遍历未处理的归档文件 for archive_file in $(ls ${ARCHIVE_DIR}/DB2* 2>/dev/null | grep -v ".extracted") do # 提取指定字段:SQL语句、上下文(含主机/会话ID)、细节(含时间戳) db2audit extract file ${archive_file} to ${FLAT_LOG_DIR} delimiter ',' include detail, sql, context # 标记已处理文件,避免重复提取 mv ${archive_file} ${archive_file}.extracted done - 给脚本加执行权限:
chmod +x auto_extract_audit.sh - 配置cron定时检查执行,比如每分钟跑一次:
执行crontab -e,添加一行:
这样每分钟都会检查归档目录,把新的归档文件转成平面日志存到指定目录。* * * * * /path/to/auto_extract_audit.sh >> /var/log/db2_auto_audit.log 2>&1
三、调整审计策略,确保捕获所有需要的事件
要确保审计能抓到所有SQL执行和数据库级事件,先检查当前审计配置:
db2audit describe
然后更新审计策略,开启需要的事件类型:
db2audit configure scope all status both error type audit, checking, objmaint, secmaint, sysadmin, validate, context, execute
其中execute会捕获所有SQL执行事件,context包含主机、会话ID等上下文信息,detail会提供时间戳等细节,刚好满足你的需求。
四、验证配置
最后重启DB2实例让所有配置生效:
db2stop force db2start
执行一些SQL操作,等几分钟后去FLAT_LOG_DIR目录下查看生成的平面文件,确认里面包含你需要的字段信息。
内容的提问来源于stack exchange,提问作者ankur singh
相关产品推荐
相关产品推荐

