KingbaseES异构数据库移植指南.pdf
KingbaseES 异构数据库移植指南 金仓数据库管理系统 KingbaseES 文档版本:V9(V009R001C001B0024) 发布日期:2023 年 10 月 12 日 北京人大金仓信息技术股份有限公司 目 目 录 录 第 1 章 前言 1 1.1 适用读者 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 相关文档 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.3 术语 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.4 手册约定 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 第 2 章 概述 3 第 3 章 KingbaseES 移植能力支撑体系 5 3.1 3.2 3.3 迁移工具概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.1.1 数据迁移工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.1.2 调试工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.1.3 系统割接后的数据同步工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.1.4 系统割接后系统备份工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 KingbaseES 应用能力概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.2.1 支持的模式对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.2.2 SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.2.3 PL/SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.2.4 客户端编程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.2.5 第三方产品和组件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.2.6 高可用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.2.7 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.2.8 相关技术资源 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 KingbaseES 支撑系统割接能力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.3.1 应用业务割接时间短 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.3.2 割接后需要双轨运行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 第 4 章 应用迁移流程 18 4.1 迁移方案设计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 4.2 迁移评估 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.2.1 确定移植目标 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.2.2 评估移植任务 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 I 4.2.3 4.3 目 录 组建移植团队 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 迁移准备 4.3.1 4.3.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 准备迁移环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.3.1.1 部署目的数据库服务器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.3.1.2 获取并安装必要的软件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 迁移数据库、用户 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.4 数据迁移 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.5 应用迁移 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 API 方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4.5.1.1 ODBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4.5.1.1.1 Windows 数据源配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4.5.1.1.2 Linux 数据源配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4.5.1.2 JDBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 4.5.1.3 Activiti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 4.5.1.4 Flyway . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.5.1.5 Liquibase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.5.1.6 Hibernate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.5.1.7 MyBatis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.5.1.8 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.5.1.9 PERL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4.5.1.10 Golang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4.5.1.11 Nodejs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.5.1.12 ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.5.1.13 EF6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.5.1.14 EFcore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.5.1.15 QT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.5.1.16 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.5.2 移植 Oracle Pro*C 应用程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 4.5.3 移植 Oracle OCI 应用程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 4.5.4 修改应用框架 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 测试与调试移植系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 4.6.1 功能测试和排错 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 4.6.2 性能测试和调优 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.6.3 高可用方案测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.6.4 系统管理测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.6.5 可以使用测试工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.5.1 4.6 4.7 系统割接 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.7.1 割接评估 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.7.2 割接准备 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.7.3 割接操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.7.4 回退机制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.7.5 割接后观察 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 II 目 录 版权声明 40 服务周期承诺 41 III 第 1 章 前言 1 第 章 前言 本文档描述了异构数据库向 KingbaseES 迁移的方法。 前言部分包含以下主题: • 适用读者 • 相关文档 • 术语 • 手册约定 1.1 适用读者 KingbaseES 异构数据库移植指南面向所有使用 KingbaseES 的用户,主要是数据库管理员和应用程序开发人员。 1.2 相关文档 无 1.3 术语 无 1.4 手册约定 本文档中可能出现“注意、提示、警告、另请参阅”等标志,它们所代表的含义如下: 1 第 1 章 前言 注意: 用于突出重要/关键信息、最佳实践等。 提示: 用于突出小窍门、捷径等。 警告: 用于传递设备或环境安全警示信息,若不避免,可能会导致设备损坏、数据丢失、设备性能降低或其 它不可预知的结果。 另请参阅: 用于突出参考、参阅等。 以下程序代码书写约定适用于本文档: 符号 说明 [] 表示包含一个或多个可选项。不需要输入中括号本身。 {} 表示包含两个以上(含两个)的候选,必须在其中选取一个。不需要输入花括号本身。 | 分割中括号或者花括号中的两个或两个以上选项。不需要输入“|”本身。 ... 表示其之前的元素可以被重复。 斜体 表示占位符或者需要提供特定值的变量。 大写 表示系统提供的元素,以便与用户定义的元素相互区分。除出现在方括号中的元素外,应当按 照顺序逐字输入。当然,部分元素在系统中是大小写不敏感的,因此用户可以根据系统说明以 小写形式输入。 小写 表示由用户提供的元素。 2 第 2 章 概述 2 第 章 概述 将一个应用系统从一个数据库(以下简称源数据库)迁移到另一个数据库(以下简称目标数据库)时,需要考虑 如下因素: 1. 应用迁移的周期/成本 a. 目标数据库对源数据库的兼容度越高,迁移周期越小;本文第 2 部分描述的内容和对源数据库的支撑程度越 高,迁移越快。 b. 迁移过程中,是否有工具支撑加速迁移过程; c. 迁移完成后,是否有工具支撑数据对比,减少应用测试过程。目标数据库是否有丰富的移植辅助工具。 2. 目标数据库产品是否有成熟的迁移服务团队 目标数据库的服务支持团队是否成熟,管理是否完善,是否有完善的应用移植方法。 3. 目标数据库是否满足应用的使用需求 考察目标数据库的产品能力是否可以替换源数据库,主要包括如下几个方面: a. 使用的源数据库的对象,目标数据库是否可以支持 b. 使用的源数据库的访问接口(SQL/PLSQL),目标数据库是否可以支持 c. 使用的开发接口和开发框架,目标数据库是否支持 d. 使用的第三方产品或者组件,目标数据库是否支持 e. 目标数据库是否支持源系统的高可用方案 f. 目标数据库是否可以满足应用系统的性能需要,若采用国产 CPU,更需要评估目标数据库在指定国 产 CPU 上的性能表现;有可能需要优化应用程序的处理,完成性能的联合解决方案,那么目标数据 库是否提供性能分析和调优手段。 4. 系统割接的需求目标数据库是否可以满足 主要包含: a. 应用从源数据库切换到目标数据库,业务是否可以停止,若是不可以停止,目标数据库是否可以支 持数据实时同步; b. 移植完成后,是否需要和源数据库双轨运行,目标数据库是否有方案可以支撑 3 第 2 章 概述 本文档就上面的问题,介绍 KingbaseES 产品的应用迁移支撑体系,以及应用迁移的过程。 4 第 3 章 KINGBASEES 移植能力支撑体系 3 第 章 KingbaseES 移植能力支撑体系 本章节包含以下内容: • 迁移工具概述 • KingbaseES 应用能力概述 • KingbaseES 支撑系统割接能力 迁移工具概述 3.1 KingbaseES 支持应用系统的离线迁移和在线迁移。 离线迁移是指,应用系统在离线状态下,源数据库服务器提供服务时,通过 KingbaseES 的迁移工具将源数据库 的对象定义和数据搬迁到目的数据库。 在线迁移是指,应用系统处于在线状态下,源数据库服务器持续提供服务时,通过 KingbaseES 的迁移工具完成 对象和数据的搬迁。 3.1.1 数据迁移工具 KingbaseES 提供了 KDTS 和 KFS 2 个工具完成迁移数据任务。KDTS 是 KingbaseES 提供的工具,可以用于 离线迁移,并完成数据库中所有对象定义的迁移和数据的迁移。KFS 是一个单独的同步工具,可以应用于数据的同 步,主要用于表结构和表数据的初始搬迁,以及初始搬迁之后数据的实时同步。KDTS 和 KFS 一起部署,可以完成 一个大型系统的在线迁移。 迁移能力 KDTS KFS 是否支持迁移存储过程等对象定义的迁移 支持所有对象定义的迁移 支持表结构和主键的定义的迁移 同步一次,还是持续同步 一次同步 持续同步 见续表 5 第 3 章 KINGBASEES 移植能力支撑体系 表 3.1.1 – 续表 迁移能力 KDTS KFS 是否需要初始状态同步 不需要 需要 跨平台 支持 支持 迁移部分表 支持 支持 迁移一个表的部分数据 支持 支持 断点续传 不支持 支持 KDTS 的核心任务是将异构数据库中的数据迁移到 KingbaseES。它完整支持了数据迁移过程中需要的各种特 性,包括自定义数据类型映射,并行迁移数据,迁移失败后统计,支持二次迁移,迁移结束后支持源和目的数据库的 数据对比。这个产品是迁移任务中必须使用的工具。 人大金仓提供异构数据库的同步产品 KFS。进行数据同步的第一步是完成初始数据同步,之后将利用日志分析 技术增量同步数据。这个产品可以用于异构数据库之间的数据同步,数据集中,包括异构数据库之间同步部分数据, 同步策略灵活,支持断点续传。 3.1.2 调试工具 KingbaseES 提供了如下工具,用于迁移过程中的调试工作: • 命令行 SQL 交互工具 ksql • 图形界面 SQL 交互工具 Kstudio 比较项 ksql Kstudio 执行 SQL 支持 支持 直接编辑数据 需要写 SQL 语句 支持,通过图形界面直接编辑 执行存储过程 支持 支持 查看 SQL 执行计划 支持 支持 调试 plsql 支持 支持 ksql 是命令行的 SQL 交互工具,轻巧速度快。 Kstudio 工具时图形界面的 SQL 交互工具,易用性较好,同时包含了 plsql 的调试功能,以及一些监控和性能分 析工具。 6 第 3 章 KINGBASEES 移植能力支撑体系 3.1.3 系统割接后的数据同步工具 KingbaseES 提供了 2 个数据同步工具: • KingbaseES 内置的物理同步功能 • 异构数据库同步 KFS 产品 比较项 KingbaseES 物理同步功能 KFS 异构数据源 不支持 支持 跨 CPU 支持 支持 断点续传 支持 支持 同步部分对象 不支持 支持 同步所有操作 支持 不支持 KingbaseES 内置物理同步,主要是针对 2 个 KingbaseES 产品之间的同步。同步的单位是 2 个 data,不支持同 步部分对象。物理同步可以同步所有用户操作,可以执行断点续传,支持重放。 KFS 产品是为了解决异构数据源之间的同步,或者同步数据源之间部分对象的同步,同步粒度更加灵活。 若应用系统割接后,用户需要双轨运行,可以视情况选择物理同步或者 KFS 产品。 3.1.4 系统割接后系统备份工具 KingbaseES 提供了 2 个备份工具: • 逻辑备份 sys_dump • 物理备份 sys_rman 比较项 sys_dump sys_rman 异构数据源 不支持 不支持 支持增量 不支持 支持 支持根据日志恢复到指定时间点 不支持 支持 备份单个表 支持 不支持 可以不备份指定表 支持 不支持 逻辑备份 sys_dump,支持备份对象在某一个执行状态中的定义和数据。不支持增量备份,备份对象选择灵活, 7 第 3 章 KINGBASEES 移植能力支撑体系 可以支持单个表,单个函数等的备份。逻辑备份无法和 redo 日志一起使用。 物理备份 sys_rman 备份整个实例的数据,不支持备份单个数据库或者单个表,但是支持增量备份。 3.2 KingbaseES 应用能力概述 通常,异构数据库移植的工作量繁重,这些工作量主要来源于两方面: 1. 应用开发移植需求:在数据对象类型、SQL 语言、PL/SQL 语言、客户端应用编程接口和开发框架等诸多方面 对两个数据库所进行的、大量的语法或功能的对齐处理。同时,源应用系统使用的第三方产品或者组件,目标 数据库同样需要支持。 2. 应用系统运行需求:高可用方案是否支持,性能是否满足需求。 本章,对 KingbaseES 在这两方面的能力进行概述,方便用户进行评估。若用户需要评估 KingbaseES 对 Oracle 的支撑能力,请参见《Oracle 12c 和 KingbaseES V9 技术差异表》以及《Oracle 至 KingbaseES 迁移最佳实践》。 3.2.1 支持的模式对象 KingbaseES 支持数据库、表空间、模式、用户和角色。同时支持模式下的如下对象。 8 第 3 章 KINGBASEES 移植能力支撑体系 表 3.2.1: 支持的模式对象 序号 模式下对象 1 表和分区 2 视图(包含 force view) 3 可更新视图 4 触发器 5 规则 6 约束 7 索引 8 数据库连接 dblink 9 函数 10 存储过程 11 操作符 12 包 13 序列 14 同义词 15 外部数据源 16 数据类型 17 标记和策略 18 规则 rule 19 域 domain 20 扩展包 21 全局临时表 22 DUAL 表 23 Oracle 兼容视图 24 ROWNUM, LEVEL 等伪列 25 匿名块 26 表达式,包括条件表达式等 9 第 3 章 KINGBASEES 移植能力支撑体系 表 3.2.2: 内置数据类型 序号 KingbaseES 数据类型 数值型 1 smallint 2 integer 3 bigint 4 decimal 5 numeric 6 number 7 real 8 float 9 double precision 10 double 11 smallserial 12 serial 13 bigserial 字符型 1 character(n[char | byte]), char(n[char | byte]) 2 character varying(n[char | byte]), varchar(n[char | byte]), varchar2(n[char | byte]) 3 nvarchar(n[char | byte]) 4 text 大对象型 1 clob, nclob 2 blob 日期时间型 见续表 10 第 3 章 KINGBASEES 移植能力支撑体系 表 3.2.2 – 续表 1 timestamp [ (p) ] [ without time zone ] 2 timestamp [ (p) ] with time zone 3 date 4 time [ (p) ] [ without time zone ] 5 time [ (p) ] with time zone 6 interval year 7 interval month 8 interval day 9 interval hour 10 interval minute 11 interval second 12 interval year to month 13 interval day to second 布尔型 1 boolean 二进制型 1 bit(n) 2 bit varying(n) XML 型 1 xml 数组型 1 array 枚举型 1 enum JSON 型 见续表 11 第 3 章 KINGBASEES 移植能力支撑体系 表 3.2.2 – 续表 1 json 2 jsonb UUID 型 1 uuid GIS 型 1 point 2 line 3 box 4 path 5 circle 6 polygon 7 geometry KingbaseES 支持的函数,参见《KingbaseES SQL 参考手册》,视图参见《KingbaseES 数据库参考手册》。 3.2.2 SQL 在 KingbasES 支持的 SQL 中,除了 2.2.1 中提到的对象的 CREATE/ALTER/DROP 之外,还提供了其他 SQL 访问接口: 数据操作 • INSERT | UPDATE | DELETE • TRUNCATE • MERGE INTO • INSERT FIRST/ALL • COPY • CLUSTER 数据查询 • SELECT • 层次查询 CONNECT BY 12 第 3 章 KINGBASEES 移植能力支撑体系 • LATERAL 子句 • 外连接操作符 (‘+’) • WITH [ RECURSIVE ] 子句 • PREPARE, EXECUTE • VALUES 子句 • EXPLAIN 数据整理 • ANALYZE • VACUUM • REINDEX 事务控制语句 • BEGIN,START TRANSACTION • COMMIT • ROLLBACK • SAVEPOINT | RELEASE SAVEPOINT | ROLLBACK TO SAVEPONIT • SET TRANSACTION { READ ONLY | READ WRITE } • PREPARE TRANSACTION 权限语句 • GRANT • REVOKE 3.2.3 PL/SQL KingbaseES 支持如下 PL/SQL 的常用语法: • 赋值语句 • IF-THEN-ELSE 语句 • CASE 语句 • 多种循环语句,如 LOOP 语句、WHILE-LOOP 语句和 FOR LOOP 语句 • %TYPE 属性和%ROWTYPE 属性 • REF CURSOR 游标 • 预定义异常和自定义异常 13 第 3 章 KINGBASEES 移植能力支撑体系 • %NOTFOUND、%FOUND、%ISOPEN 和%ROWCOUNT 游标属性 • RETURNING INTO 语句 • 动态 SQL • BULK COLLECT • 消息输入 RAISE • PL/SQL 支持集合类型(关联数组、嵌套表、可变数组) KingbaseES 支持如下 PL/SQL 常用对象: • 触发器(包含行级触发器,列级触发器和事件触发器) • 函数 • 嵌套函数 • 存储过程 • 匿名块 • Package • OBJECT TYPE 3.2.4 客户端编程 KingbaseES 支持如下编程接口和开发框架。 表 3.2.3: 编程接口和开发框架 序号 编程语言/框架 KingbaseES 1 JAVA JDBC 2 .Net .Net Data Provider 3 C/C++ Pro*c 编程接口 4 OCI 5 ODBC 6 OCCI 7 Php pdo 见续表 14 第 3 章 KINGBASEES 移植能力支撑体系 表 3.2.3 – 续表 序号 编程语言/框架 KingbaseES 8 Perl DBI 9 Python 支持 10 QT QODBC 11 Qkingbase 12 Nodejs 支持 13 golang 支持 1 hibernate 支持 2 hibernate-spatial 支持 3 activiti 支持 4 mybatis 支持 5 Mybatis-plus 支持 6 flyway 支持 7 Liquibase 支持 8 Dbunit 支持 1 C3P0 支持 2 DBCP 支持 3 Druid 支持 开发框架 连接池 3.2.5 第三方产品和组件 KingbaseES 目前已经和超过 1200 家的软硬件产品完成适配,涵盖 CPU、存储、操作系统、中间件、备份软 件、办公 OA、报表、安全邮件、流版签、信息安全、地理信息等多类的主流产品都已覆盖。 15 第 3 章 KINGBASEES 移植能力支撑体系 3.2.6 高可用 KingbaseES 支持完善的高可用方案,为客户提供的一系列产品和方案能够解决无法预测的停机及计划停机造成 的常见问题,并且能以最低的成本进行部署。 支持多种物理备份和逻辑备份,支持多种集群,支持物理同步,支持逻辑同步。具体请参见《KingbaseES 高可 用指南》。 3.2.7 性能 随着企业业务数据量呈爆炸式增长,数据库性能问题变得越来越突出。通常,数据库性能优化是一个系统工程。 而不同的场景下,对性能的关注点也会有所不同,KingbaseES 分别采用更有针对性的优化技术来保证用户的各种应 用均可得到高性能的支撑。 KingbaseES 在数据装载,事务性应用场景,分析性应用场景都有针对性的性能优化,具体请参见《KingbaseES 数据库性能调优指南》。 3.2.8 相关技术资源 本指南重点从语句兼容特性、迁移工具、迁移场景和应用程序移植等几方面描述移植的关键技术和实现方式。在 每项技术和实现方式的描述上,本指南只提供有限的内容介绍,并未提供全面的细节说明。所以,用户若需了解某些 技术的实现细节还请参照相关的技术资料,这些资料诸如: • KingbaseES 数据库管理员指南:详尽和全方位地介绍如何高效管理 KingbaseES 数据库系统。其中,这些管理 诸如用户管理、存储管理、模式对象管理等。 • KingbaseES 开发指南:提供了 JDBC、ODBC、DCI 和 ESQL 等应用编程接口的详细使用说明。 • KingbaseES 高可用指南:详细描述了系统在高可用方面的支持。 • KingbaseES 数据库调优指南:详细描述了系统提供的优化能力。 3.3 KingbaseES 支撑系统割接能力 本章主要描述除了产品对应用运行的支撑以外,对系统割接上线过程中的需求是否都满足。 3.3.1 应用业务割接时间短 应用业务无法停机,或者用于割接的时间非常短,就需要使用同步工具持续同步数据。 • 评估系统割接需要的最短时间,协调用户预留最短时间; • 做出系统割接失败的回退预案,一旦割接失败,快速退回原有系统; 16 第 3 章 KINGBASEES 移植能力支撑体系 • 使用迁移工具 KDTS 完成历史数据迁移; • 使用 KFS 进行异构数据库的持续同步。 源数据库和目的数据库的数据差异小于预留的时间时,就可以进行系统割接。 3.3.2 割接后需要双轨运行 若应用迁移时间短,没有足够的测试时间和试运行时间,用户可以采用割接后双轨运行,应用系统运行在一个数 据库上,数据库中的数据实时同步到另一个数据库中;一旦应用出现问题,可以快速切换到另一个数据库中。 KFS 支持 KingbaseES 和异构数据库的实施同步。 17 第4章 4 第 章 应用迁移流程 应用迁移流程 本文档描述了一套完整的数据库系统评估与迁移方案,目的是帮助客户更明确的了解数据库系统迁移至 KingbaseES 的流程、方法、关键节点及注意事项,依据数据库系统迁移全过程方法论及各关键节点的流程定义,对数据 库系统的实际迁移操作进行指导和建议。 本章节包含以下内容: • 迁移方案设计 • 迁移评估 • 迁移准备 • 数据迁移 • 应用迁移 • 测试与调试移植系统 • 系统割接 4.1 迁移方案设计 一个数据库的完整替代过程包括下图中内容,需要考虑从功能移植、性能验证、可用保障以及应用交割策略。 18 第4章 应用迁移流程 人大金仓提供应用迁移全过程的支持服务。 整体迁移方案以方法论为指导,以过程为规范,以方案为基准,以自动化工具为辅助、以自动化全量回归为驱 动、以迭代优化为保障,实现最大程度的自动化、最低风险的可控无痛迁移。 总体上,迁移方法分为迁移评估、方案设计、流程设计、自动化迁移、自动化测试验证以及迭代优化六大阶段。 迁移全程,执行严格的项目的管理及风险控制流程。 • 迁移评估: 划定迁移范围,通过《数据库需求调研表》以及《迁移工作量评估》进行风险和工作量评估,也可以通过 人大金仓在线迁移评估工具 KDMS 发现存在的兼容性问题,预估其工作量,标识出主要风险点,争取在 迁移之前了解各种潜在风险,做到无痛迁移。 • 方案设计: 基于迁移评估,定制迁移整体方案,明确迁移计划、资源需求、所需环境以及风险规避的方法等,包括使 用离线迁移还是在线迁移方案。 • 流程设计: 基于成熟的迁移流程,针对客户具体情况,定制迁移流程,尽量降低过程风险。其中,涉及评估评估、迁 移准备流程、数据迁移流程、应用迁移流程、自动化全量功能回归测试验证、性能优化流程及方法,以及 配合系统割接的方法等。 • 自动迁移: 实现数据库迁移以及应用系统迁移。其中: 19 第4章 应用迁移流程 • 数据库迁移工具 KDTS • 应用迁移采用 PLSQL 调试功能,自动化测试工具 Katalon Studio 实现全量功能回归。 • 测试验证: 自动化测试驱动的迭代验证过程,通过自动化测试工具 Katalon,保证迁移后所有功能完好无损。 • 迭代优化: 通过性能监控工具 Kmonitor 中动态运行时性能优化分析发现性能瓶颈并优化,多次迭代,解决系统中高 频、低性能 SQL 的性能问题。 整体迁移过程中,关注范围定义、人员计划、资源计划、进度计划、风险管理以及沟通管理等,保障迁移以最高 性价比成功实施。 为保障成功,迁移项目需配备合理的资源,包括自动迁移专家、应用开发人员、业务人员、系统专家,相应软硬 件资源等。 具体的迁移步骤如下: 1. 迁移评估 2. 迁移准备 3. 数据迁移 4. 应用迁移 5. 测试验证 6. 系统割接 4.2 迁移评估 4.2.1 确定移植目标 开始迁移前,应根据用户的实际需求,确定移植目标。这些目标诸如: • 迁移源数据库的规模。 • 迁移源数据库的数据库对象的种类和特征,如简单和复杂迁移对象所占比例等。 • 迁移的难易程度,如是否迁移大对象,是否迁移大量约束等。 • 迁移的工期要求。 • 迁移过程中源应用和源数据库是否可以暂停。 • 对目标系统的技术指标要求,诸如平台、版本、应用编程接口、工具、可用性、安全性和性能指标要求等。 明确移植目标以后,则可开始移植任务评估。可以把《数据库需求调研表》作为工作牵引和记录。 20 第4章 4.2.2 应用迁移流程 评估移植任务 当计划把一个源数据库系统移植到 KingbaseES 环境时,如果不做评估或评估不充分的话,那么这个移植工作恐 怕会有太多的潜在风险等着移植工程师,他们也无法回答领导和用户对移植时间的追问,一直被动的颠簸在风浪的漩 涡里,而不知道岸边究竟在哪儿!因此,移植前对移植的可行性、工作量、难易程度和工作进度等进行充分评估是非 常必要的。 通常,移植评估主要包括以下内容: • 移植数据规模,如移植各类数据库对象的数量,PL/SQL 程序的规模等。 • 移植中 KingbaseES 不支持功能的种类和数量。 • 移植过程中可能遇到的其他问题。 可以把《迁移工作量评估工具 V1.0》作为工作牵引和记录。 4.2.3 组建移植团队 任何一个高效、成功的项目都应具备一个健全和良好的团队,如果没有这样团队互相配合和支持,那么任何数据 库的移植将可能存在巨大的风险。所以,组建一个高效的移植团队是非常必要的。 那么,移植团队的组成人员应具备哪些条件呢?他们应至少具备以下的知识与技能: • 熟悉源数据库和 KingbaseES 的 SQL 语言和 PL/SQL 语言特性,以及相关的 KingbaseES 兼容特性。 • 熟悉源数据库和 KingbaseES 的各种应用编程接口,以及相关的 KingbaseES 兼容特性。 • 熟悉源数据库和 KingbaseES 的相关客户端工具,以及这些工具间的相同点和异同点。 由这些优秀人员组建的团队是高效移植数据库的可靠保障。 4.3 迁移准备 4.3.1 准备迁移环境 在上述步骤完成以后,移植工程师应开始准备迁移环境了,这些准备工作诸如: 4.3.1.1 部署目的数据库服务器 部署目的数据库服务器应遵循以下原则: • 目的数据库服务器的 CPU、内存、网络环境等硬件应尽量采用较高的配置。 • 如果移植的源数据库系统规模较大,如超过 1GB,则建议把源数据库和 KingbaseES 分别部署在不同的物理机 器上。 21 第4章 应用迁移流程 • 为确保迁移效率,应尽量把 KingbaseES 和源数据库服务器部署到同一局域网内。 4.3.1.2 获取并安装必要的软件 迁移前应获取并安装如下软件:源数据库系统、KingbaseES 数据库系统、PL/SQL Developer、JDBC 和 ODBC 驱动程序、C 语言开发工具、OCI 软件、DCI 软件、TPC-C 测试工具、LoadRunner 等。 如果迁移数据规模较大,建议对安装的 KingbaseES 数据库服务器进行适当的优化,如增大 shared_buffer 大 小、预先创建较大的日志文件,预先申请足够的表空间数据库文件等。 完成上述准备工作后,移植工程师便可开始数据库移植工作了。 4.3.2 迁移数据库、用户 数据库、用户迁移主要包括以下内容: • 获取源数据库的 IP 地址、实例名、网络服务端口号、用户名/密码等信息。 • 在目的 KingbaseES 数据库上,使用 KSQL 或 Kstudio 工具上执行如下操作: • 创建与源数据库中用户同名的用户,例如创建与源数据库同名的用户。 • 创建与源同名的数据库,例如创建与源数据库同名的 ORCL 数据库,它的属主为上一步指定用户。 4.4 数据迁移 本步骤中需要根据业务在迁移过程中是否可以服务确定采用离线迁移还是在线迁移。 若是离线迁移,使用 KDTS 完成源库中所有对象定义和数据的搬迁。若是在线迁移,则需要首先使用 KDTS 完 成历史数据搬迁之后,使用 KFS 完成数据的追平。 使用 KDTS 将源数据库中的数据迁移到 KingabseES 中,目前 KDTS 支持 Oracle、SQLServer、MySQL、DB2 等多种数据源。 数据迁移时,可以按照 KDTS 手册和 KFS 手册中关于性能调优的部分,根据 cpu 设置并发线程数,提高迁移速 度。 源数据库中数据类型对 KingbaseES 的数据类型的转换,有默认规则,用户也可以自定义数据类型转换。 数据迁移完成后,需要确认迁移结果。迁移工具自动进行源库和目的数据库的数据量对比,确定数据迁移无损正 确。若发生错误,也请参考 KDTS 的“迁移结果”章节进行处理,也可以使用 KDTS 的二次迁移功能,再次进行迁 移。 22 第4章 4.5 应用迁移流程 应用迁移 在应用编程接口方面,KingbaseES 支持的非常丰富,所以,一般情况下,应用程序迁移比较容易。应用程序迁 移通常应和移植系统测试同时进行。这样可及时修改测试过程中发现的问题。 下面是常用应用编程接口的移植说明: • JDBC:对于使用 JDBC 的应用程序,只需把 Oracle 的 JDBC 驱动程序和数据库连接字符串替换为 KingbaseES 的对应内容即可。此外,KingbaseES 的 JDBC 驱动程序存放在数据库安装程序目录的 JDBC 文 件夹内,其中 kingbase8-9.0.0.jre6.jar 对应的 JDK1.6 版本,kingbase8-9.0.0.jre7.jar 对应的 JDK1.7 版本, kingbase8-9.0.0.jar 对应的 JDK1.8 版本。 • ODBC:对于使用 ODBC 的应用程序,应创建 KingbaseES ODBC 数据源,然后修改应用程序中连接数据库的 用户名、密码等。此外,Windows 系统下对于 OLEDB、ADO 和 NDP,则不需创建数据源。 如何在一个应用程序中访问和操纵数据库呢?通常,可采用以下方式: 4.5.1 API 方式 该方式通过数据库厂商提供的各种标准应用编程接口在应用程序中与数据库进行交互。常用的应用编程接口如 JDBC 和 ODBC 等。目前,大多数数据库厂商均提供很多标准的数据库 API 及其驱动程序。 在实际应用中,应首先加载驱动程序。加载成功后,利用 API 函数与数据库交互并完成对数据库数据的操作。 详细参考 客户端编程接口。 4.5.1.1 ODBC 4.5.1.1.1 Windows 数据源配置 Windows 配置 ODBC 数据源请参考 KingbaseES 手册中的 KingbaseES 客户端编程接口指南-ODBC 。 4.5.1.1.2 Linux 数据源配置 首先检查 ODBC Driver 是否已经安装。 在系统中找到 odbcinst.ini 文件,和/usr/bin/odbcinst 对应的 odbcinst.ini 在 /etc 目录下,和/usr/local/bin/ odbcinst 对应的 odbcinst.ini 在 /usr/local/etc 目录下。在 odbcinst.ini 文件中查找 [KingbaseES 9 ODBC Driver] 这 一项。如果没有,则编写一个模板文件 template_file1,包含如下内容: [KingbaseES 9 ODBC Driver] Description = KingbaseES 9 ODBC Driver for Linux Driver = /opt/Kingbase/Odbc/lib/kdbodbcw.so 增加 odbc.ini 文件,内容如下: 23 第4章 应用迁移流程 [kingbase] Description = KingbaseES Driver = KingbaseES 9 ODBC Driver Servername = 127.0.0.1 Port = 54321 Username = SYSTEM Password = MANAGER Database = TEST 具体配置参数解释请参考 KingbaseES 客户端编程接口指南-ODBC 。 4.5.1.2 JDBC 表 4.5.1: JDBC 的连接串比较说明 说明 Oracle KingbaseES JDBC 基本使用 --声明连接 --声明连接 Connection con; Connection con; --加载驱动程序 --加载驱动程序 Class.forName (” ora- Class.forName(” cle.jdbc.driver.OracleDriver”); com.kingbase8.Driver”); --连接串 --连接串 String url = ”jdbc:oracle:thin:@192.168. String url = ”jdbc:kingbase8://192.168. 0.1:1521:databasename”; 0.1:54321/databasename”; --获得连接 --获得连接 con= DriverMan- ager.getConnection(url,user,pwd); con= DriverMan- ager.getConnection(url,user,pwd); 其它问题请参考 KingbaseES 客户端编程接口指南-JDBC 4.5.1.3 Activiti 适配 Activiti 使用 pg 形态的驱动包,Activiti 的 jar 包及其依赖包可以从官方网站下载,也可以通过 maven 导 入。Activiti 所使用的 JDBC 包 postgresql-42.2.9.jar 位于 $KINGBASE_HOME/Interface/jdbc 目录下。使用时将 Activiti 依赖包和 JDBC 包导入到项目的 Libraries 中并定义相关配置项即可。 Activiti 应用迁移只涉及配置修改即可,如下例所示。 在 activiti.cfg.xml 中增加如下声明: 24 第4章 应用迁移流程