为什么要迁移?


数据库迁移可以看作一个特殊的软件开发项目,与其他开发项目不同的是这个项目的需求是确定的,技术障碍较低,主要工作是代码编写和测试。另一方面,数据库迁移项目的成功也主要依赖于客户与开发商的积极配合和有序组织。因此,为了确保项目成功,数据库的迁移项目需要详细的可行性评估、风险评估、工作量评估与项目实施规划等。数据库的迁移项目一般包括以下一些步骤:

  • 培训:对开发人员培训 DB2 基础知识及编程方法。
  • 评估:通过对旧系统程序架构、典型模块代码进行分析,在可行性、工作量、迁移方法等方面对整个迁移项目进行评估。评估工作可以以 POC (Proof Of Concept)测试的形式进行。
  • 数据库结构迁移:数据库基础结构的迁移。
  • 编写迁移模板:对系统内各个迁移关键点进行总结,开发人员遵循迁移模板进行批量的程序迁移。
  • 程序迁移:迁移工作中工作量最大的部分;
  • 测试:包括功能测试和性能测试;
  • 数据迁移:包括一些初始化数据的迁移,如果是对已运行系统的改造,则还要迁移业务数据。

IBM 公司为数据库迁移项目的成功实施,提供了一整套完整的方法论和有效的辅助工具,能够确保数据库的迁移工作在规范的流程控制中,按部就班地实施执行,最终确保迁移后的系统能够稳定、高效地运行在 DB2 数据库平台之上。


迁移主要工作及工具

Oracle 迁移通常遵循一个 5 步骤流程:迁移评估数据库对象迁移应用程序迁移解决方案部署技术转移 和 DB2 增强。我们主要关注前三个步骤。

企业数据库通常数据量都比较大,结构也比较复杂,如果完全通过手工来完成,那是一个不可想象的大工程。IBM 提供了一些免费的,但是非常强大的迁移辅助工具。下面我们就介绍其中的三个:

1. 迁移工具 IBM Migration Toolkit 介绍

IBM 为 DB2 的迁移提供一个简单易用的数据和应用移植图形化集成工具 —— IBM Migration Toolkit(MTK),其用来将源数据库管理系统(例如,Informix Dynamic Server、Informix Extended Parallel Server(XPS)、Microsoft SQL Server、Oracle 和 Sybase Enterprise)中的数据以及查询和过程语言迁移到 DB2 数据库产品中。

MTK 可运行于 AIX、Linux、Solaris 和 Windows 操作系统上。

2. IBM Data Movement Tool 介绍

利用 DB2 兼容特性和 IBM 提供的免费数据迁移工具 Data Movement Tool,快速地将现有的 Oracle 数据库对象转换到 DB2 通用数据库。同时对应用中使用到的数据库访问语言以及接口进行转换,最终实现整个应用系统的完整迁移。

3. IBM Optim Development Studio 介绍

IBM Optim Development Studio,它为 Oracle、DB2 和 Informix 提供一个集成的数据库开发环境。Optim Development Studio 在开发和测试 SQL 和 XQuery 查询、存储过程、Web 服务和 Java 数据访问层方面将生产力提高了 50%,而且允许在不同或者相同的数据服务器中的数据对象包、存储过程、表、用户自定义函数、用户自定义类型、视图、模式等的复制粘贴。


1. 计划和评估

第一步是评估应用环境和应用程序,识别潜在的障碍。如果您正在寻找关于您的 Oracle 数据库和应用程序将在多大程度上适应 DB2 的硬数据,免费的 IBM Migration Enablement Evaluation Tool (MEET)分析 Oracle 数据库对象和过程,迅速识别使用 DB2 9.7 中不支持的那些特性的对象和过程。该工具提供一个 HTML 报告,标识不支持的代码,列示细节和源代码行号,并提供汇总统计数据。

IBM MEET 扫描并识别无需修改即可在 DB2 上运行的 Oracle 数据库对象和语句,注明任何可能的不兼容性。

评估您的基础架构和数据库要求将帮助您理解您的迁移项目的范围。在后续步骤中,我们将检查一些已经完成迁移的组织报告的部分最常见的挑战。


2. 数据库对象迁移

利用 DB2 兼容特性迁移 Oracle 应用首先创建兼容模式 DB2 数据库。在 DB2 V9.7 上启用 Oracle 应用程序时,实例和数据库必须处于兼容模式。还建议调整舍入行为以匹配 Oracle。通过把重新验证语义(revalidation semantics)设置为 deferred_force,可以不按依赖次序部署对象。

在 UNIX 系统上:
$ db2set DB2_COMPATIBILITY_VECTOR=ORA
$ db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES
$ db2stop force
$ db2start
$ db2 "create db testdb automatic storage yes on /db2data1, /db2data2,/db2data3 DBPATH ON /db2system PAGESIZE 32 K" $ db2 update db cfg for testdb using auto_reval deferred_enforce
$ db2 update db cfg for testdb using decflt_rounding round_half_up

