1. 首页 > DB2教程 > 正文

DB2教程FG066-DB2日志空间管理实战

风哥教程参考DB2官方文档Logging、Recovery、Log Management等内容,详细介绍日志空间管理、归档配置、日志监控等。更多视频教程www.fgedu.net.cn

目录大纲

Part01-日志架构概述

1.1 DB2日志类型

DB2日志类型:

  • 主日志(Primary Log):预分配的日志文件
  • 辅助日志(Secondary Log):按需分配的日志文件
  • 归档日志(Archived Log):已归档的日志文件
  • 活动日志(Active Log):当前正在使用的日志

1.2 日志用途

  • 崩溃恢复(Crash Recovery)
  • 前滚恢复(Rollforward Recovery)
  • 数据复制(Replication)
  • 审计追踪

Part02-日志配置

2.1 日志参数配置

# 查看当前日志配置
GET DATABASE CONFIGURATION FOR FGEDB;

# 配置日志文件大小(4KB页)
UPDATE DATABASE CONFIGURATION FOR FGEDB USING LOGFILSIZ 16384;

# 配置主日志文件数量
UPDATE DATABASE CONFIGURATION FOR FGEDB USING LOGPRIMARY 10;

# 配置辅助日志文件数量
UPDATE DATABASE CONFIGURATION FOR FGEDB USING LOGSECOND 20;

# 配置日志缓冲大小(4KB页)
UPDATE DATABASE CONFIGURATION FOR FGEDB USING LOGBUFSZ 1024;

# 配置日志组数量
UPDATE DATABASE CONFIGURATION FOR FGEDB USING LOGGROUPS 2;

# 启用无限日志
UPDATE DATABASE CONFIGURATION FOR FGEDB USING LOGSECOND -1;

# 配置日志路径
UPDATE DATABASE CONFIGURATION FOR FGEDB USING NEWLOGPATH /db2log/fgedb;

# 查看配置生效情况
GET DATABASE CONFIGURATION FOR FGEDB;

# 重启数据库使配置生效
db2 force applications all
db2stop
db2start

2.2 日志文件系统规划

# 创建日志文件系统(示例)
# Linux下创建独立的日志分区
# fdisk /dev/sdb
# mkfs.ext4 /dev/sdb1
# mkdir -p /db2log/fgedb
# mount /dev/sdb1 /db2log/fgedb
# chown -R db2inst1:db2iadm1 /db2log

# 配置日志路径
UPDATE DATABASE CONFIGURATION FOR FGEDB USING NEWLOGPATH /db2log/fgedb;

# 配置镜像日志路径
UPDATE DATABASE CONFIGURATION FOR FGEDB USING MIRRORLOGPATH /db2logmirror/fgedb;

# 启用日志镜像
UPDATE DATABASE CONFIGURATION FOR FGEDB USING LOGARCHMETH1 DISK:/db2archive/fgedb;
UPDATE DATABASE CONFIGURATION FOR FGEDB USING LOGARCHMETH2 OFF;

Part03-日志归档

3.1 归档配置

# 查看归档模式
GET DATABASE CONFIGURATION FOR FGEDB;

# 启用归档日志模式
UPDATE DATABASE CONFIGURATION FOR FGEDB USING LOGARCHMETH1 DISK:/db2archive/fgedb;

# 配置归档到TSM
UPDATE DATABASE CONFIGURATION FOR FGEDB USING LOGARCHMETH1 TSM;

# 配置归档到VENDOR
UPDATE DATABASE CONFIGURATION FOR FGEDB USING LOGARCHMETH1 VENDOR:/vendor/lib/vendor.so;

# 配置归档压缩
UPDATE DATABASE CONFIGURATION FOR FGEDB USING LOGARCHCOMPR1 ON;
UPDATE DATABASE CONFIGURATION FOR FGEDB USING LOGARCHCOMPR2 OFF;

# 配置归档选项
UPDATE DATABASE CONFIGURATION FOR FGEDB USING LOGARCHOPT1 ‘COMPRESS=YES’;

# 查看归档日志路径
LIST HISTORY ARCHIVE ALL FOR FGEDB;

# 配置日志保留策略
UPDATE DATABASE CONFIGURATION FOR FGEDB USING REC_HIS_RETENTN 90;

# 手动归档当前日志
ARCHIVE LOG FOR DATABASE FGEDB;

3.2 归档管理

# 查看日志历史
LIST HISTORY ALL FOR FGEDB;

# 查看备份历史
LIST HISTORY BACKUP ALL FOR FGEDB;

# 查看归档历史
LIST HISTORY ARCHIVE ALL FOR FGEDB;

# 清理历史记录
PRUNE HISTORY 20260101 FOR FGEDB;
PRUNE HISTORY 20260101 AND DELETE FOR FGEDB;

# 清理归档日志
PRUNE LOGFILE PRIOR TO S0000010.LOG FOR FGEDB;

# 创建归档日志管理脚本
#!/bin/bash
# manage_archive_logs.sh

ARCHIVE_DIR=”/db2archive/fgedb”
RETENTION_DAYS=30
DATE=$(date +%Y%m%d)
LOG_FILE=”/db2logs/archive_log_${DATE}.log”

