风哥教程参考DB2官方文档HADR、Backup and Recovery等内容,详细介绍灾备演练、切换测试、恢复验证等。更多视频教程www.fgedu.net.cn
目录大纲
Part01-灾备演练概述
1.1 演练目的
灾备演练目的:
- 验证灾备方案:确保灾备方案可行
- 测试恢复流程:验证恢复流程正确
- 评估恢复时间:测量RTO指标
- 培训运维人员:提高应急能力
1.2 演练类型
- 桌面演练:方案评审、流程梳理
- 模拟演练:模拟故障场景
- 实战演练:真实切换测试
- 全流程演练:完整灾备切换
Part02-演练准备
2.1 演练方案
## 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切换演练
#!/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 演练报告
## 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指标
- 培训运维团队
- 持续优化灾备流程
- 建立演练档案
学习交流加群风哥微信: itpux-com
风哥Oracle/MySQL/PostgreSQL/Greenplum/DB2/Redis等数据库培训课程,10年一线实战经验,企业级培训,真正掌握数据库核心技术!
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