在 Windows 系统上:
C:\> db2set DB2_COMPATIBILITY_VECTOR=ORA C:\> db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES C:\> db2stop force C:\> db2start C:\> db2 "create db testdb automatic storage yes on C:,D: DBPATH ON E: PAGESIZE 32 K" C:\> db2 update db cfg for testdb using auto_reval deferred_enforce C:\> db2 update db cfg for testdb using decflt_rounding round_half_up

下一步是将 Oracle 数据库对象和数据迁移到 DB2。DB2 9.7 提供的原生 Oracle PL/SQL 和 Oracle SQL 支持极大地简化了这一过程,另一个免费资源 IBM Data Movement Tool 可用也起到了这种作用。该工具将一些 Oracle 对象 — 包括表、包、甚至整个架构 — 复制到 DB2。

要使用 IBM Data Movement Tool,启动该工具并同时连接到您的 Oracle 和 DB2 数据库。一旦完全连接上,您就可以只提取 Data Definition Language (DDL),或者同时提取 DDL 和数据。您可能会想使用该工具的交互式部署模式,该模式显示一个包含从 Oracle 数据库提取的所有对象的导航树。当该工具将对象复制到 DB2 时,它记录复制进度。如果一个对象没有正确部署,该工具在导航树中高亮显示那个对象;单击该对象,这个工具将显示 DDL 和 DB2 遇到的错误,以便修复定义并重新部署。使用这个工具,数据迁移流程相对直观和自动。Data Movement Tool对数据库迁移工作的支持,包括:提取对象和数据、部署对象和装载数据,通过使用 Data Movement Tool 中的以下特性,可以减少停机时间、消除人为错误,以及降低人工和与传统数据库迁移相关联的其它资源消耗:

  • 通过使用直接源数据库访问(JDBC™/ODBC)或导入的 SQL 脚本,从源数据库中抽取数据库元数据。
  • 使用 MEET 工具。
  • 检查 DB2 兼容特性不能支持的 Oracle 特性,这些对象包括存储过程、触发器、包、表、视图、索引和序列,并提供修改建议。
  • 使用 Data Movement Tool部署对象,包括存储过程、触发器、包、表、视图、索引和序列。
  • 使用 Data Movement Tool抽取数据。
  • 使用 Data Movement Tool装载数据。

3. 应用程序迁移

一般而言,DB2 9.7 极大地减少了手动修改应用程序代码的需求。但是,尽管很少不兼容的地方仍然存在,有几个地方可能需要您的干预,有最简单的,也有复杂一些的。

PHP/Perl

将 PHP 或 Perl 应用程序从 Oracle 迁移到 DB2 只涉及一个更改:将库调用从 Oracle 库更改为 DB2 库。修改库调用应该只需要使用一个文本编辑器在代码中进行一个调用名全局替换。PHP 中的 SQL 则保持不变。

Java

类似地,转换 Java 代码也比较直观。应用程序编程接口(API)本身定义良好并独立于数据库 — 数据库连接逻辑封装在标准 J2EE DataSource 对象中。特定于 Oracle 或 DB2 的词汇,比如用户名或数据库名,在应用程序中以声明方式配置。

转换代码只需要将 Java 源代码更改为适当的 API 驱动程序(JDBC 或 SQLJ)、数据库连接字符串、以及任何不兼容的 SQL 语句。DB2 9.7 还支持使用 Hibernate(一个针对 Java 的开源持久性和查询服务),现在,将其用于 DB2 与将其用于 Oracle 一样容易。

Oracle Calling Interface

Oracle Calling Interface (OCI) 是 C/C++ 开发人员用于与 Oracle 数据库交互的众多编程接口之一。DB2 9.7 Fix Pack 1 引入了 DB2 Call Interface (DB2CI),它提供了对 OCI 的兼容性 — 两个环境都使用一个开发人员熟悉的接口。

Oracle Forms

Oracle Forms 是一个遗留软件产品,用于为数据库创建数据输入系统。有些组织拥有数百个 Oracle Forms 屏幕,它们构成一个应用程序的部分或全部。

IBM 与 Realease 合作提供 Oracle Forms to Java 转换功能。Realease 提供将 Oracle Forms 转换为 Java 的工具支持,保留了原始 GUI 的观感。在很多情况下,转换工作可以在一周内完成、而不是几个月。

Triggers

DB2(还)不支持从一个 BEFORE 触发器内部执行对多个表的更新。在多数情况下,可以使用 AFTER 触发器来执行这些操作。另外,DB2 还不支持合并触发器动作。因此,如果您拥有一个 PL/SQL 多动作触发器,则需要将其复制到单独的 DB2 SQL PL 触发器中,对谓词使用一个布尔变量。

