1. 首页 > DB2教程 > 正文

DB2教程FG090-DB2灾备演练实战

风哥教程参考DB2官方文档HADR、Backup and Recovery等内容,详细介绍灾备演练、切换测试、恢复验证等。更多视频教程www.fgedu.net.cn

目录大纲

Part01-灾备演练概述

1.1 演练目的

灾备演练目的:

  • 验证灾备方案:确保灾备方案可行
  • 测试恢复流程:验证恢复流程正确
  • 评估恢复时间:测量RTO指标
  • 培训运维人员:提高应急能力

1.2 演练类型

  • 桌面演练:方案评审、流程梳理
  • 模拟演练:模拟故障场景
  • 实战演练:真实切换测试
  • 全流程演练:完整灾备切换

Part02-演练准备

2.1 演练方案

# DB2灾备演练方案

## 1. 演练目标
– 验证HADR切换流程
– 测试备份恢复能力
– 评估RTO和RPO指标
– 培训运维团队

## 2. 演练范围
– 主库:192.168.1.10
– 备库:192.168.1.11
– 数据库:FGEDB

## 3. 演练场景
### 场景1:主库故障切换
– 主库服务器故障
– 自动切换到备库
– 验证数据一致性

### 场景2:备份恢复
– 模拟数据丢失
– 从备份恢复数据
– 验证数据完整性

### 场景3:实例故障恢复
– 实例崩溃
– 重启实例
– 验证服务恢复

## 4. 演练步骤
1. 演练前检查
2. 模拟故障
3. 执行切换
4. 验证服务
5. 恢复原状
6. 演练总结

## 5. 成功标准
– RTO < 1小时 - RPO = 0 - 数据完整性100% - 服务正常恢复

2.2 环境检查

# 演练前环境检查脚本
#!/bin/bash
# pre_drill_check.sh

echo “=== Pre-Drill Environment Check ===”
echo “Date: $(date)”

# 1. 检查主库状态
echo “1. Checking primary database…”
db2pd -db FGEDB -hadr | grep “HADR_ROLE”

# 2. 检查备库状态
echo “2. Checking standby database…”
ssh db2inst1@192.168.1.11 “db2pd -db FGEDB -hadr | grep ‘HADR_ROLE'”

