☰
DB2 HADR 高可用实战:主备状态巡检、故障排查与主备切换操作指南
2026/10/19 1:52:06 网站建设 项目流程

适用环境:

DB2版本:11.5 数据库:TESTDB DB2实例用户:db2inst1 DB2服务名:db2c_db2inst1 DB2业务端口:50000/tcp 架构:HADR主备

db2inst1为 DB2 实例用户,DB2 实例进程db2sysc由该用户运行。执行 DB2 管理及巡检命令前,建议先切换至该用户。原巡检资料也是按照db2sysc→su - db2inst1→ 数据库检查的顺序执行。


一、日常快速巡检

1. 检查 DB2 服务进程

ps -ef | grep db2sysc | grep -v grep

正常:能看到db2inst1用户运行的db2sysc进程。


2. 检查 DB2 业务端口

ss -lnt | grep 50000

正常应看到50000端口处于:

LISTEN

说明 DB2 业务监听端口正常。


3. 切换 DB2 实例用户

su - db2inst1

确认:

whoami

正常返回:

db2inst1

4. 检查数据库状态

db2 list active databases

正常应看到:

Database name = TESTDB

业务运行期间还应存在正常数据库连接。原巡检文档也将TESTDB Active和应用连接情况作为数据库运行状态判断项。


5. 测试数据库连接

db2 connect to TESTDB

正常:能够成功连接,无报错。

测试 SQL:

db2 "values current timestamp"

正常:能够正常返回数据库当前时间。

查看当前应用连接:

db2 list applications

正常:能够看到当前数据库连接信息。


二、检查 HADR 主备状态

主、备两台服务器均执行:

db2pd -db TESTDB -hadr

重点只看:

HADR_ROLE = PRIMARY / STANDBY HADR_STATE = PEER HADR_CONNECT_STATUS = CONNECTED HADR_LOG_GAP(bytes) = 0 或较小 STANDBY_RECV_REPLAY_GAP(bytes) = 0 或较小

角色判断:

HADR_ROLE = PRIMARY 当前主库 HADR_ROLE = STANDBY 当前备库

正常状态核心标准:

HADR_STATE = PEER HADR_CONNECT_STATUS = CONNECTED HADR_LOG_GAP(bytes) = 0 或较小

其中PEER表示主备已经进入正常同步状态,CONNECTED表示主备 HADR 通信正常。

日常正常判断

DB2进程正常 + 50000端口监听正常 + TESTDB Active + 数据库可以连接 + SQL执行正常 + 应用连接正常 + HADR_STATE = PEER + HADR_CONNECT_STATUS = CONNECTED + LOG_GAP正常

满足以上条件,即可判断DB2 数据库服务及 HADR 主备运行正常。


三、正常主备切换

1. 切换前检查

主备两端执行:

db2pd -db TESTDB -hadr

确认:

当前主库: HADR_ROLE = PRIMARY 当前备库: HADR_ROLE = STANDBY 主备状态: HADR_STATE = PEER HADR_CONNECT_STATUS = CONNECTED HADR_LOG_GAP(bytes) = 0 或较小

正常切换前应确认主备处于PEER状态。


2. 执行正常切换

必须在当前备库,即HADR_ROLE = STANDBY的服务器执行:

db2 takeover hadr on db TESTDB

正常返回:

DB20000I The TAKEOVER HADR ON DATABASE command completed successfully.

原切换记录同样明确注明普通takeover在STANDBY备库执行。

切换后:

原主库:PRIMARY → STANDBY 原备库:STANDBY → PRIMARY

3. 切换后检查

主备两端再次执行:

db2pd -db TESTDB -hadr

确认:

HADR_ROLE 已完成互换 HADR_STATE = PEER HADR_CONNECT_STATUS = CONNECTED HADR_LOG_GAP(bytes) = 0 或较小

在新主库执行:

db2 connect to TESTDB db2 "values current timestamp" db2 list applications

确认数据库连接、SQL及业务连接正常。


四、故障切换

只有在原主库发生故障、无法正常完成普通主备切换时,才在存活备库执行:

db2 takeover hadr on db TESTDB by force

BY FORCE属于故障接管命令,正常主备切换不要使用。原切换资料也将其定义为主库故障情况下的强制接管方式。


五、日常常用命令汇总

# 检查DB2服务 ps -ef | grep db2sysc | grep -v grep # 检查DB2业务端口 ss -lnt | grep 50000 # 切换DB2实例用户 su - db2inst1 # 检查数据库状态 db2 list active databases # 测试数据库连接 db2 connect to TESTDB # 测试SQL db2 "values current timestamp" # 查看应用连接 db2 list applications # 检查HADR主备状态 db2pd -db TESTDB -hadr # 正常主备切换:当前备库执行 db2 takeover hadr on db TESTDB # 故障强制切换:仅主库故障时使用 db2 takeover hadr on db TESTDB by force

核心判断口诀

服务正常 → 50000端口正常 → TESTDB正常 → 数据库能连接 → SQL正常 → 业务连接正常 → HADR = PEER → CONNECTED → LOG_GAP正常

正常切换记住一句:找到HADR_ROLE = STANDBY的备库,在备库执行db2 takeover hadr on db TESTDB。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询