外观
DB2 诊断日志
诊断日志概述
DB2诊断日志是数据库故障排查和性能监控的重要工具,记录了数据库运行过程中的关键事件、错误信息和警告。通过分析诊断日志,DBA可以快速定位故障原因,优化数据库性能,确保数据库系统的稳定运行。
诊断日志类型
db2diag日志
- 位置:默认位于
$DB2INSTHOME/sqllib/db2dump/目录 - 内容:记录数据库实例级别的诊断信息,包括启动/停止、配置更改、错误和警告
- 格式:文本格式,每行包含时间戳、严重程度、组件、错误码和详细描述
- 滚动机制:达到大小限制后自动滚动,默认保留10个历史文件
管理通知日志
- 位置:默认位于
$DB2INSTHOME/sqllib/db2dump/nn.log - 内容:记录数据库管理操作,如备份/恢复、表空间维护、统计信息收集
- 格式:文本格式,包含操作类型、状态和结果
事务日志
- 位置:由
LOGARCHMETH1和LOGARCHMETH2参数指定 - 内容:记录所有数据库事务操作,用于恢复和复制
- 格式:二进制格式,需要专用工具分析
审计日志
- 位置:由
audit.cfg配置文件指定 - 内容:记录数据库安全相关事件,如用户登录、权限变更、敏感操作
- 格式:二进制或文本格式,支持多种输出格式
健康中心日志
- 位置:默认位于
$DB2INSTHOME/sqllib/db2dump/health目录 - 内容:记录健康中心监控的数据库健康状态和警报
- 格式:XML格式,用于健康中心工具分析
作业调度器日志
- 位置:默认位于
$DB2INSTHOME/sqllib/db2dump/jobmon目录 - 内容:记录自动维护作业的执行情况
- 格式:文本格式,包含作业状态、执行时间和结果
诊断日志配置
db2diag日志配置
配置参数
- DIAGLEVEL:控制日志详细程度(0-4)
- 0:仅记录致命错误
- 1:记录错误和严重警告
- 2:记录错误、警告和信息(默认)
- 3:记录详细信息
- 4:记录调试信息
- DIAGSIZE:控制单个日志文件大小(默认10MB)
- DIAGPATH:指定诊断日志存储路径
- DIAGCOUNT:指定保留的历史日志文件数量(默认10)
配置方法
bash
# 设置诊断日志级别
db2 update dbm cfg using DIAGLEVEL 3
# 设置诊断日志大小
db2 update dbm cfg using DIAGSIZE 20
# 设置诊断日志路径
db2 update dbm cfg using DIAGPATH /db2logs/diag
# 设置保留的日志文件数量
db2 update dbm cfg using DIAGCOUNT 20管理通知日志配置
配置参数
- NOTIFYLEVEL:控制通知级别(0-3)
- 0:关闭通知
- 1:仅记录错误
- 2:记录错误和警告(默认)
- 3:记录所有通知
配置方法
bash
db2 update dbm cfg using NOTIFYLEVEL 3审计日志配置
配置文件
- 位于
$DB2INSTHOME/sqllib/security/audit/config目录 - 包含审计策略、事件类型和输出格式配置
配置示例
bash
# 创建审计策略
db2 audit create policy audit_policy categories all status both error type audit
# 应用审计策略到数据库
db2 audit database apply policy audit_policy
# 启动审计
db2 audit start诊断日志分析工具
db2diag工具
- 功能:分析和过滤db2diag日志
- 常用选项:
-g:按严重程度过滤(ERROR, WARNING, INFO)-client:过滤客户端相关消息-time:按时间范围过滤-rc:按返回码过滤-format:指定输出格式
示例用法
bash
# 查看最近24小时的错误日志
db2diag -time "24 hours ago" -g LEVEL=ERROR
# 按返回码过滤日志
db2diag -rc 57014
# 查看客户端连接相关日志
db2diag -clientdb2support工具
- 功能:收集数据库环境信息和诊断日志,用于IBM支持分析
- 常用选项:
-d:指定数据库-s:收集特定时间段的日志-c:收集配置信息-o:指定输出文件
示例用法
bash
# 收集数据库sample的支持信息
db2support . -d sample -cdb2dart工具
- 功能:诊断和修复数据库页面损坏
- 常用选项:
/D:指定数据库/T:指定表空间/P:指定页面范围
示例用法
bash
# 检查数据库sample的完整性
db2dart sample /D /VIBM Data Studio
- 功能:图形化工具,提供日志分析、可视化和报告
- 特点:支持多种日志类型,提供交互式分析界面
- 适用场景:复杂故障分析,需要可视化展示
诊断日志内容解析
db2diag日志格式
2023-10-15-14.30.45.123456+080 I123456789A1234 LEVEL: Error
PID : 12345 TID : 67890 PROC : db2sysc 0
INSTANCE: db2inst1 NODE : 000 DB : SAMPLE
APPHDL : 0-1234 APPID: *LOCAL.db2inst1.231015143045
AUTHID : DB2INST1 HOSTNAME: db2server
EDUID : 67890 EDUNAME: db2agent (SAMPLE) 0
FUNCTION: DB2 UDB, buffer pool services, sqlbWritePage, probe:100
MESSAGE : ZRC=0x80000001=-2147483647=SQLB_END_OF_FILE
"End of File on Media"
DATA #1 : File descriptor, PD_TYPE_SQO_FILE_DESC, 4 bytes
4567
DATA #2 : File name, PD_TYPE_SQO_FILE_NAME, 51 bytes
/db2data/sample/NODE0000/SQL00001/SQLOGDIR/S0000001.LOG关键字段解析
- 时间戳:日志记录时间,精确到微秒
- LEVEL:日志严重程度(Error, Warning, Info, Debug)
- PID/TID:进程ID和线程ID
- INSTANCE/NODE/DB:实例名、节点号和数据库名
- APPHDL/APPID:应用程序句柄和应用程序ID
- AUTHID:执行操作的用户ID
- FUNCTION:产生日志的DB2组件和函数
- MESSAGE:错误信息和返回码(ZRC)
- DATA:附加数据,如文件名、缓冲区内容
错误码解析
- ZRC:DB2内部返回码,格式为0xXXXXXXXX
- SQLCODE:SQL错误码,用于应用程序开发
- SQLSTATE:SQL状态码,标准化的错误分类
诊断日志管理
日志归档策略
- 制定归档计划:根据业务需求和合规要求,确定日志保留期限
- 自动化归档:使用脚本或第三方工具定期归档旧日志
- 异地备份:将归档日志存储到异地,防止本地灾难
- 定期清理:删除超过保留期限的日志,释放存储空间
日志监控方案
- 实时监控:使用监控工具实时监控日志中的错误和警告
- 警报机制:配置自动警报,当出现严重错误时通知DBA
- 定期审查:定期审查日志内容,识别潜在问题
- 趋势分析:分析日志趋势,预测可能的故障
性能优化
- 合理设置日志级别:避免过度详细的日志导致性能下降
- 优化日志存储:使用高性能存储设备存放诊断日志
- 定期清理日志:防止日志文件占用过多存储空间
- 使用分区存储:将不同类型的日志存储到不同分区
常见故障诊断案例
案例1:数据库连接失败
症状:应用程序无法连接到数据库,报错SQL30082N
诊断步骤:
- 查看db2diag日志,搜索SQL30082N错误码
- 检查数据库状态:
db2 list database directory - 检查实例状态:
db2ilist和db2start - 检查网络配置:
db2 get dbm cfg | grep -i svcename
常见原因:
- 数据库未启动
- 实例未启动
- 服务名配置错误
- 防火墙阻止连接
案例2:表空间满
症状:应用程序插入数据失败,报错SQL0289N
诊断步骤:
- 查看db2diag日志,搜索SQL0289N错误码
- 检查表空间状态:
db2 list tablespaces show detail - 检查容器使用情况:
db2pd -d sample -tablespaces - 检查自动存储配置:
db2 get db cfg for sample | grep -i auto_storage
常见原因:
- 表空间容器已满
- 自动存储未启用
- 存储设备空间不足
- 表空间扩展策略不合理
案例3:死锁问题
症状:应用程序执行缓慢,出现锁等待超时
诊断步骤:
- 查看db2diag日志,搜索死锁相关消息
- 启用死锁监控:
db2 update dbm cfg using DLCHKTIME 10 - 分析死锁事件:
db2 get snapshot for locks on sample - 查看应用程序执行计划:
db2expln -d sample -stmtfile query.sql -output explain.out
常见原因:
- 应用程序设计不合理,锁顺序不一致
- 事务持有锁时间过长
- 缺少必要的索引,导致全表扫描
- 并发度过高
版本差异
DB2 10.5及之前版本
- 诊断日志滚动机制简单,仅支持按大小滚动
- 日志分析工具功能有限,主要依赖db2diag命令
- 健康中心日志格式较简单
DB2 11.1版本
- 增强了诊断日志的上下文信息
- 改进了日志滚动机制,支持按时间滚动
- 引入了更多的诊断事件类型
- 增强了db2support工具的收集能力
DB2 11.5版本
- 引入了统一的日志管理界面
- 支持日志压缩,减少存储空间占用
- 增强了日志的可搜索性
- 改进了审计日志的性能和安全性
生产实践
1. 日志集中管理
- 场景:多实例、多节点DB2环境
- 方案:使用ELK Stack或Splunk集中收集和分析诊断日志
- 效果:实现日志的集中查询、分析和告警,提高故障排查效率
2. 自动日志监控
- 场景:需要实时监控数据库状态
- 方案:编写脚本定期检查db2diag日志,当出现特定错误时发送告警
- 效果:实现故障的早期发现和自动通知,减少 downtime
3. 日志归档自动化
- 场景:需要长期保留诊断日志
- 方案:使用crontab定期归档旧日志到磁带或云存储
- 效果:确保日志安全存储,同时释放本地存储空间
常见问题(FAQ)
Q1: 如何提高诊断日志的分析效率?
A1: 可以通过以下方法提高分析效率:
- 合理设置日志级别,避免过多冗余信息
- 使用db2diag工具的过滤功能,只查看相关日志
- 学习常见错误码和模式,快速识别问题类型
- 使用集中日志管理工具,实现日志的可视化分析
- 建立日志分析知识库,积累常见问题的解决方案
Q2: 诊断日志占用过多存储空间怎么办?
A2: 可以通过以下方法解决:
- 调整DIAGSIZE参数,减小单个日志文件大小
- 调整DIAGCOUNT参数,减少保留的历史日志数量
- 定期归档和清理旧日志
- 启用日志压缩功能(DB2 11.5+)
- 将日志存储到低成本存储设备
Q3: 如何解读db2diag日志中的ZRC返回码?
A3: ZRC返回码是DB2内部错误码,可以通过以下方法解读:
- 使用db2diag工具的
-rc选项查询详细信息 - 参考IBM DB2文档中的错误码手册
- 搜索IBM支持网站获取解决方案
- 使用IBM Data Studio的日志分析功能自动解读
Q4: 如何配置db2diag日志的远程存储?
A4: 可以通过以下方法配置:
- 设置DIAGPATH参数为网络共享路径
- 使用NFS或SMB挂载远程存储
- 确保DB2实例用户有足够的权限访问远程路径
- 测试远程路径的写入性能,避免影响数据库性能
Q5: 如何监控诊断日志中的特定事件?
A5: 可以通过以下方法监控:
- 使用脚本定期搜索日志中的特定关键字
- 配置监控工具(如Nagios、Zabbix)的日志监控功能
- 使用IBM Data Studio的自动告警功能
- 编写自定义监控程序,实时分析日志流
Q6: 诊断日志中出现大量警告信息怎么办?
A6: 可以通过以下方法处理:
- 分析警告信息的来源和原因
- 如果是已知问题且不影响系统运行,可以调整日志级别
- 如果是潜在问题,及时进行修复
- 建立警告信息的分类和处理流程
- 定期审查警告信息,识别系统趋势
Q7: 如何确保诊断日志的安全性?
A7: 可以通过以下方法确保安全性:
- 设置适当的文件权限,限制日志访问
- 加密敏感日志信息,如审计日志
- 定期备份日志到安全位置
- 实施日志访问审计,记录日志查看操作
- 遵循合规要求,确保日志的完整性和不可篡改性
Q8: 如何使用诊断日志进行性能优化?
A8: 可以通过以下方法进行性能优化:
- 分析日志中的性能相关警告和错误
- 查看日志中的资源争用情况
- 识别频繁出现的慢查询
- 分析日志中的锁等待和死锁事件
- 结合性能监控数据,定位性能瓶颈
Q9: 如何处理滚动日志导致的历史信息丢失?
A9: 可以通过以下方法处理:
- 增加DIAGCOUNT参数,保留更多历史日志
- 实施日志归档策略,定期备份旧日志
- 使用集中日志管理系统,永久存储日志
- 调整滚动策略,结合大小和时间滚动
Q10: 如何验证诊断日志配置是否正确?
A10: 可以通过以下方法验证:
- 检查配置参数:
db2 get dbm cfg | grep -i diag - 生成测试日志:执行数据库操作,检查日志是否记录
- 验证日志滚动:手动触发日志滚动,检查历史文件
- 测试日志路径:确保日志路径可写,权限正确
总结
DB2诊断日志是数据库运维的重要工具,通过合理配置和有效分析,可以快速定位和解决数据库故障,优化系统性能。DBA应该熟悉各种诊断日志类型、配置方法和分析工具,建立完善的日志管理和监控机制,确保数据库系统的稳定运行。定期审查和分析诊断日志,不仅可以解决当前问题,还可以预测潜在故障,实现主动运维。