echo “=== 开始管理归档日志: $(date) ===” >> ${LOG_FILE}

db2 connect to FGEDB >> ${LOG_FILE} 2>&1

# 清理30天前的归档日志
find ${ARCHIVE_DIR} -name “*.LOG” -mtime +${RETENTION_DAYS} -delete >> ${LOG_FILE} 2>&1

# 清理历史记录
db2 “PRUNE HISTORY $(date -d “${RETENTION_DAYS} days ago” +%Y%m%d) FOR FGEDB” >> ${LOG_FILE} 2>&1

db2 connect reset >> ${LOG_FILE} 2>&1

echo “=== 归档日志管理完成: $(date) ===” >> ${LOG_FILE}

# crontab配置
# 0 3 * * * /db2scripts/manage_archive_logs.sh >> /db2logs/manage_archive_cron.log 2>&1

Part04-日志监控与维护

4.1 日志监控

# 查看日志使用情况
GET SNAPSHOT FOR DATABASE ON FGEDB;

# 查看日志快照
SELECT
TOTAL_LOG_USED,
TOTAL_LOG_AVAILABLE,
SEC_LOG_USED_TOP,
APPL_ID_HOLDING_OLDEST_XACT,
LOG_READS,
LOG_WRITES
FROM SYSIBMADM.SNAPDB;

# 查看日志使用率
SELECT
ROUND(TOTAL_LOG_USED * 100.0 / (TOTAL_LOG_USED + TOTAL_LOG_AVAILABLE), 2) AS LOG_UTILIZATION_PERCENT
FROM SYSIBMADM.SNAPDB;

# 查看持有最旧事务的应用
SELECT
AGENT_ID,
SUBSTR(APPL_NAME, 1, 30) AS APPL_NAME,
SUBSTR(PRIMARY_AUTH_ID, 1, 20) AS AUTH_ID,
UOW_START_TIME,
UOW_LOG_SPACE_USED
FROM SYSIBMADM.APPLICATIONS
WHERE AGENT_ID = (SELECT APPL_ID_HOLDING_OLDEST_XACT FROM SYSIBMADM.SNAPDB);

# 查看日志文件状态
SELECT
SUBSTR(MEMBER, 1, 5) AS MEMBER,
SUBSTR(LOG_FILE, 1, 30) AS LOG_FILE,
LOG_FILE_STATE,
LOG_FILE_SIZE,
FIRST_LSO,
LAST_LSO
FROM TABLE(SNAP_GET_DB(”, -1)) AS DB,
TABLE(SNAP_GET_LOG(”, -1)) AS LOG;

# 查看数据库管理器日志
db2diag -time 1h

# 查看通知日志
db2 list history since $(date -d ‘1 hour ago’ +%Y%m%d%H%M%S) for FGEDB

4.2 常见问题处理

# 日志满了怎么办?
# 1. 增加辅助日志
UPDATE DATABASE CONFIGURATION FOR FGEDB USING LOGSECOND 20;

# 2. 归档当前日志
ARCHIVE LOG FOR DATABASE FGEDB;

# 3. 找出持有旧事务的应用并断开
FORCE APPLICATION (12345);

# 4. 增大日志文件大小
UPDATE DATABASE CONFIGURATION FOR FGEDB USING LOGFILSIZ 32768;

# 日志切换失败
# 检查日志路径权限
ls -ld /db2log/fgedb
chown -R db2inst1:db2iadm1 /db2log

# 检查磁盘空间
df -h /db2log

# 归档失败
# 检查归档路径
ls -ld /db2archive/fgedb
chown -R db2inst1:db2iadm1 /db2archive

# 检查磁盘空间
df -h /db2archive

# 手动归档
ARCHIVE LOG FOR DATABASE FGEDB;

# 日志损坏
# 1. 从归档恢复
# 2. 从备份恢复数据库
RESTORE DATABASE FGEDB FROM /db2backup TAKEN AT 20260401000000;
ROLLFORWARD DATABASE FGEDB TO END OF LOGS AND COMPLETE;

Part05-风哥经验总结与分享

5.1 日志配置要点

  • 根据业务量配置合适的LOGFILSIZ
  • 配置足够的LOGPRIMARY和LOGSECOND
  • 日志使用独立的文件系统
  • 生产环境启用归档模式
  • 配置日志镜像提高可靠性
  • 定期归档和清理日志

5.2 监控建议

监控项 建议阈值
日志使用率 超过80%告警
日志文件系统使用率 超过80%告警
归档失败 立即告警
长事务 超过30分钟告警

5.3 运维要点

  • 定期检查日志空间使用
  • 确保归档正常运行
  • 定期清理过期归档日志
  • 监控持有旧事务的应用
  • 建立日志空间告警机制
  • 保留足够的归档日志用于恢复
更多视频教程www.fgedu.net.cn
学习交流加群风哥微信: itpux-com
风哥Oracle/MySQL/PostgreSQL/Greenplum/DB2/Redis等数据库培训课程,10年一线实战经验,企业级培训,真正掌握数据库核心技术!

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息