一、适用场景
适用于 DB2 HADR 主备架构下调整数据库日志参数,例如:
LOGFILSIZ
LOGPRIMARY
LOGSECOND
本次 TESTDB 调整示例:
调整前:
LOGFILSIZ = 1024 # 4MB
LOGPRIMARY = 16
LOGSECOND = 22
调整后:
LOGFILSIZ = 4096 # 16MB
LOGPRIMARY = 20
LOGSECOND = 30
最大活动日志空间:
(LOGPRIMARY + LOGSECOND) × LOGFILSIZ × 4KB
调整前:
(16 + 22) × 1024 × 4KB ≈ 152MB
调整后:
(20 + 30) × 4096 × 4KB ≈ 800MB
二、操作原则
HADR 主从架构建议顺序:
检查主从状态
↓
先修改从库
↓
从库重新激活
↓
确认从库恢复 PEER
↓
主库写入 DEFERRED 配置
↓
等待维护窗口
↓
停止业务
↓
主库重新激活
↓
确认 HADR 恢复 PEER
↓
恢复业务
核心原则:
先从库,后主库
先验证从库正常,再动主库
任何时候不要同时重启主从
主库重新激活必须安排维护窗口
三、操作用户
DB2 操作统一使用实例用户:
su - db2inst1
确认:
whoami
应返回:
db2inst1
四、变更前检查
主库、从库都先检查:
db2pd -db TESTDB -hadr
正常状态必须满足:
主库:
HADR_ROLE = PRIMARY
HADR_STATE = PEER
HADR_CONNECT_STATUS = CONNECTED
从库:
HADR_ROLE = STANDBY
HADR_STATE = PEER
HADR_CONNECT_STATUS = CONNECTED
重点确认:
HADR_LOG_GAP(bytes) 接近 0
STANDBY_ERROR_TIME = NULL
检查当前参数:
db2 get db cfg for TESTDB | \
egrep -i "Log file size|primary log|secondary log"
检查磁盘空间:
df -h
五、第一步:修改从库
先登录 STANDBY。
例如:
10.1.3.66
确认从库状态:
db2pd -db TESTDB -hadr
确认无业务连接:
db2 list active databases
最好看到:
Applications connected currently = 0
修改参数
db2 update db cfg for TESTDB using LOGFILSIZ 4096 DEFERRED
db2 update db cfg for TESTDB using LOGPRIMARY 20 DEFERRED
db2 update db cfg for TESTDB using LOGSECOND 30 DEFERRED
正常返回:
DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully.
验证配置:
db2 get db cfg for TESTDB | \
egrep -i "Log file size|primary log|secondary log"
应看到:
LOGFILSIZ = 4096
LOGPRIMARY = 20
LOGSECOND = 30
六、从库重新激活
确认:
STANDBY
PEER
CONNECTED
Applications connected = 0
然后:
db2 deactivate db TESTDB
成功后:
db2 activate db TESTDB
注意:
deactivate / activate
= 重新激活 TESTDB 数据库
不是:
db2stop / db2start
也不是:
reboot
七、验证从库
重新激活后:
db2pd -db TESTDB -hadr
必须恢复:
HADR_ROLE = STANDBY
HADR_STATE = PEER
HADR_CONNECT_STATUS = CONNECTED
HADR_LOG_GAP(bytes) ≈ 0
再确认参数:
db2 get db cfg for TESTDB | \
egrep -i "Log file size|primary log|secondary log"
应为:
LOGFILSIZ = 4096
LOGPRIMARY = 20
LOGSECOND = 30
只有从库恢复:
PEER + CONNECTED
以后,才可以继续处理主库。
八、第二步:修改主库配置
登录 PRIMARY。
例如:
10.1.3.65
确认 HADR:
db2pd -db TESTDB -hadr
必须满足:
HADR_ROLE = PRIMARY
HADR_STATE = PEER
HADR_CONNECT_STATUS = CONNECTED
写入参数:
db2 update db cfg for TESTDB using LOGFILSIZ 4096 DEFERRED
db2 update db cfg for TESTDB using LOGPRIMARY 20 DEFERRED
db2 update db cfg for TESTDB using LOGSECOND 30 DEFERRED
检查:
db2 get db cfg for TESTDB | \
egrep -i "Log file size|primary log|secondary log"
应看到:
LOGFILSIZ = 4096
LOGPRIMARY = 20
LOGSECOND = 30
此时:
配置已保存 ✅
业务继续运行 ✅
主库暂不重新激活 ✅
可以保持这种状态直到维护窗口。
九、维护窗口处理主库
维护窗口开始前先检查:
db2pd -db TESTDB -hadr
必须确认:
PRIMARY
PEER
CONNECTED
然后应用侧停止业务或连接池。
检查数据库连接:
db2 list applications
确认业务连接已经退出。
不要直接使用:
db2 force applications all
除非经过审批并确认允许强制断开业务。
十、主库重新激活
业务停止后:
db2 deactivate db TESTDB
然后:
db2 activate db TESTDB
十一、最终验证
参数验证
db2 get db cfg for TESTDB | \
egrep -i "Log file size|primary log|secondary log"
目标:
LOGFILSIZ = 4096
LOGPRIMARY = 20
LOGSECOND = 30
HADR 验证
db2pd -db TESTDB -hadr
主库确认:
HADR_ROLE = PRIMARY
HADR_STATE = PEER
HADR_CONNECT_STATUS = CONNECTED
HADR_LOG_GAP(bytes) ≈ 0
从库确认:
HADR_ROLE = STANDBY
HADR_STATE = PEER
HADR_CONNECT_STATUS = CONNECTED
然后恢复应用。
十二、最简现场执行版
以后遇到类似调整,直接记住下面这套顺序:
① 主从 HADR 必须先确认 PEER / CONNECTED
② 从库:
修改参数 DEFERRED
↓
deactivate TESTDB
↓
activate TESTDB
↓
等待恢复 PEER
③ 主库:
修改参数 DEFERRED
↓
暂不重新激活
↓
正常运行等待维护窗口
④ 维护窗口:
再确认 HADR PEER
↓
停止应用
↓
确认连接退出
↓
deactivate TESTDB
↓
activate TESTDB
⑤ 最终验证:
参数正确
PRIMARY / STANDBY 角色正确
PEER
CONNECTED
HADR_LOG_GAP 接近 0
↓
恢复业务
十三、关键注意事项
-
所有 DB2 操作使用:
db2inst1
-
不需要手工修改任何
.conf、.cfg文件。
标准方式:
db2 update db cfg for TESTDB using ...
-
不需要:
reboot
-
不需要:
db2stop
db2start -
LOGFILSIZ单位为 4KB:1024 = 4MB
4096 = 16MB -
从库重新激活期间:
主库业务仍可继续
但 HADR 高可用冗余暂时降低
因此从库恢复 PEER 前绝不能同时操作主库。
-
主库配置可以提前使用
DEFERRED写入,之后等正常维护窗口再重新激活,没有必要为了参数调整立即停业务。 -
HADR 判断是否正常,优先看:
HADR_STATE = PEER
HADR_CONNECT_STATUS = CONNECTED
HADR_LOG_GAP 接近 0
STANDBY_ERROR_TIME = NULL
一句话标准
DB2 HADR 参数变更:先从库修改并重新激活,确认恢复 PEER;再给主库写 DEFERRED 配置,等维护窗口停业务后重新激活主库,最后确认主备 PEER/CONNECTED 后恢复业务。