# 3. 检查备份文件
echo “3. Checking backup files…”
ls -lh /db2backup/*.0 | tail -5

# 4. 检查网络连通性
echo “4. Checking network connectivity…”
ping -c 3 192.168.1.11

# 5. 检查磁盘空间
echo “5. Checking disk space…”
df -h /db2data

# 6. 检查表空间使用率
echo “6. Checking tablespace usage…”
db2 connect to FGEDB
db2 “SELECT tbsp_name, round(tbsp_used_pages*100.0/tbsp_total_pages,2)
FROM sysibmadm.tbsp_utilization”
db2 connect reset

# 7. 检查HADR同步状态
echo “7. Checking HADR sync status…”
db2pd -db FGEDB -hadr

# 8. 检查应用连接
echo “8. Checking application connections…”
db2 connect to FGEDB
db2 “SELECT COUNT(*) FROM sysibmadm.applications”
db2 connect reset

echo “=== Pre-Drill Check Complete ===”

Part03-演练执行

3.1 HADR切换演练

# HADR切换演练脚本
#!/bin/bash
# hadr_failover_drill.sh

PRIMARY_HOST=192.168.1.10
STANDBY_HOST=192.168.1.11
DBNAME=FGEDB

echo “=== HADR Failover Drill ===”
echo “Date: $(date)”

# 1. 记录演练开始时间
START_TIME=$(date +%s)

# 2. 检查主库状态
echo “1. Checking primary status…”
ssh db2inst1@$PRIMARY_HOST “db2pd -db $DBNAME -hadr”

# 3. 停止主库(模拟故障)
echo “2. Stopping primary database…”
ssh db2inst1@$PRIMARY_HOST “db2 deactivate db $DBNAME”
ssh db2inst1@$PRIMARY_HOST “db2stop force”

# 4. 执行HADR接管
echo “3. Performing HADR takeover…”
ssh db2inst1@$STANDBY_HOST “db2 takeover hadr on database $DBNAME”

# 5. 验证备库已切换为主库
echo “4. Verifying new primary…”
ssh db2inst1@$STANDBY_HOST “db2pd -db $DBNAME -hadr”

# 6. 测试数据库连接
echo “5. Testing database connection…”
ssh db2inst1@$STANDBY_HOST “db2 connect to $DBNAME”
ssh db2inst1@$STANDBY_HOST “db2 ‘SELECT COUNT(*) FROM syscat.tables'”
ssh db2inst1@$STANDBY_HOST “db2 connect reset”

# 7. 记录演练结束时间
END_TIME=$(date +%s)

# 8. 计算RTO
RTO=$((END_TIME – START_TIME))
echo “RTO: $RTO seconds”

# 9. 恢复原主库为备库
echo “6. Reintegrating original primary as standby…”
ssh db2inst1@$PRIMARY_HOST “db2start”
ssh db2inst1@$PRIMARY_HOST “db2 start hadr on database $DBNAME as standby”

# 10. 验证HADR状态
echo “7. Verifying HADR status…”
ssh db2inst1@$STANDBY_HOST “db2pd -db $DBNAME -hadr”

echo “=== HADR Failover Drill Complete ===”
echo “RTO: $RTO seconds”

3.2 备份恢复演练

# 备份恢复演练脚本
#!/bin/bash
# backup_recovery_drill.sh

DBNAME=FGEDB
BACKUP_DIR=/db2backup
TEST_DB=FGEDB_TEST

echo “=== Backup Recovery Drill ===”
echo “Date: $(date)”

# 1. 记录演练开始时间
START_TIME=$(date +%s)

# 2. 查找最新备份
echo “1. Finding latest backup…”
LATEST_BACKUP=$(ls -t $BACKUP_DIR/*.0 | head -1)
echo “Latest backup: $LATEST_BACKUP”

# 3. 创建测试数据库
echo “2. Creating test database…”
db2 create database $TEST_DB

# 4. 恢复备份到测试数据库
echo “3. Restoring backup to test database…”
db2 restore database $DBNAME from $BACKUP_DIR taken at $(basename $LATEST_BACKUP | cut -d. -f1) into $TEST_DB

# 5. 前滚日志
echo “4. Rolling forward logs…”
db2 rollforward database $TEST_DB to end of logs and complete

# 6. 验证数据完整性
echo “5. Verifying data integrity…”
db2 connect to $TEST_DB
TABLE_COUNT=$(db2 “SELECT COUNT(*) FROM syscat.tables” | tail -1 | awk ‘{print $1}’)
echo “Table count: $TABLE_COUNT”
db2 connect reset

# 7. 清理测试数据库
echo “6. Cleaning up test database…”
db2 drop database $TEST_DB

# 8. 记录演练结束时间
END_TIME=$(date +%s)

# 9. 计算RTO
RTO=$((END_TIME – START_TIME))
echo “RTO: $RTO seconds”

echo “=== Backup Recovery Drill Complete ===”

Part04-演练总结

4.1 演练报告

# DB2灾备演练报告

## 1. 演练基本信息
– 演练日期:2026-04-08
– 演练时间:14:00-17:00
– 演练人员:风哥、运维团队
– 演练类型:HADR切换演练

## 2. 演练场景
– 主库故障切换
– 备份恢复测试
– 实例故障恢复

## 3. 演练结果
### 3.1 HADR切换
– 切换时间:180秒
– RTO:3分钟
– RPO:0
– 结果:成功

### 3.2 备份恢复
– 恢复时间:1200秒
– RTO:20分钟
– 数据完整性:100%
– 结果:成功

### 3.3 实例恢复
– 恢复时间:60秒
– RTO:1分钟
– 结果:成功

## 4. 发现问题
1. HADR切换脚本需要优化
2. 备份文件路径需要统一
3. 监控告警延迟较高
4. 演练文档不够详细

## 5. 改进建议
1. 优化HADR切换脚本,减少手动操作
2. 建立备份文件自动清理机制
3. 优化监控告警响应时间
4. 完善演练文档和操作手册

## 6. 后续计划
1. 每季度进行一次HADR切换演练
2. 每月进行一次备份恢复测试
3. 定期更新演练文档
4. 培训更多运维人员

## 7. 结论
本次演练达到预期目标,验证了灾备方案的可行性,RTO和RPO指标符合要求。建议按照改进建议优化灾备流程。

4.2 问题跟踪

# 问题跟踪表
CREATE TABLE DRILL_ISSUES (
ISSUE_ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY,
DRILL_DATE DATE NOT NULL,
ISSUE_TYPE VARCHAR(50) NOT NULL,
ISSUE_DESC VARCHAR(500) NOT NULL,
SEVERITY VARCHAR(20) NOT NULL,
STATUS VARCHAR(20) NOT NULL DEFAULT ‘OPEN’,
ASSIGNEE VARCHAR(50),
CREATE_TIME TIMESTAMP NOT NULL DEFAULT CURRENT TIMESTAMP,
UPDATE_TIME TIMESTAMP NOT NULL DEFAULT CURRENT TIMESTAMP,
CONSTRAINT PK_DRILL_ISSUES PRIMARY KEY (ISSUE_ID)
);

INSERT INTO DRILL_ISSUES (DRILL_DATE, ISSUE_TYPE, ISSUE_DESC, SEVERITY, ASSIGNEE)
VALUES
(‘2026-04-08’, ‘SCRIPT’, ‘HADR切换脚本需要优化’, ‘MEDIUM’, ‘风哥’),
(‘2026-04-08’, ‘CONFIG’, ‘备份文件路径需要统一’, ‘LOW’, ‘运维团队’),
(‘2026-04-08’, ‘MONITOR’, ‘监控告警延迟较高’, ‘HIGH’, ‘监控团队’),
(‘2026-04-08’, ‘DOC’, ‘演练文档不够详细’, ‘LOW’, ‘文档团队’);

SELECT * FROM DRILL_ISSUES WHERE STATUS = ‘OPEN’;

UPDATE DRILL_ISSUES
SET STATUS = ‘RESOLVED’,
UPDATE_TIME = CURRENT TIMESTAMP
WHERE ISSUE_ID = 1;

Part05-风哥经验总结与分享

5.1 灾备演练要点

  • 制定详细的演练方案
  • 演练前充分准备
  • 演练中详细记录
  • 演练后认真总结
  • 跟踪问题整改
  • 定期开展演练

5.2 演练建议

演练类型 频率 参与人员
桌面演练 每月 运维团队
模拟演练 每季度 运维团队、开发团队
实战演练 每半年 全体相关人员

5.3 运维要点

  • 定期开展灾备演练
  • 验证灾备方案可行性
  • 评估RTO和RPO指标
  • 培训运维团队
  • 持续优化灾备流程
  • 建立演练档案
更多视频教程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,节假日休息