如果是在单分区数据库环境中,那么 DB2 中的数据库迁移可能会是一项简单的任务。但是,如果是在包含数 TB 的有关 Database Partition Feature (DPF) 数据的大型数据仓库环境中,则需要制定其他的一些决策。本文主要探讨 DB2 中的可用数据迁移选项,并深入探讨数据模块从 BCU D5100 迁移到 ISAS 5600 R2 的过程。
回页首
在规划迁移活动之前,DBA 和数据库架构师需要了解源服务器和目标服务器配置。图 1 显示了基于 Intel 的源 D5100 v2 系统的 DB2 元素:
图 1. D5100 Balanced Warehouse 节点配置
图 2 显示了基于 Intel 的目标 ISAS 5600 R2 系统的 DB2 元素:
图 2. 5600 R2 IBM Smart Analytics System 节点配置
从数据库管理和迁移角度来看,这两个系统之间的主要区别是数据库分区的数量。表 1 列出了两个系统之间的数据库分区组属性,以及迁移后的更改需求:
表 1. 数据库分区组属性
数据库分区组 | BCU D5100 分发 | ISAS 5600 分发 | 迁移后 |
---|---|---|---|
IBMDEFAULTGROUP | 41 (NODE0000-NODE0040) | 65 (NODE0000-NODE0064) | 需要分区组扩展 |
IBMCATGROUP | 1 (NODE0000) | 1 (NODE0000) | 不需要对系统目录分区组进行任何更改 |
IBMTEMPGROUP | 41 (NODE0000-NODE0040) | 65 (NODE0000-NODE0064) | 不需要分区组扩展,但需要添加容器路径 |
DWECONTROLGROUP | 1 (NODE0000) | 1 (NODE0000) | 没有任何更改 |
SDPG | 1 (NODE0000) | 1 (NODE0000) | 没有任何更改 |
PDPG | 41 (NODE0000-NODE0040) | 65 (NODE0000-NODE0064) | 需要分区组扩展和容器路径创建 |
回页首
当任务存在最小的业务影响,比如最小计划内停机、零数据完整性问题以及优化资源成本时,组织需要考虑迁移计划的有效性和稳健性。图 3 描述了具体流程以及相关的数据库成功迁移的主要步骤:
图 3. 有效的数据库迁移战略
分析 是数据库迁移的第一阶段,这个阶段通常包含用来了解源系统和目标系统的以下组件:
表 2. 同构数据库迁移选项
数量 | 迁移选项 | Pros | Cons |
---|---|---|---|
1 | 数据库恢复 | 同构系统之间的已知迁移战略 | 此处的挑战是源系统和目标系统之间的逻辑分区数量的区别。源 BCU 系统有 41 个数据库分区,目标 ISAS 系统有 65 个数据库分区。因此,这不仅仅是直接的数据库恢复。 |
2 | IBM InfoSphereOptim High Performance Unload (HPU) | 通过 DBA 最小限度的干预来实现高速自动重新分区和加载 | 您需要购买源系统和目标系统的 HPU 许可。 |
3 | 内部数据迁移脚本 | 将数据从源系统迁移到目标系统的简单方法 | 此处的挑战是 DBA 需要全面了解系统和业务需求。 |
在 准备 阶段中,您开始创建迁移计划文档和迁移脚本,并准备系统集成图来执行应用程序接口迁移后作业测试。
在 验证 阶段中,您会在 UAT 环境中测试端到端流程,并记录每一个步骤的执行时间和成功/失败消息。一旦出现任何故障,就会记录下该流程,以便进行修复。这一阶段中的主要元素是根据验收标准交叉验证每一个步骤的结果。
在 实现 阶段中,通过减少接口和处理作业,冻结了源服务器应用程序活动。执行迁移;在成功完成迁移后,根据验收标准检查所有接口。
作为 FMCG 领域的市场领导者,Reckitt Benckiser 想要使系统中断降至最低(也就是说,报告功能少于 4 个小时,数据加载功能少于 20 个小时)。他们决定使用选项 1 来执行迁移,以满足业务需求。下一节中将会更详细地讨论相关迁移步骤。
回页首
考虑到所有迁移战略阶段中的步骤,表 3 深入探讨了数据库从 BCU 恢复到 ISAS 的数据库迁移选项,成功消除了系统之间的节点差异:
表 3. 迁移过程
步骤 | 系统 | 任务描述 | 命令 |
---|---|---|---|
1 | BCU | 停止 ETL 和报告作业 | Non DB2 commands |
2 | BCU | 停用 db2 实例 | QUIESCE INSTANCE bculinux IMMEDIATE |
3 | BCU | 停用数据库 | DEACTIVATE DB BCUDB |
4 | BCU | 创建从管理节点导出目录到所有数据节点的软链接 | $HOME/db2backup/ |
5 | BCU | 将数据库离线备份到本地磁盘 | 目录分区: db2_all "/"<<+0< db2 BACKUP DATABASE BCUDB TO $HOME/db2backup/NODE##/backup COMPRESS WITHOUT PROMPTING" 非并行目录分区: db2_all "||/"<<-0< db2 BACKUP DATABASE BCUDB TO $HOME/db2backup/NODE##/backup COMPRESS WITHOUT PROMPTING" |
6 | BCU | 验证数据库备份镜像 | 您可以使用以下脚本来并行触发所有分区上的检查备份命令 #!/bin/ksh 验证签出文件并确保所有备份都正常。 |
7 | BCU | 将备份镜像复制到 ISAS | 使用脚本中的 scp 或 sftp 命令将数据库备份镜像从源服务器复制到目标服务器 |
8 | BCU |
| UNQUIESCE INSTANCE 命令以及与 Cognos 相关的命令 |
9 | ISAS | 禁用高可用性组件 TSA |
|
10 | ISAS | 备份目标系统中所有更改前的配置:
|
|
11 | ISAS | 终止现有数据库 shell 并停止实例 | DROP DATABASE BCUDB; db2stop |
12 | ISAS | 将数据库分区的数量减少到 41 并启动实例 |
|
13 | ISAS | 应用恢复前配置更改 | 将数据库管理器配置参数 DIAGLEVEL 更新为 4,并将 HEALTH_MON 更新为 OFF。 |
14 | ISAS | 先恢复数据库分区 0,然后再将剩余的 40 个数据库分区 NODE0001 到 NODE0040 进行恢复 | 目录分区: db2_all "/"<<+0< db2 RESTORE DATABASE BCUDB FROM $HOME/db2backup/NODE##/backup WITHOUT ROLLING FORWARD WITHOUT PROMPTING" 非并行目录分区: db2_all "||/"<<-0< db2 RESTORE DATABASE BCUDB FROM $HOME/db2backup/NODE##/backup WITHOUT ROLLING FORWARD WITHOUT PROMPTING" |
15 | ISAS | 激活数据库并进行初步检查 | ACTIVATE DATABASE BCUDB; 检查所有表空间状态,表数据可达性 |
16 | ISAS | 识别物化查询表 (Materialized Query Tables, MQT),提取 DDL,并终止所有操作 |
|
17 | ISAS |
|
|
18 | ISAS | 删除恢复历史文件并停用数据库 | PRUNE HISTORY <date>;DEACTIVATE DB BCUDB; |
19 | ISAS | 将新数据库分区从 41 增加到 64 个 |
08/06/2013 21:04:26 8 0 SQL1489I The add database partition server operation was successful. The new database partition server "41" is active SQL1489I The add database partition server operation was successful. The new database partition server "41" is active. 备注:建议在每台新服务器上添加第一个分区后进行完整的 db2stop 和 db2start,在本例中是在添加 41、49 和 57 个分区之后执行此操作的。 |
20 | ISAS | 通过检查 db2nodes.cfg 文件确定已经将新数据库分区添加到实例中 | 您现在应该可以在 db2nodes.cfg 节点配置文件中看到节点 41 至 64 0 isasadm001 0 isasadm001 1 isasdata001 1 isasdata001 2 isasdata001 2 isasdata001 ....... ....... 63 isasdata008 6 isasdata008 64 isasdata008 7 isasdata008 |
21 | ISAS | 在新添加的节点上添加临时表空间容器 | ALTER TABLESPACE "DB2TMP" ADD (FILE '/db2fs/bculinux/NODE00 $N/BCUDB/temp/db2tmp_001' 80000) ON DBPARTITIONNUMS (41 to 64) AUTORESIZE NO; |
22 | ISAS | 改变 IBMDEFAULTGROUP 和 PDPG 数据库分区组 |
SQL1759W Redistribute database partition group is required to change database partitioning for objects in database partition group "PDPG" to include some added database partitions or exclude some dropped database partitions. SQLSTATE=01618 |
23 | ISAS | 向扩展的 PDPG 分区添加容器路径 | ALTER TABLESPACE "TS_LARGE_DATA" ADD (FILE '/db2fs/bculinux/NODE00 $N/BCUDB/data/ts_large_data' 90000) ON DBPARTITIONNUMS (41 to 65) AUTORESIZE YES; |
24 | ISAS | 将数据库 BCUDB 离线备份到本地磁盘 | 这一步骤对于保存步骤 24 之前完成的工作很有必要。这些备份镜像可用于从数据重分配期间发生的任何故障中恢复,而且可以节约很多时间 |
25 | ISAS | 数据再分配的前提条件 |
|
26 | ISAS | 在扩展的数据库分区上重新分配分区组 IBMDEFAULTGROUP 和 PDPG 的数据 |
LIST UTILITIES SHOW DETAIL 轻松地监控数据重新分配。 |
27 | ISAS | 将数据库 BCUDB 离线备份到本地磁盘 | 该备份只是一个占位符,而且可以忽略。但是建议采用最新重新分配数据库备份的副本。 |
28 | ISAS | 执行重新分配后任务 |
|
29 | ISAS | 将数据库第一次备份到 TSM | BACKUP DATABASE BCUDB ON ALL DBPARTITIONNUMS USE TSM WITHOUT PROMPTING; 如果无法促进所需的 TSM 挂载点,则使用备份命令中的 DBPARTITIONNUMS (db-partition-number [to db-partition-number], …) 子句来备份数据库(以数据块的方式)。 |
30 | ISAS | 启用高可用性组件 TSA 并连接应用程序 |
|
回页首
如果您尝试将数据库从数值较高的数据库分区源系统迁移到数值较低的数据库分区目标系统,则需要在步骤 12 中向目标系统添加额外的分区数量,并在步骤 20 中使用以下命令组成功恢复数据库后终止分区:
REDISTRIBUTE DATABASE PARTITION GROUP PDPG UNIFORM DROP DBPARTITIONNUM (40);
FORCE APPPLICATIONS ALL;
export DB2NODE=40;
TERMINATE; DROP DBPARTITIONNUM VERIFY;
SQL6035W
警告消息。在这种情况下,db2diag.log 会让您了解是什么阻止了 drop dbpartitionnum 命令成功完成。 export DB2NODE=
TERMINATE;STOP DATABASE MANAGER DROP DBPARTITIONNUM 40;
您还可以执行将源数据库分区数量减少到目标服务器数量的流程;然后在目标系统上进行备份和还原。但请记住,这会导致比之前所述流程更多的中断。
回页首
本文介绍了如何使用 DB2 的数据库恢复技术和 DPF 横向扩展技术将数 TB 的数据库从 BCU 迁移到 ISAS,以满足业务需求。您现在应该能够调整这些步骤来满足您的数据库迁移需求,而不用考虑节点数量和配置。
回页首
特别感谢帮助我完成本文的一些优秀人物: