跳到主要内容

源 DB2 版本是 10.5,目标是 DB2 11.5,操作系统为 Linux

下面给出在线备份(数据库 + 活动日志 + 归档日志)并在 DB2 11.5 环境恢复的步骤、注意事项与示例脚本。

内容包含兼容性说明、备份与日志采集、文件传输、目标恢复(restore + rollforward)、以及验证与常见问题排查。

重要兼容性说明(先读):

  • 从 DB2 10.5 恢复到 DB2 11.5 一般是允许的(低版本备份恢复到高版本通常受支持),但请务必在测试环境先做演练。
  • 跨平台(例如 AIX -> Linux)可能存在备份镜像不可直接还原的问题;若跨平台,请改用 db2move/export-import、db2relocatedb 或迁移工具。
  • 若源与目标架构相同(同为 x86_64 Linux),可直接恢复。

一、准备工作(源端 10.5)

登录实例用户

  • su – db2inst1

检查版本与数据库配置

  • db2level
  • db2 connect to ISIMDB
  • db2 get db cfg for ISIMDB | egrep -i “logarchmeth|logretain|logprimary|logsecond|logfilsiz|pagebuffers”

确认日志归档模式

  • 若 LOGARCHMETH1 = * (例如 DISK:/path) 则已有归档。若为 NULL 或 CIRCULAR,则说明当前为循环日志(不能做基于日志的 rollforward 到备份后时间点)。若需要点时间恢复,必须先配置归档并确保产生归档日志(注意:改变日志模式可能需要数据库重启或特定操作;在生产请谨慎操作)。
  • 查看当前日志序列号:
    “db2pd -d ISIMDB -logs” 或 db2 “get snapshot for db on ISIMDB”

确保目标服务器(DB2 11.5)已经安装并且实例用户存在,且有足够磁盘空间。

二、备份流程(源端 10.5,在线备份并包含必要日志)
目标:生成一个在线备份镜像(包含活动日志),同时收集归档日志用于 rollforward 还原。

步骤 A — 在线备份(包含日志)

  • 创建备份目录并赋权
    mkdir -p /data/backups/ISIMDB
    chown db2inst1:db2iadm1 /data/backups/ISIMDB
  • 执行在线备份并包含日志(可启用压缩)
    db2 “backup db ISIMDB online to /data/backups/ISIMDB compress include logs”
    说明:
  • online:数据库在线,业务不中断
  • include logs:将必要的活动日志包含到备份镜像(便于恢复)
  • compress:可选,减少磁盘与传输量

执行成功后,记录输出的备份镜像名与时间戳(例如 ISIMDB.0.db2inst1.20251114.123456)。

步骤 B — 列出并记录备份历史(获取 taken at 时间戳)
db2 “list history backup all for ISIMDB show detail”

记录:备份镜像 taken at 值(用于 restore 的 taken at 参数),及该镜像需要的日志范围(history 里会显示需要的 first and last log)。

步骤 C — 收集归档日志(若配置了 LOGARCHMETH)

  • 确认 LOGARCHMETH1 路径,例如 DISK:/db2/archlogs
    db2 get db cfg for ISIMDB | grep -i LOGARCHMETH1
  • 将归档目录内从(备份镜像所需的 first log)到最新的日志文件复制到安全目录:
    mkdir -p /data/backups/ISIMDB_archlogs
    rsync -av /db2/archlogs/ /data/backups/ISIMDB_archlogs/
  • 如果 LOGARCHMETH 未配置(circular logging),可尝试执行 archive log(若支持):
    db2 “archive log for database ISIMDB into /data/backups/ISIMDB_archlogs”
    注意:archive log 只有在配置了归档方法时才有效。

步骤 D — 验证备份与日志完整性(可选)

  • md5sum / sha256sum 备份镜像与归档日志:
    md5sum /data/backups/ISIMDB/* > /data/backups/ISIMDB/md5sums.txt
    md5sum /data/backups/ISIMDB_archlogs/* > /data/backups/ISIMDB_archlogs/md5sums.txt
  • 使用 db2ckbkp(10.5 提供)检查备份镜像:
    db2ckbkp /data/backups/ISIMDB/ISIMDB.0.db2inst1.* (若可用)

三、传输备份与归档日志到目标 DB2 11.5 主机

  1. 在目标机器创建接收目录,属主为目标实例用户(例如 db2inst1)
    mkdir -p /data/restore/backups/ISIMDB
    mkdir -p /data/restore/archlogs/ISIMDB
    chown -R db2inst1:db2grp /restore/backups/ISIMDB /restore/archlogs/ISIMDB
  2. 传输文件(使用 rsync 或 scp)
    rsync -avz /data/backups/ISIMDB/ db2user@target:/restore/backups/ISIMDB/
    rsync -avz /data/backups/ISIMDB_archlogs/ db2user@target:/restore/archlogs/ISIMDB/
  3. 在目标机上校验 md5(对比源端生成的 md5sums.txt 或重新生成并比对)

四、在目标 DB2 11.5 上恢复(restore + rollforward)
注意:在目标上恢复 10.5 的备份到 11.5,DB2 在恢复过程中可能会进行版本升级(migration),建议先在测试机演练。

步骤 A — 以目标实例用户登录并启动实例
su – db2inst1
db2start
db2level # 确认 11.5

步骤 B — 将备份镜像放到可访问目录(已传输至 /restore/backups/ISIMDB)

  • 列出备份:
    ls -l /restore/backups/ISIMDB

步骤 C — 恢复数据库

  • 如果目标上没有同名数据库:
    db2 “restore db ISIMDB from /restore/backups/ISIMDB taken at into ISIMDB”
  • 如果要覆盖已有数据库(谨慎):
    db2 “restore db ISIMDB from /restore/backups/ISIMDB taken at into ISIMDB replace existing”

如何获取 :
使用 db2 list history backup all for ISIMDB show detail 查看 taken at。或者从备份镜像文件名里获取。

步骤 D — 如果恢复进入 rollforward pending 状态(通常在线备份 include logs 会需要 rollforward),执行 rollforward:

  • 将归档日志放到可访问目录并指定 USING LOG PATH:
    db2 “rollforward db ISIMDB to end of logs and complete using log path (‘/restore/archlogs/ISIMDB’)”
  • 如果要 rollforward 到某时间点(point-in-time):
    db2 “rollforward db ISIMDB to time ‘YYYY-MM-DD-HH.MM.SS’ and complete using log path (‘/restore/archlogs/ISIMDB’)”

注意:

  • 如果备份镜像内已包含从备份开始到备份结束的活动日志,且你只需恢复到备份完成点,通常可以直接 rollforward to end of logs and complete(并指定 log path,若有外部归档)。
  • 若 rollforward 报错找不到某些日志,需将对应日志文件放到指定路径或调整 log path 列表顺序以包含所有需要的日志目录。

步骤 E — 连接并验证数据库
db2 connect to ISIMDB
db2 “select count() from syscat.tables” db2 “list tablespaces show detail” db2 “select count() from schema.important_table” # 应用级检查

五、恢复后工作(post-restore)

  • 更新统计信息(RUNSTATS)、重建索引(如需要)、检查表空间状态与自动增长设置。
    db2 “runstats on table schema.table with distribution and detailed indexes all”
    db2 “reorgchk -d ISIMDB -t all” 或对关键表执行 REORG。
  • 检查用户/权限、外部连接(LDAP)、应用连接池配置。
  • 若使用 HADR/Replication,在切换到新环境前禁用/调整复制配置,或按 HADR 步骤重新配置。

六、常见错误与排查(针对 10.5 -> 11.5 恢复)

1.错误:备份镜像不兼容或 restore 失败

  • 原因:跨平台或备份镜像格式不兼容。解决:如果是跨平台,请改用 db2move/export-import;若是版本或 fix pack 导致的不兼容,参考 IBM 文档或先在中间版本上做升级再备份恢复。

2.错误:rollforward 报缺少日志文件

  • 原因:所需归档日志未传输或 log path 未正确指定。解决:从源端拷贝缺失日志,或检查备份 history 得到需要的日志范围。

3.字符集问题或数据乱码

  • 原因:源与目标数据库字符集不同。解决:在目标创建数据库时尽量指定与源相同编码,或采用 db2move export/import 方式进行字符集转换。

4.权限/用户映射问题

  • 恢复后若缺失用户或权限,请在目标上创建相应操作系统用户或在数据库内创建对应的 DB users / roles。

七、示例 Bash 自动化脚本(源端:生成备份并 rsync 到目标)
下面示例脚本仅作为参考,请在测试环境验证并根据实际路径、用户、目标地址调整。

!/bin/bash

backup_and_send_isimdb.sh

SRC_BACKUP_DIR=/data/backups/ISIMDB
SRC_ARCH_DIR=/data/backups/ISIMDB_archlogs
TARGET_USER=db2user
TARGET_HOST=target.example.com
TARGET_BACKUP_DIR=/restore/backups/ISIMDB
TARGET_ARCH_DIR=/restore/archlogs/ISIMDB
DB=ISIMDB

mkdir -p ${SRC_BACKUP_DIR} ${SRC_ARCH_DIR}
chown db2inst1:db2grp ${SRC_BACKUP_DIR} ${SRC_ARCH_DIR}

执行在线备份并包含日志

sudo -u db2inst1 db2 “backup db ${DB} online to ${SRC_BACKUP_DIR} compress include logs”
if [ $? -ne 0 ]; then
echo “Backup failed” >&2
exit 1
fi

归档日志(仅当配置了归档)

sudo -u db2inst1 db2 “archive log for database ${DB} into ${SRC_ARCH_DIR}”

生成校验和

cd ${SRC_BACKUP_DIR}
md5sum * > md5sums.txt
cd ${SRC_ARCH_DIR}
md5sum * > md5sums.txt

传输到目标

rsync -avz ${SRC_BACKUP_DIR}/ ${TARGET_USER}@${TARGET_HOST}:${TARGET_BACKUP_DIR}/
rsync -avz ${SRC_ARCH_DIR}/ ${TARGET_USER}@${TARGET_HOST}:${TARGET_ARCH_DIR}/

echo “Backup and transfer completed.”

留下回复