DB2 分区数据库环境数据库迁移操作
第一步:在源端 100 (db2dpfa) 执行导出
mkdir -p /db2data/migration && cd /db2data/migration
# 2. 导出表结构 (DDL)
su - db2inst1 -c "db2look -d GXCXXTDB -e -a -l -x -m -o /db2data/migration/gxcxxtdb.sql"
# 3. 导出所有数据
su - db2inst1 -c "cd /db2data/migration && db2move GXCXXTDB export -parallel 4"可能parallel 参数用不了,用不了就去掉
第二步:将数据传输至 101 (db2dpfb)
# 1. 在目标端创建目录
ssh 10.0.1.101 "mkdir -p /db2data/migration"
# 2. 传输所有迁移文件
scp -r /db2data/migration/* 10.0.1.101:/db2data/migration/
# 3. 修正目标端权限
ssh 10.0.1.101 "chown -R db2inst1:db2iadm1 /db2data/migration"第三步:在目标端 101 (db2dpfb) 执行重建与加载
方案 1,不够完善
# 1. 清理之前恢复失败的残留库
su - db2inst1 -c "db2 drop db GXCXXTDB"
# 2. 重新创建全新的分布式数据库
su - db2inst1 -c "db2 \"CREATE DATABASE GXCXXTDB ON /db2data USING CODESET GBK TERRITORY CN PAGESIZE 32768\""
# 3. 运行 DDL 重建表结构
su - db2inst1 -c "db2 connect to GXCXXTDB && db2 -tvf /db2data/migration/gxcxxtdb.sql"
# 4. 并行加载数据(DB2 会根据新架构自动分发数据至 101 和 102)
su - db2inst1 -c "cd /db2data/migration && db2move GXCXXTDB load -parallel 8"方案 2(后面完善的)
# 0. 确保两个节点的容器目录已就绪(在 db2dpfa 和 db2dpfb 上都要执行)
ssh db2inst1@db2dpfa "mkdir -p /db2data/containers && chown db2inst1:db2iadm1 /db2data/containers"
ssh db2inst1@db2dpfb "mkdir -p /db2data/containers && chown db2inst1:db2iadm1 /db2data/containers"
# 1. 清理之前恢复失败的残留库 (在 db2dpfa 上执行即可,DPF 会自动清理所有节点)
su - db2inst1 -c "db2 drop db GXCXXTDB"
# 2. 重新创建全新的分布式数据库 (使用 32K 页大小和 GBK 编码)
su - db2inst1 -c "db2 \"CREATE DATABASE GXCXXTDB ON /db2data USING CODESET GBK TERRITORY CN PAGESIZE 32768\""
# 3. 调整数据库配置参数(日志大小和内存)并使之生效
su - db2inst1 -c "db2 update db cfg for GXCXXTDB using LOGFILSIZ 25600 LOGPRIMARY 50 LOGSECOND 100 UTIL_HEAP_SZ 100000"
su - db2inst1 -c "db2 terminate" # 终止连接,使配置生效
# 4. 修正 DDL SQL 文件中的旧路径为新路径
# 假设旧路径是 /a/b/c/
su - db2inst1 -c "sed -i 's/\/a\/b\/c\//\/db2data\/containers\//g' /db2data/migration/gxcxxtdb.sql"
# 5. 运行 DDL 重建表结构 (可能会触发 0x0800 Backup Pending 状态)
su - db2inst1 -c "db2 connect to GXCXXTDB && db2 -tvf /db2data/migration/gxcxxtdb.sql"
# 6. 消除 Backup Pending 状态
su - db2inst1 -c "db2 backup db GXCXXTDB to /dev/null"
# 7. 并行加载数据(DB2 会根据新架构自动分发数据至 101 和 102)
su - db2inst1 -c "cd /db2data/migration && db2move GXCXXTDB load -lo identityoverride -parallel 4"
# 8. 解除表的 Check Pending 状态
su - db2inst1 -c "db2 -x \"select 'set integrity for '||trim(tabschema)||'.'||trim(tabname)||' immediate checked;' from syscat.tables where status='C'\" > /db2data/migration/check.sql"
su - db2inst1 -c "db2 -tvf /db2data/migration/check.sql"
-----
# 8.1 如果上面的不行就将所有表名拼接到一条 SET INTEGRITY 命令中,DB2 会自动处理它们之间的依赖顺序:
su - db2inst1 -c "db2 -x \"select trim(tabschema)||'.'||trim(tabname) from syscat.tables where status='C'\" | tr '\n' ',' | sed 's/,$//' > /tmp/table_list.txt"
# 构造并执行单条语句
su - db2inst1 -c "db2 \"set integrity for $(cat /tmp/table_list.txt) immediate checked\""
# 9. 收集统计信息以优化性能 (使用之前导出的 -m 脚本,或者全量 RUNSTATS)
# su - db2inst1 -c "db2 -tvf /db2data/migration/stats.sql"
su - db2inst1 -c "db2_all 'db2 connect to GXCXXTDB && db2 runstats on table <schema>.<tablename> and indexes all'" # 手动指定重要大表
load -p 4 启用多线程导入