分区处理

DB2 可以配置为以几种方法来组织数据,包括表分区、数据库分区、多维集群化、或者这些方案的组合。如果您使用一种 Oracle 分区方式,则可能需要更新您的代码来处理语法差别。

4. 迁移工作量评估

数据库迁移项目的评估工作是通过对旧系统程序架构、典型模块代码进行分析,在可行性、工作量、迁移方法等方面对整个迁移项目进行评估。总体而言,评估一般包括定性评估与定量评估两大方面。

定性评估

一般又包括系统与项目两个方面的内容,其中:

  • 与系统相关的评估工作内容包括:
    • 确定系统类型(OLTP,OLAP/DSS)
    • 应用开发语言的种类(Java,C/C++,VB,C#,…)
    • 客户端操作系统及版本
    • 服务端操作系统及版本
    • 数据库服务器的典型配置
  • 与项目相关的评估工作包括:
    • 项目范围的确定
    • 所需技术人员的确定
    • 对迁移所涉及到的产品和应用的了解程度
    • 技术人员的迁移经验
    • 需要哪些培训,如何进行
    • 能否及时获取到迁移需要的硬件

定量评估

迁移项目的工作量评估主要从以下一些方面考虑:

代码量:这是衡量系统规模最重要的指标,也是评估工作量的重要参考要素。

程序架构:不同的程序架构迁移的效率也不尽相同,那些把数据库操作封装起来的程序只须迁移少量的代码就可,反之则程序各处都要处理。

SQL 扩展和Oracle函数的使用:DB2 严格遵循SQL标准,Oracle则对标准SQL有一些扩展,另外Oracle中有一些DB2里没有的函数,如果代码中对这些Oracle特有的扩展使用很多则迁移工作量加大,反之则较容易。

一般情况下,可以用下面的公式计算迁移工作量:

迁移工作量=前期准备时间 + 代码迁移时间 + 测试时间

前期准备工作与系统规模关系不大,一般在2-3周,包括评估时间、培训时间等。

代码迁移的时间要考虑代码量和工作效率两个要素。评估编码效率一般以“代码行/人天”作为衡量指标,由于各个项目难易程度不同,编码效率在500行/人天-1500行/人天之间。为了保证系统的质量,测试也是迁移项目中重要的一步,一般测试需要涵盖单模块,集成式的测试以及性能调优方面。

5. 迁移实施计划

和一个软件开发的项目的计划一样,数据库迁移项目也需要经过构建团队、确定基线、制定进度计划、项目控制、文档生成等阶段。具体来说,按项目推进的先后顺序,包括以下几个步骤:

培训及环境准备

DB2管理/开发培训:该阶段的目标为使参加当前迁移项目的开发人员了解DB2基本的知识以及开发方法,了解项目迁移中主要涉及的技术问题,同时了解IBM工具的基本使用方法。

安装配置开发/迁移环境:本阶段涉及操作系统、相关开发工具、以及DB2的安装配置等工作。

项目规划与范围确定

典型模块迁移项目范围确定:本阶段需要确定一个在本项目中具有典型意义的模块,作为下一阶段典型模块中迁移的目标。本典型模块的迁移过程与成果将成为未来全系统迁移的样例与模板。

源代码准备:本阶段需要收集全系统迁移所需的全部代码,是项目工作的目标。

典型模块迁移

数据结构迁移:本阶段将完成数据库底层数据结构的迁移。

数据迁移:本阶段将完成数据库数据的迁移,作为下一阶段测试与调试的数据基础。

用户,组及权限迁移:本阶段将考察原有系统的用户权限机制,并制定相应的解决方案。

后台程序迁移:本阶段将完成选定的典型模块的迁移,作为全系统迁移工作的模板,同时使参与本项目迁移的开发人员了解迁移工作的基本实现方法,并总结迁移过程中的技术点。

前台应用迁移:本阶段将完成一个典型的前端应用的迁移工作,因应用系统的架构不同而定。

典型模块迁移总结

将迁移技术要点记录归档 :本阶段将总结典型模块迁移过程中的迁移功能点以及技术要点,作为全系统迁移所根据的初步模板,该文档还应在全系统迁移过程中不断丰富与添加,作为所有参与迁移项目技术人员进行迁移的技术规范。

全系统迁移

后台代码迁移:本阶段将参考典型模块迁移过程中的规范,完成全部后台代码的迁移,同时不断丰富迁移功能点总结文档。

前台代码迁移:本阶段将参考典型模块迁移过程中的规范,完成全部前台代码的迁移,同时不断丰富迁移功能点总结文档。

系统测试

功能测试:本阶段将完成代码迁移后功能的测试。

联调,集成测试及问题诊断:本阶段将在功能测试结束后,考虑性能、高可用性等方面的需求,进行系统进一步调优与遗留问题的解决。

系统交付与上线