PDF文库 - 千万精品文档,你想要的都能搜到,下载即用。

Oracle至KingbaseES迁移最佳实践.pdf

破碎之光perplexe50 页 1.575 MB下载文档
Oracle至KingbaseES迁移最佳实践.pdfOracle至KingbaseES迁移最佳实践.pdfOracle至KingbaseES迁移最佳实践.pdfOracle至KingbaseES迁移最佳实践.pdfOracle至KingbaseES迁移最佳实践.pdfOracle至KingbaseES迁移最佳实践.pdf
当前文档共50页 2.88
下载后继续阅读

Oracle至KingbaseES迁移最佳实践.pdf

Oracle 至 KingbaseES 迁移最佳实践 金仓数据库管理系统 KingbaseES 文档版本:V9(V009R001C001B0024) 发布日期:2023 年 10 月 12 日 北京人大金仓信息技术股份有限公司 目 目 录 录 第 1 章 前言 1 1.1 适用读者 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 相关文档 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.3 术语 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.4 手册约定 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 第 2 章 概述 2.1 2.2 3 Oracle 兼容特性概览 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.1.1 数据类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.1.2 SQL 语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.1.3 PL/SQL 语法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.1.4 PL/SQL 对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.1.5 客户端 SQL 交互工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 相关技术资源 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 第 3 章 KingbaseES 移植能力支撑体系 7 第 4 章 Oracle 数据库移植实战 8 4.1 4.2 主要移植内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.1.1 数据库、用户移植 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.1.2 Oracle 数据迁移 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.1.3 应用程序移植 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 关键移植步骤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4.2.1 确定移植目标 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4.2.2 评估移植任务 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 4.2.3 组建移植团队 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.2.4 准备迁移环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4.2.4.1 部署目的数据库服务器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4.2.4.2 获取并安装必要的软件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4.2.5 数据库、用户迁移 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4.2.6 数据迁移 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 迁移前准备 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 4.2.6.1 I 目 录 4.2.6.1.1 获取 Oracle 数据库的相关信息 . . . . . . . . . . . . . . . . . . . . . . . . . . 15 4.2.6.1.2 配置 KingbaseES 的 Oracle 兼容开关 . . . . . . . . . . . . . . . . . . . . . . 16 4.2.6.1.3 移植数据库、用户 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.2.6.1.4 配置目的库 KingbaseES 性能参数 . . . . . . . . . . . . . . . . . . . . . . . . 17 离线迁移 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.2.6.2.1 BS 迁移步骤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.2.6.2.2 SHELL 迁移步骤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 在线迁移 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.2.6.3.1 源端数据库备份 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.2.6.3.2 存量数据迁移 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.2.6.3.3 启动 KFS 完成数据追平 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 多次迁移 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 应用代码迁移 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.2.7.1 服务器应用代码迁移 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.2.7.2 客户端应用代码迁移 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.2.6.2 4.2.6.3 4.2.6.4 4.2.7 4.2.7.2.1 ODBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.2.7.2.2 Oracle11G 访问 KingbaseES . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.2.7.2.3 移植 Oracle OCI 应用程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 其它应用框架 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 测试与调试移植系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.2.8.1 功能测试和排错 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.2.8.2 性能测试和调优 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.2.7.3 4.2.8 版权声明 45 服务周期承诺 46 II 第 1 章 前言 1 第 章 前言 本文档描述了基于 Oracle 数据库的应用程序移植到 KingbaseES 的方法。 前言部分包含以下主题: • 适用读者 • 相关文档 • 术语 • 手册约定 1.1 适用读者 Oracle 至 KingbaseES 迁移最佳实践面向所有使用 KingbaseES 的用户,主要是数据库管理员和应用程序开发人 员。 1.2 相关文档 无 1.3 术语 无 1.4 手册约定 本文档中可能出现“注意、提示、警告、另请参阅”等标志,它们所代表的含义如下: 1 第 1 章 前言 注意: 用于突出重要/关键信息、最佳实践等。 提示: 用于突出小窍门、捷径等。 警告: 用于传递设备或环境安全警示信息,若不避免,可能会导致设备损坏、数据丢失、设备性能降低或其 它不可预知的结果。 另请参阅: 用于突出参考、参阅等。 以下程序代码书写约定适用于本文档: 符号 说明 [] 表示包含一个或多个可选项。不需要输入中括号本身。 {} 表示包含两个以上(含两个)的候选,必须在其中选取一个。不需要输入花括号本身。 | 分割中括号或者花括号中的两个或两个以上选项。不需要输入“|”本身。 ... 表示其之前的元素可以被重复。 斜体 表示占位符或者需要提供特定值的变量。 大写 表示系统提供的元素,以便与用户定义的元素相互区分。除出现在方括号中的元素外,应当按 照顺序逐字输入。当然,部分元素在系统中是大小写不敏感的,因此用户可以根据系统说明以 小写形式输入。 小写 表示由用户提供的元素。 2 第 2 章 概述 2 第 章 概述 本章节包含以下内容: • Oracle 兼容特性概览 • 相关技术资源 2.1 Oracle 兼容特性概览 通常,异构数据库移植的工作量繁重。这些工作量主要来源于:在数据类型、SQL 语言、PL/SQL 语言、甚至 客户端应用编程接口等诸多方面对两个数据库所进行的、大量的语法或功能的对齐处理。 同样的,从 Oracle 向 KingbasES 移植的情况也如此。为降低移植工作量,KingbaseES 在其内部实现了大量的 Oracle 兼容特性。这些特性从语法或功能上对 Oracle 提供了原生支持。因此,在移植过程中,Oracle 程序只需很少 甚至不做任何改动就能在 KingbaseES 环境中运行。 此外,对未提供原生支持的 Oracle 功能,KingbaseES 也给出了相应的移植建议。 2.1.1 数据类型 数据类型是描述数据库系统底层信息资源模式的常用手段。通常,两个数据库系统数据类型的兼容好坏直接影响 移植的难易程度。因此,KingbaseES 对 Oracle 的特有数据类型提供了全面的原生支持。这些类型如 Oracle 的 NUMBER、VARCHAR2、CHAR(n)、DATE、INTERVAL 和 ROWID 等。不仅如此,KingbaseES 对 Oracle PL/SQL 中 使用的复杂数据类型也提供了兼容性支持,这些类型如 Oracle 的 RECORD 类型、%TYPE 属性、%ROWTYPE 属 性、关联数组、可变数组和嵌套表等。 2.1.2 SQL 语句 在 KingbasES 中,对大多数常用的 Oracle 特有 SQL 语句均提供了原生支持。这项措施使得 Oracle 应用程序在 KingbaseES 系统中通常只需很少的代码变动就可正常运行。 KingbaseES 主要兼容如下 Oracle 的 SQL 语句: 3 第 2 章 概述 • TRUNCATE 语句 • 层次查询 • DUAL 伪表 • SELECT INTO 的 FOR UPDATE 语句 • UPDATE[前缀] 多列更新 • INSERT INTO TABLE([前缀] 列) • DELETE [FROM] 语句 • 支持 WITH 子句 • 支持 DBLINK • 支持 CREATE FORCE VIEW • 支持 SEQUENCE 访问子句 • 支持闪回查询, 支持多个闪回的伪列 • 支持 PURGE • 支持多种表达式,包括 JSON 表达式,ALL 表达式等 • 支持多种内置函数,包括全文检索函数,score 函数等 • 支持可更新多表 JOIN 视图 • 支持 DML 分区 • 支持多种分区,支持全局索引 • 支持 SAMPLE 子句 上述这些 SQL 语句均从语法和语义上实现了 Oracle 兼容。 2.1.3 PL/SQL 语法 KingbaseES 支持如下 Oracle PL/SQL 的常用语法: • 赋值语句 • IF-THEN-ELSE 语句 • CASE 语句 • 多种循环语句,如 LOOP 语句、WHILE-LOOP 语句和 FOR LOOP 语句 • GOTO 语句 • %TYPE 属性和%ROWTYPE 属性 • REF CURSOR 游标 4 第 2 章 概述 • %NOTFOUND、%FOUND、%ISOPEN 和 %ROWCOUNT 游标属性 • RETURNING INTO 语句 • EXECUTE IMMEDIATE 语句 • 支持 BULK COLLECT • PL/SQL 支持集合类型(关联数组、嵌套表、可变数组) • PL/SQL 异常处理 • FORALL 语句 • COMPILE 子句 • PLSQL 中事务处理 • 支持自治事务 2.1.4 PL/SQL 对象 KingbaseES 支持如下 Oracle PL/SQL 对象: • 内置标量函数 • 行级 BEFORE 触发器 • 行级 AFTER 触发器 • INSTEAD OF 触发器 • 匿名块 • 存储过程 • 函数 • 子类型 • 对象类型 • 包 • 嵌套函数 • anydata 对象类型 • 常 用 内 置 包, 包 括 DBMS_SQL, DBMS_METADATA, DBMS_OBFUSCATION_TOOLKIT,DBMS_LOB,DBMS_DDL, DBMS_RANDOM, DBMS_MVIEW, DBMS_OUTPUT,DBMS_SESSION, DBMS_UTILITY, OW_UTIL, UTL_FILE, UTL_TCP, UTL_SMTP, UTL_MAIL,DBMS_SCHEDULER,DBMS_JOB 等。 5 第 2 章 概述 2.1.5 客户端 SQL 交互工具 在实际应用中,通常客户 DDL 脚本和报表是通过 SQL 交互工具移植的。针对这种情况,KingbaseES 提供了如 下 SQL 交互工具: • KSQL:命令行的 SQL 交互工具,类似 Oracle 的 SQL* PLUS。 • KStudio:图形化的 SQL 交互工具,类似 Oracle 的 SQL Developer 图形化工具。 通过上述工具,用户可连接数据库服务器,运行数据库实用程序,发送 SQL 语句,运行 SQL 脚本,或运行 KingbaseES 数据库管理命令实施数据库管理等。 2.2 相关技术资源 本指南重点从语句兼容特性、迁移工具、迁移场景和应用程序移植等几方面描述 Oracle 移植的关键技术和实现 方式。在每项技术和实现方式的描述上,本指南只提供有限的内容介绍,并未提供全面的细节说明。所以,用户若需 了解某些技术的实现细节还请参照相关的技术资料,这些资料诸如: • KingbaseES 数据库管理员指南:详尽和全方位地介绍如何高效管理 KingbaseES 数据库系统。其中,这些管理 诸如用户管理、存储管理、模式对象管理等。 • KingbaseES 客户端编程接口指南:提供了 JDBC、ODBC、DCI 和 ESQL 等应用编程接口的详细使用说明。 • KingbaseES 高可用指南:详细描述了系统在高可用方面的支持。 • KingbaseES 参考手册:全面介绍了 KingnaseES 各种工具的使用方法,这些工具如 SQL 交互工具 KSQL 和数 据迁移工具 KDTS 等。 6 第 3 章 KINGBASEES 移植能力支撑体系 3 第 章 KingbaseES 移植能力支撑体系 请参阅《KingbaseES 异构数据库移植指南》第三章 KingbaseES 移植能力支撑体系。 7 第4章 4 第 章 ORACLE 数据库移植实战 Oracle 数据库移植实战 由于 KingbaseES 内部提供了大量的 Oracle 兼容特性,因此,在实际应用中,一般只需很少甚至不做任何修改, 用户便可把 Oracle 数据库移植到 KingbaseES 环境中运行。不仅如此,用户还可利用 KDTS 等多种工具简化移植过 程。 本节重点描述了在实际应用中移植一个 Oracle 数据库系统的完整过程,以及其中的主要移植内容和关键移植步 骤。 本章节包含以下内容: • 主要移植内容 • 关键移植步骤 4.1 主要移植内容 在实际应用中,一个 Oracle 数据库系统的移植主要包括如下内容。这些内容的迁移是存在先后顺序的,若违反 该顺序,则可能导致迁移受阻。 4.1.1 数据库、用户移植 数据库是各种 SQL 和 PL/SQL 数据库对象的存放容器,而用户是这些对象的管理者和使用者。因此,在迁移数 据库对象之前,一般应先迁移数据库、用户。 那么,如何移植这些内容呢?应在目的数据库 KingbaseES 上创建与源数据库 Oracle 同名的数据库、用户, 并授 予新建用户具有使用该数据库和新建模式的所有或适当的权限。 另外,所创建数据库的字符集应与 Oracle 数据库字符集一致。如果 KingbaseES 已有同名数据库,则登录该数据 库后,则只需创建同名用户。 4.1.2 Oracle 数据迁移 确定使用在线迁移还是离线迁移,根据不同需要制定不同给的迁移策略,使用 KDTS 和 KFS 完成数据库迁移。 8 第4章 4.1.3 ORACLE 数据库移植实战 应用程序移植 在完成数据库对象迁移以后,才可开始迁移应用程序,主要原因是:在用程序中,可能会访问和操作前面迁移的 数据库对象。 应用程序移植是指对 Oracle API 方式或嵌入式 SQL 方式的应用程序的移植。它主要包括接口驱动程序和连接方 法的移植,以及 Oracle 扩展或私有的、且 KingbaseES 未兼容的 API 移植。通常,该项任务的工作量较少。 在实际应用中,通常应用程序移植与移植系统测试与调试交叉进行。 4.2 关键移植步骤 作为一个典型的项目过程,Oracle 数据库移植应具有健全的项目团队和全面细致的的项目执行过程。通常,移植 一个 Oracle 数据库主要包括以下步骤: • 确定移植目标 • 评估移植任务 • 组建移植团队 • 准备迁移环境 • 数据库用户迁移 • 数据迁移 • 应用代码迁移 • 测试与调试移植系统 这些步骤指之间的关系是:前四个步骤是迁移前的准备工作,这些准备工作是确保后续 Oracle 移植顺利进行的 前提条件,而最后一步是保证最终移植系统正确性和可用性的关键步骤。 下面,分别对上述各个步骤进行详细说明。 4.2.1 确定移植目标 开始迁移前,应根据用户的实际需求,确定移植目标。这些目标诸如: • 迁移 Oracle 数据库的规模。 • 迁移 Oracle 数据库对象的种类和特征,如简单和复杂迁移对象所占比例等。 • 迁移的难易程度,如是否迁移大对象,是否迁移大量约束等。 • 迁移的工期要求。 • 迁移中业务系统是否可以处于停止服务状态。 • 对目标系统的技术指标要求,诸如平台、版本、应用编程接口、工具、可用性、安全性和性能指标要求等。 9 第4章 ORACLE 数据库移植实战 明确移植目标以后,则可开始移植任务评估。 4.2.2 评估移植任务 当计划把一个 Oracle 数据库系统移植到 KingbaseES 环境时,如果不做评估或评估不充分的话,那么整个移植 工作会存在很多的潜在风险,额外增加移植工程师的工作量并且无法确认移植完成时间。因此,移植前对移植的可行 性、工作量、难易程度和工作进度等进行充分评估是非常必要的。 通常,移植评估主要包括以下内容: • 移植技术指标,如移植业务压力和性能指标等。 • 移植数据规模,如移植各类数据库对象的数量,PL/SQL 程序的规模等。 • 移植中 KingbaseES 不支持功能的种类和数量。 • 移植的约束种类和数量。 • 移植过程中可能遇到的其他问题。 在 Oracle 移植中常用的评估模板如下表所示: 10 第4章 ORACLE 数据库移植实战 表 4.2.1: 移植评估的数据库/应用概况模板 项目 描述 Oracle 数据库版本 8.1.7.4 操作系统版本 Winodws 2000/2003 Server 服务器型号 联想/SUN 备注 CPU 配置 内存(RAM) 磁盘(Disk Profile) 服务器个数(# of Servers) 1或2 用户数/天(# Users/Day) 几十/天 事务量/天(# Transactions / Day) 当前数据库大小 几个 GB 数据库增长速率(#GB/month) 目标用户(Schema) 应用方式(OLTP/OLAP) OLTP 应用服务器(中间件) 无 客户端应用类型(C/S,B/S) C/S 客户端应用编程语言 Delphi7 客户端应用连接接口 ODAC/ADO 是否深入的 SQL 应用 无 监控工具 无 备份方式 Exp/imp 其它工具(备份软件等) 无 高可用要求 较高 高可用配置方案 VCS 或单机 11 第4章 ORACLE 数据库移植实战 表 4.2.2: 移植评估的移植报告总结模板 项目 描述 移植分析日期 20220105 下午 移植分析人员 ABC KingbaseES 版本 Oracle 版本 11.1.7.4 Oracle Schema Oracle DB Size (GB) 几个 GB Oracle Schema Size (MB) 几个 GB 表 4.2.3: 移植评估的约束统计模板 类型 小计 备注 CHECK OR NOT NULL FOREIGN KEY PRIMARY KEY UNIQUE KEY OTHER 约束共计 12 第4章 ORACLE 数据库移植实战 表 4.2.4: 移植评估的其它方面模板 特性 小计 数据压缩 无 索引组织表 无 维度(Dimensions) 无 物化视图 无 存储概要 无 高级队列 无 空间数据管理 无 全文搜索 有 数据库链接 无 数据复制 无 RAC 有 逻辑 standby 无 物理 Standby 无 自动存储管理 ASM 无 自动工作负载信息库 AWR 无 备注 共计 4.2.3 组建移植团队 任何一个高效、成功的项目都应具备一个健全和良好的团队,Oracle 数据库移植也不例外。如果没有这样团队互 相配合和支持,那么 Oracle 数据库移植将可能存在巨大的风险。所以,组建一个高效的移植团队是非常必要的。 那么,移植团队的组成人员应具备哪些条件呢?他们应至少具备以下的知识与技能: • 熟悉 Oracle 和 KingbaseES 的 SQL 语言和 PL/SQL 语言特性,以及相关的 KingbaseES Oracle 兼容特性。 • 熟悉 Oracle 和 KingbaseES 的各种应用编程接口,以及相关的 KingbaseES Oracle 兼容特性。 • 熟悉 Oracle 和 KingbaseES 的相关客户端工具,以及这些工具间的相同点和异同点。 由这些优秀人员组建的团队是高效移植 Oracle 数据库的可靠保障。 13 第4章 ORACLE 数据库移植实战 准备迁移环境 4.2.4 在上述步骤完成以后,移植工程师应开始准备迁移环境了,这些准备工作诸如: 4.2.4.1 部署目的数据库服务器 部署目的数据库服务器应遵循以下原则: • 目的数据库服务器的 CPU、内存、网络环境等硬件应尽量采用较高的配置。 • 如果移植的 Oracle 数据库系统规模较大,如超过 1GB,则建议把 Oracle 和 KingbaseES 部署在不同的物理机 器上。 • 为确保迁移效率,应尽量把 KingbaseES 和 Oracle 服务器部署到同一局域网内。 4.2.4.2 获取并安装必要的软件 迁移前应获取并安装如下软件:Oracle 数据库系统、KingbaseES 数据库系统、PL/SQL Developer、JDBC 和 ODBC 驱动程序、C 语言开发工具、OCI 软件、DCI 软件、TPC-C 测试工具、LoadRunner 等。 如果迁移数据规模较大,建议对安装的 KingbaseES 数据库服务器进行适当的优化,如增大 shared_buffer 大 小、预先创建较大的日志文件,预先申请足够的表空间数据库文件等。 完成上述准备工作后,移植工程师便可开始 Oracle 数据库移植工作了。 4.2.5 数据库、用户迁移 数据库、用户迁移主要包括以下内容: • 获取源 Oracle 数据库的 IP 地址、实例名、网络服务端口号、用户名/密码等信息。 • 在目标 KingbaseES 数据库上,使用 Ksql 或 Kstudio 工具上执行如下操作: – 创建与源 Oracle 用户同名的用户,例如创建与 Oracle 同名的 scott 用户。 – 创建与源 Oracle 同名的数据库,例如创建与 Oracle 同名的 ORCL 数据库,它的属主为 scott。若同名数 据库存在,可以使用其他的数据库名称,若使用了新的数据库名称,则需要修改应用程序的连接串中的数 据库名称。 • KingbaseES 默认 initdb 就是 Oracle 兼容模式。 4.2.6 数据迁移 KingbaseES 数据迁移工具 KDTS 动态加载待迁移的数据库访问接口,方便用户定制和使用。 异构数据源之间的数据迁移:支持 Oracle9i、10g、11g、12c、19c 到 KingbaseES 的数据前迁移。 14 第4章 ORACLE 数据库移植实战 KingbaseES 数据同步工具 KFS 支持同、异构数据源之间的数据迁移。 KingbaseES 数据同步工具 KFS 支持结构迁移、支持全量数据迁移、支持列名映射,支持数据迁移过滤,在配置 数据任务时,可以对迁移的表配置 where 条件、通过匹配的 where 条件过滤需要迁移的数据。 数据库迁移时需要按照用户需求确定在线迁移还是离线迁移,若是离线迁移,使用 KDTS 完成 Oracle 的完整迁 移;若是在线迁移,则首先需要使用 KDTS 完成历史状态迁移,然后使用 KFS 完成数据的在线追平。 本节包括: • 迁移前准备 • 离线迁移 • 在线迁移 • 多次迁移 4.2.6.1 迁移前准备 在使用 KDTS 迁移 Oracle 数据库之前,应先做如下准备工作: 4.2.6.1.1 获取 Oracle 数据库的相关信息 迁移前,应获取源数据库 Oracle 服务名及迁移的数据规模信息。其中,前者用于 PL/SQL Developer 工具的登 录操作,后者用于估算数据迁移时间和设计迁移方案。 1) Oracle 数据库基本信息 获取源 Oracle 数据库的: a. IP 地址; b. 实例名; c. 网络服务端口号; d. 用户名/密码。 在目标 KingbaseES 上: a. 创建与源 Oracle 用户(如 scott)同名的用户(scott); b. 创建与源 Oracle(如 ORCL)同名的数据库(ORCL),属主为 scott; c. 创建与源 Oracle(与用户名相同 t)同名的模式 scott,属主为 scott。 2) 查询 Oracle 数据库编码方式 select userenv('language') from dual; USERENV('LANGUAGE') SIMPLIFIED CHINESE_CHINA.ZHS16GBK 15 第4章 ORACLE 数据库移植实战 【KingbaseES 初始化设置编码方式】 --encoding=GBK(支持 GBK UNICODE ASCII) 3) 查看表数据量大小 查看当前用户在 Oracle 中的表大小,按从大到小排序(单位 GB) select segment_name,bytes/1024/1024/1024 from user_segments where segment_type='TABLE' order by bytes desc ; XFJXX 16.046875 XFRXX 7.779296875 PCK 7.4375 BLFSXX 5.0625 XFSXXX 2.3125 DFGZXX 1.3359375 FJB 0.53125 TSJXX 0.078125 4) 检查数据库日期格式 时间的默认格式为:ISO, MDY 在配置文件中添加:datestyle =’ISO,YMD’ 修改为年月日的格式(99 会改为 1999) 在某项目中迁移数据时遇到:服务器报错,迁移工具中断,迁移停滞 oracle 数据库中有日期“0099-09-30 00:00:00”,迁移工具输出为“99-09-30 00:00:00”,KingbaseES 中 将 99 识别为月份报错:ERROR: date/time field value out of range --即使没有报错也会出现错误 set ora_date_sytle = true; CREATE TABLE T_DATE(COL DATE); INSERT INTO T_DATE VALUES('11-10-10 10:10:10'); SELECT * FROM T_DATE; COL --------------------2010-11-10 10:10:10 (1 row) 4.2.6.1.2 配置 KingbaseES 的 Oracle 兼容开关 根据实际情况,应对目的数据库 KingbaseES 进行适当的 Oracle 兼容配置。通常,应配置以下会话级兼容参数: 1)nls_length_semantics:设定 char 类型字段默认单位是 byte 还是 char。此外,标识符最大长度以此值为单 位。如果它为 char,则标识符最大长度为 63 个 char,否则为 63byte。 在 KingbaseES 系统参数 nls_length_semantics 缺省值是”CHAR”,需要与待迁移的 Oracle 相同。 16 第4章 ORACLE 数据库移植实战 Oracle 字符类型的 byte|char 属性的默认值是由 Oracle 提供的数据库参数 NLS_LENGTH_SEMANTICS 决定的,可通过下方语句进行查询: select value from nls_database_parameters where parameter = 'NLS_LENGTH_SEMANTICS'; VALUE BYTE 如果未修改可能会出现:迁移 char 类型时,由于数据库存储的类型不同,导致迁移的数据存在多余空格 的情况。 2)search_path:模式搜索路径。例如 search_path 为 $USER,SCOTT,PUBLIC 时,系统将首先搜索与登录用 户同名的模式对象,然后搜索 SCOTT 模式对象,最后搜索 PUBLIC 模式对象。 3)default_with_oids:OID 伪列开关。KingbaseES 的 OID 伪列可兼容 Oracle 的 ROWID 伪列。因此,如果 Oracle 移植对象有 ROWID 伪列,则建议用 OID 伪列替代。 4.2.6.1.3 移植数据库、用户 在目的数据库 KingbaseES 上创建与源数据库 Oracle 同名的用户、数据库,并且授予新建用户具有使用该数据 库和新建模式的所有或适当的权限。另外,所创建数据库的字符集应与 Oracle 数据库字符集一致。如果 KingbaseES 已有同名数据库,则登录该数据库后,只需创建同名用户。 4.2.6.1.4 配置目的库 KingbaseES 性能参数 为了提高迁移速度,应对目的库 KingbaseES 进行性能优化配置。 例如: 1) 根据迁移数据规模的大小,迁移前可预先创建适当大小的的数据和日志文件。 开始迁移之前根据待迁移数据库的大小,保证 KingbaseES 数据目录所在位置有足够的空间。 2)根据 KingbaseES 服务器硬件配置的实际情况调整 shared_buffers 大小,默认是 128M,建议调整为内存的 1/4 大小。 4.2.6.2 离线迁移 在完成上述准备工作以后,用户可使用 KDTS 进行数据的离线迁移,KDTS 提供了两种形态(BS、SHELL), 用户可根据需要进行选择,以下章节将分别介绍 BS、SHELL 版本进行 oracle 迁移的具体步骤。 4.2.6.2.1 BS 迁移步骤 • 创建源数据库连接 创建源库数据库连接。创建数据库连接界面如下,填写数据源信息,包括:“连接名称”、“数据库 类型”、“数据库版本”、“服务器地址”、“端口”、“用户名”、“密码”、“数据库”、“连接参 数”。 17 第4章 ORACLE 数据库移植实战 • 创建目标数据库连接 创建 目标数据 库 连接。 创建 数据 库 连接界面 如下,填 写数 据源 信息,包 括:“连接名称”、“数 据 库类型”、“数据库版本”、“服务器地址”、“端口”、“用户名”、“密码”、“数据库”、“驱 动”、“URL”、“连接参数”。 18 第4章 ORACLE 数据库移植实战 • 新建迁移任务 KDTS 采用向导页的方式指导用户新建迁移任务,简单易用,用户依次配置“选择数据源”-“选择模 式”-“选择迁移对象”-“配置参数”,即可快速配置一个迁移任务。 1) 选择数据源 填写自定义任务名称(任务名称不能重复),选择“源数据库”和“目标数据库”,或者选择“新 建数据源”后使用。 19 第4章 ORACLE 数据库移植实战 2) 选择模式 根据您的数据迁移所需选择对应模式(如需选择模式在系统模式中可选中“包含系统模式”复选 框)的表、视图、序列、函数、存储过程、程序包、同义词。当模式较多时也可以通过左上方的查 询框进行检索。请您至少选择一种模式,否则将收到错误提示,以至于不能完成新建任务。 在选择模式的前提下如您未选择“表”,即没有迁移对象,则系统将认为您不需要迁移对象,将提 示您直接跳过“选择迁移对象”进入“配置参数”。 20 第4章 ORACLE 数据库移植实战 3) 选择迁移对象 通过已选模式选择您需要迁移数据的表,模式较多时可在已选模式搜索框内输入模式名关键字进行 快速检索。 可迁移此模式下全部表,也可以指定或排除部份表,当您选择“包含指定表”或“排除指定表” 时,请您通过“从列表选择”、“从文件导入”或者在输入框内输入表名将数据添加到包含列表 中,如您未添加数据,则会提示错误导致无法进行下一步并完成新建任务。 21 第4章 ORACLE 数据库移植实战 当您点击“包含指定表”时也可选择多种方式。可直接在输入框内填写表名,多个表用“,”分 割,回车确认;“从列表选择”可在模式中选择指定表;如您要“从文件导入”,可点击“下载导 入模板”,根据导入模板规则填写,然后从文件导入该模板。当您需要“排除指定表”时,同指定 部份表相同操作,但结果相反。 从列表选择表时,可选择对应模式、检索表名关键字、数据条数限制进行快速检索对应的表。点击 “添加”按钮后加入到已选列表,当您想要移除部份表时可以选择对应的表点击“移除”按钮取消 表。选择完成后点击确定。 22 第4章 ORACLE 数据库移植实战 4) 配置参数 迁移工具提供了一系列配置参数用于迁移方案的个性化配置,满足多种迁移场景。配置参数分为 “迁移配置”、“数据类型映射”、“线程配置”三个方面。以下以迁移配置为例,介绍各参数的 含义。其他配置项请参考 KDTS 迁移工具使用指南。 • 表默认处理方式: 包括两个复选框项(“建表/重建表”、“导入数据”),迁移到 KingBaseES 数据库是否需要 建表或者重建表,以及是否只迁移表结构而不迁移数据的选择,根据您的需求选择合适的选项 23 第4章 ORACLE 数据库移植实战 (默认是全选)。 • 表排序依据: 对迁移的表进行排序,可通过“按行数和大字段大小交替”、“行数”、“大小进行排序”(默 认是按行数和大字段大小交替)。 • 表数据读取和写入: 对表数据的读取和写入制定规则,可操作项包括“源库游标读取记录数”(默认是 100)、“批 量写入目标库记录数”(默认是 1000)、“每次批量提交大小”(默认是 100MB)、“LOB 字 段预读取大小”(默认是 4000Byte)。 • 大表拆分阈值依据: 对大表进行拆分迁移,设置拆分界限。 • 非对象设置: 其中包含“主键”、“检查约束”、“唯一约束”、“外键”、“索引”、“触发器”、“自动 转换对象名”。您可以根据自己的需求选择是否迁移这些非对象数据(默认是全选)。 • 数据库连接数设置: 您可以限制迁移程序对源数据库和目标数据库的最大连接数(默认是 100)。 • 执行迁移任务 可将此任务作为预迁移任务点击“保存”,或者作为执行任务点击“保存并迁移”。 • 迁移完成: 迁移结束“状态”栏显示“成功”,则迁移任务成功。 24 第4章 ORACLE 数据库移植实战 • 迁移失败: 迁移结束“状态”栏显示“失败”,则迁移任务失败。失败后可点击详情查看日志有助于解决问题。 • 查看迁移报告及问题处理 迁移完成后,需要确认执行结果,包括迁移数据量,是否有错误发生,可以通过迁移日志和迁移结果进行 查看。 “迁移日志”打印迁移任务执行后的日志,具体可分为“系统日志”、“Error 日志”、“Info 日志”。 “迁移结果”功能的工作区包括“任务执行批次”、“迁移对象”、“总数”、“成功数”、“失败 数”、“略过数”、“操作”。您可以查看历史迁移任务执行的每次记录,以及每次迁移的对象、成功 数、失败数、查看失败任务的错误日志。 25 第4章 ORACLE 数据库移植实战 4.2.6.2.2 SHELL 迁移步骤 • 目录说明 – bin: 启动脚本 – conf: 配置文件 – doc: 帮助文档 – drivers: 数据库连接驱动(注意不同版本驱动的存放目录差别,详见 readme.md) – jdk: jdk – kdms: kdms 程序 – lib: 程序包 – logs: 日志 – result: 迁移报告 • JDK 安装 下载与 KDTS 安装服务器相匹配的 JDK(需要匹配操作系统和 CPU 架构,如 Liunx/AArch64、Linux/x64、 Windows/x64 等),版本选择 JDK 11 或更高。下载地址: https://jdk.java.net/archive/ 将下载的 JDK 解压到 KDTS-CLI/jdk 目录下 注意: – 请使用解压版本的 JDK,以免安装 JDK 影响服务器上的其它应用。 – 不要把当前的 JDK 加入系统环境变量,以免影响服务器上的其他应用。 26 第4章 – 如果需要使用服务器上已有的 JDK,配置 bin/ startup.sh(Windows ORACLE 数据库移植实战 平台为 startup.bat)中的 JAVA_PATH 即可。 • 配置数据库连接信息 – 进入 KDTS-CLI/conf 目录下,打开 application.yml 文件,根据源库类型设置当前激活的源库配置(active: oracle),如下所示: 在正确设置 application.yml 中的 active 项后,打开对应配置文件(kdts-oracle.yml),按实际运行环境进 行配置即可。 – 配置源端数据库连接信息、目标数据库连接信息 编辑 conf/kdts-oracle.yml 文件,编辑源端和目标端连接信息,包括 url、driver-class-name、username、 password 信息,如下图所示: – 配置要迁移的源库模式,数据库对象,涉及到的参数见下图: 27 第4章 ORACLE 数据库移植实战 – 迁移配置参数说明 编辑 conf/kdts-oracle.yml 文件有多个配置参数,可灵活使用。以下列举常用的配置参数。 ∗ fetch-size: 源数据库游标读取记录数,在一定范围内增加该值可提升读取效率,但会增加内存开销。 ∗ table-with-large-object-fetch-size: 28 第4章 ORACLE 数据库移植实战 源数据库含大对象数据表的游标读取记录数,此参数针对有大对象字段的表。 ∗ large-table-split-threshold-rows: 大表拆分阈值行数(当表的行数超过此值时,将对表进行拆分,每块的记录数为此值和表总记录数除 以“拆分最大块数”中的最大值)。 ∗ large-table-split-threshold-size: 大表拆分阈值大小(单位为 M),当表的数据大小(普通字段 + 大对象字段)超过此值时,将对表进 行拆分。 ∗ large-table-split-condition-file: 大表拆分条件定义文件,优先于按行数和大小拆分。 ∗ table-data-filter-condition-file: 表数据过滤条件定义文件。 ∗ use-kdms: 是否使用 kdms 做转换(视图、函数、存储过程、包、触发器)。 ∗ kdms-url: kdms 访问地址,前提是 use-kdms: true ∗ write-batch-size: 目标数据库表数据批量提交记录数. ∗ write-batch-size-big-lob: 目标数据库表数据批量提交记录数,特指大对象数据。 ∗ drop-existing-object: 是否默认删除目标库中已存在的对象(如表、视图等)。 ∗ truncate-table: 是否默认清空目标库中已存在的表数据。 ∗ rename-object: 目标数据库对象重命名,除表名、列名外的其他对象: pk、fk、constraint、unique constraint、index 等。 ∗ useDbmsStats 是否使用数据库系统统计信息(如表的记录数、大小等) ∗ useManualScript 是否使用手工脚本 ∗ useKdms 是否使用 kdms 做转换(视图、函数、存储过程、包、触发器) ∗ kdmsUrl kdms 访问地址 ∗ kdmsSourceDbType kdms 源数据库类型 29 第4章 ORACLE 数据库移植实战 ∗ kdmsTargetDbType kdms 目标数据库类型 ∗ readDataTimeout 读数据超时时长(单位毫秒,0 表示永不超时) ∗ maxRetries 最大重试次数 ∗ retryInterval 重试间隔(毫秒) ∗ readDataCanResume 读数据(中断后)能否恢复 ∗ characterNeedDecoding 字符是否需要解码,处理类似 Oracle 字符集为 US7ASCII、WE8ISO8859P1 等时迁移中文乱码的问题 ∗ encodingCharset 编码字符集(字符集为 US7ASCII、WE8ISO8859P1 设置为”ISO-8859-1”) ∗ decodingCharset 解码字符集(字符集为 US7ASCII、WE8ISO8859P1 设置为”GB18030”) ∗ decodingBytes 是否解码字节(字符集为 US7ASCII 时设为 true) ∗ dataCompareBufferSize 源端数据对比缓冲区大小(行数) ∗ dataCompareAlgorithm 数据对比摘要算法 ∗ maximumPoolSize 源数据库最大连接数 • 线程相关设置 线程相关设置可根据实际服务器配置按比例调整,如果与目标数据库运行在同一服务器上,应将绝大部分资源 分配给数据库。 进入 KDTS-CLI/conf 目录下,打开:kb-thread-config.xml,如下图所示: 30 第4章 ORACLE 数据库移植实战 数据迁移属于 IO 密集型操作,涉及网络络 IO 和磁盘 IO 的交互,一旦发生 IO,线程就会处于等待状态,当 IO 结束,数据准备好后,线程才会继续执行。为提升数据迁移的效率可以多设置�些线程池中线程的数量,避 免任务等待,线程可以去做更多的迁移任务,提高并发处理效率。但不是线程数设置的越高,效率就越高,线 程上下文切换是有代价的。对于对于 IO 密集型线程数的设置公式为:线程数 = CPU 核心数/(1-阻塞系数) , 其中阻塞系数一般为 0.8~0.9 之间,取 0.9 则: 双核 CPU:2/(1-0.9) = 20 64 核 2 路 CPU:64*2/(1-0.9) = 1280 • 启动脚本 – 进入 KDTS-CLI/bin 目录下,编辑: startup.sh – 检查 JDK 的路径是否正确 JAVA_PATH=${BASE_PATH}/jdk – 设置 JVM 内存 系统默认自动获取 JVM 内存参数,若需手动调整 JVM 参数: 31 第4章 ORACLE 数据库移植实战 JAVA_OPT="-server -Dfile.encoding=UTF-8 -Dconfig.path=$ {CONFIG_DIR} -Xmx16g -Xms16g" 主要是: -Xmx16g -Xms16g 参数 – 启动运行脚本 进入 KDTS-CLI/bin 目录,执行: ./startup.sh • 查看迁移报告及问题处理 可以在运行日志(kdts_plus_***.log)中查看到迁移整个过程的信息,包括任务启动、迁移进程、结果汇总 可查看 result 下的迁移结果(在形如“result/2021-12-02_15-15-15/Sehcma1”目录下) – index.html--报告主页面 – detail_XXX.html--XXX 详细信息(如表结构、表数据、表主键等) – FailedScript--失败脚本目录 – IgnoredScript--略过脚本目录 – SuccessScript--成功脚本目录 在迁移过程中一旦某个对象创建失败,KDTS 会将该对象的创建 sql 保留到本次迁移任务文件夹下的 FailedScript 目录下 *.sql 文件,用户可以手动修改后通过 Ksql 或者 KStudio 工具手动执行。 4.2.6.3 在线迁移 在线迁移时,首先需要使用 KDTS 完成历史数据搬迁,之后使用 KFS 进行在线数据追平。 异构数据库数据同步在保障客户业务不停机的前提下,需要一个中间数据库(与源端数据库版本相同的单实例数 据库)做媒介迁移存量数据。操作的过程分两部分。 1. 先将存量数据迁移至中间数据库上,然后 KFS loader 进行初始数据搬迁或通过 ETL 进行初始数据搬迁至异构 数据库(目标数据库)中。 2. 待上一步操作完成,从指定断点开始启动 KFS 源端,正常启动目标端的 KFS 程序(在已经有 KFS 运行的情况 下,可能需要重置 KFS)。 注意:在迁移源库存量数据时避免做以下操作: 1). 运行大型批处理操作会降低复制速率。 2). 备份时执行 DDL 操作将导致 DML 和 DDL 之间存在锁问题 4.2.6.3.1 源端数据库备份 1. 获取当前数据库一致性 scn 号 alter system checkpoint global; select checkpoint_change# from v$database; 假设获取的值为 200725471,该 scn 号将用作启动 KFS 起始的 scn 号。 32 第4章 ORACLE 数据库移植实战 2. 创建备份目录 (需要 sysdba 权限) create directory dump_dir as 'd:/dump_dir'; grant read,write on directory dump_dir to kfs_user; 3. 完整备份数据库 在单实例 oracle 数据库服务器上执行(导出用户 kfs_user 的内容): expdp kfs_user/123456 schemas=kfs_user directory=dump_dir flashback_scn=200725471 dumpfile=DBNAME_20220511. dump 4.2.6.3.2 存量数据迁移 1. 在中间库中创建备份目录 (需要 sysdba 权限) create directory dump_dir as 'E:/dump_dir'; grant read,write on directory dump_dir to kfs_user; 2. 将源端备份的数据文件拷贝至 E:/dump_dir 目录下 3. 将备份的数据还原至中间库 impdp kfs_user_new/123456 directory= dump_dir remap_schema=kfs_user:kfs_user_new table_exists_action=replace dumpfile= DBNAME_20220511.dump 4. 使用数据迁移工具(KDTS)将中间库的数据搬迁至目标数据库。 4.2.6.3.3 启动 KFS 完成数据追平 注意:若 KFS 之前已经部署运行,则源端和目标端需要先执行重置命令 fsrepctl –service XXX reset -all –y, 确认中间表、kufl 文件等被清除。 KFS 部署参考《Kingbase FlySync 安装部署手册.pdf》 源端操作: 先启动 KFS 到 offline 状态,replicator start offline。再使用 ONLINE 命令,将源端的 KFS 完全启起 来,执行 ONLINE 命令时需要指定-from-event 参数,参数值为备份数据库时查询的 scn 值(见步骤 2)。实例 如下: replicator start offline fsrepctl -service oracle online -from-event ora:200725471: 200725471 目标端操作: 启动目标端 KFS,等待数据追平. 追平的判断方法: 33 第4章 ORACLE 数据库移植实战 [hes@h1-105 ~]$ fsrepctl services Processing services command... NAME VALUE ---- ----- appliedLastSeqno: 3 //若源端无新数据产生,则源端和目标端相同 appliedLatency : 0.297 //若源端无新数据产生,延迟时间为 0 role : master serviceName : postgresql serviceType : local started : true state : ONLINE Finished services command... 4.2.6.4 多次迁移 若项目开发过程中,需要定期从一个指定的源数据库迁移到目的数据库中,那么根据迁移时源数据库和应用的状 态,决定离线迁移还是在线迁移。 同时,由于是多次迁移,需要考虑每次迁移时数据库对象的定义是否需要迁移,若不需要,则只迁移数据就可 以,使用 KDTS 和 KFS 都支持只迁移数据;若每次迁移时需要迁移对象定义,则: 1)对于定义发生变更的表,选择迁移定义和数据。可使用 KDTS 的“迁移部分表”功能完成, 详细步骤可参考 KDTS 迁移工具使用指南。 2)对于定义没有发生变更的表,只同步数据即可。可使用 KDTS 的“按条件迁移”功能完成, 详细步骤可参考 KDTS 迁移工具使用指南。 4.2.7 应用代码迁移 4.2.7.1 服务器应用代码迁移 数据移植后,需要迁移应用系统中用到的服务器应用代码,例如 PLSQL。 KDTS 已经完成了存储过程,函数,包等 PLSQL 对象的迁移,只需要关注应用代码中用到的匿名块的代码的迁 移。KingbaseES 的 plsql 语言和 Oracle 的 plsql 高度兼容,需要关注如下 2 点: 1. package 中 Oracle 允许存在同名同参数的存储过程和函数,KingbaseES 不支持,需要重命名为不同名字。 2. KingbaseES 不支持 Object type 的方法的连续调用,例如不支持方法 1. 方法 2. 方法 3,需要改写为 var1 := 方法 1; var2 := var1. 方法 2; var3 := var2. 方法 3; 34 第4章 4.2.7.2 ORACLE 数据库移植实战 客户端应用代码迁移 在应用编程接口方面,KingbaseES 与 Oracle 兼容程度较高,所以,一般情况下,应用程序迁移比较容易。应用 程序迁移通常应和移植系统测试同时进行。这样可及时修改测试过程中发现的问题。 如何在一个应用程序中访问和操纵数据库呢?通常,可采用 API 方式: 该方式通过数据库厂商提供的各种标准应用编程接口在应用程序中与数据库进行交互。常用的应用编程接口如 JDBC 和 ODBC 等。目前,大多数数据库厂商均提供很多标准的数据库 API 及其驱动程序。 在实际应用中,应首先加载驱动程序。加载成功后,利用 API 函数与数据库交互并完成对数据库数据的操作。 4.2.7.2.1 ODBC 对于使用 ODBC 的应用程序,应创建 KingbaseES ODBC 数据源,然后修改应用程序中连接数据库的用户名、 密码等。此外,在 Windows 系统下对于 OLEDB、ADO 和 NDP,则不需创建数据源。 1) Windows 数据源配置 图 4.2.1: Windows 平台 ODBC 数据源配置 1 35 第4章 ORACLE 数据库移植实战 图 4.2.2: Windows 平台 ODBC 数据源配置 2 36 第4章 ORACLE 数据库移植实战 图 4.2.3: Windows 平台 ODBC 数据源配置 3 37 第4章 ORACLE 数据库移植实战 图 4.2.4: Windows 平台 ODBC 数据源配置 4 具体配置参数解释请参考《KingbaseES 客户端编程接口指南-ODBC》。 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] 这一项。 如果没有,则参考增加如下内容: [KingbaseES 9 ODBC Driver] Description = KingbaseES 9 ODBC Driver for Linux Driver = /opt/Kingbase/Odbc/lib/kdbodbcw.so 增加 odbc.ini 文件,内容如下: [kingbase] Description = KingbaseES Driver = KingbaseES 9 ODBC Driver Servername = 127.0.0.1 Port = 54321 38 第4章 ORACLE 数据库移植实战 Username = SYSTEM Password = MANAGER Database = TEST 具体配置参数解释请参考《KingbaseES 客户端编程接口指南-ODBC》 4.2.7.2.2 Oracle11G 访问 KingbaseES 允许在 Oracle 服务器上访问 KingbaseES 数据库,具体操作步骤如下: 1. 检查是否已安装 ODBC;执行命令 odbcinst -j, 展示如下信息: [oracle@localhost ~]$ odbcinst -j unixODBC 2.2.14 DRIVERS............: /etc/odbcinst.ini SYSTEM DATA SOURCES: /etc/odbc.ini FILE DATA SOURCES..: /etc/ODBCDataSources USER DATA SOURCES..: /home/oracle/.odbc.ini SQLULEN Size.......: 8 SQLLEN Size........: 8 SQLSETPOSIROW Size.: 8 2. 测试 isql dsn 连接是否成功;切换用户,以 root 用户编写 odbcinst.ini 和 odbc.ini 两个文件。文件操作需引 用 KingbaseES 的 ODBC 库文件,其路径为/数据库安装目录/Interface/odbc,将整个 odbc 文件夹内容拷贝至 Oracle 服务器上即可。同时也需要 KingbaseES 数据库的用户,以用户名 kes 和密码 123 为例: [oracle@localhost ~]$ su - root [root@localhost ~]# vi /etc/odbcinst.ini [KingbaseES 9 ODBC Driver] Description = KingbaseES 9 ODBC Driver for Linux Driver = /data/oracle/odbc/kdbodbcw.so Debug = 1 CommLog = 1 [root@localhost ~]# vi /etc/odbc.ini [kes] Description = KingbaseES Driver = KingbaseES 9 ODBC Driver Database = TEST Servername = 192.168.124.139 Username = SYSTEM Password = 123 Port = 54324 39 第4章 ORACLE 数据库移植实战 [oracle@localhost ~]$ /usr/bin/isql -v kes +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> select * from t1; +------------+----------------------------------------------------------------------------------------------------+ | id | a | +------------+----------------------------------------------------------------------------------------------------+ | aaaaaa 啊啊啊 | 1 | +------------+----------------------------------------------------------------------------------------------------+ SQLRowCount returns 1 1 rows fetched SQL> [oracle@localhost log]$ dg4odbc Oracle Corporation --- MONDAY APR 25 2022 23:10:16.787 Heterogeneous Agent Release 11.2.0.4.0 - 64bit Production Built with Oracle Database Gateway for ODBC 3. 配置 Oracle 文件 listener.ora 的配置如下: cat /data/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora # listener.ora Network Configuration File: /home/oracle/app/oracle/product/11.2.0/dbhome_1/ network/admin/listener.ora # Generated by Oracle configuration tools. LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.124.128)(PORT = 1521)) ) 40 第4章 ORACLE 数据库移植实战 ) SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SID_NAME=ORCL) (ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1) ) (SID_DESC = (SID_NAME = kes) (ORACLE_HOME = /home/oracle/app/oracle/product/11.2.0/dbhome_1) (PROGRAM = dg4odbc) ) ) ADR_BASE_LISTENER = /home/oracle/app/oracle tnsnames.ora 的配置如下: cat /data/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora # tnsnames.ora Network Configuration File: /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/ admin/tnsnames.ora # Generated by Oracle configuration tools. ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.124.128)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) KES = (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.124.128)(PORT=1521)) (CONNECT_DATA=(SID=kes)) (HS=OK) ) initkes.ora 的配置如下:(init+sid+.ora) cat /data/oracle/product/11.2.0/dbhome_1/hs/ admin/initkes.ora HS_FDS_CONNECT_INFO = kes HS_FDS_TRACE_LEVEL = Debug 41 第4章 ORACLE 数据库移植实战 HS_FDS_SHAREABLE_NAME = /data/oracle/odbc/kdbodbcw.so HS_NLS_NCHAR=UCS2 HS_LANGUAGE=AMERICAN_AMERICA.AL32UTF8 set ODBCINI=/etc/odbc.ini set ODBCINSTINI=/etc/odbc.ini set ODBCSYSINI=/etc set LD_LIBRARY_PATH=/usr/lib64;/usr/lib;/home/oracle/app/oracle/product/11.2.0/dbhome_1/lib set ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1 4. 重载 Isnrctl [oracle@localhost admin]$ lsnrctl reload 成功后就可以看到 KES 实例: [oracle@localhost admin]$ lsnrctl status LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 26-APR-2022 23:53:10 Copyright (c) 1991, 2013, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) STATUS of the LISTENER -----------------------Alias LISTENER Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production Start Date 26-APR-2022 22:58:17 Uptime 0 days 0 hr. 54 min. 52 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener. Listener Log File /home/oracle/app/oracle/diag/tnslsnr/localhost/listener/alert/log.xml ora Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.124.128)(PORT=1521))) Services Summary... Service "ORCL" has 1 instance(s). Instance "ORCL", status UNKNOWN, has 1 handler(s) for this service... Service "kes" has 1 instance(s). Instance "kes", status UNKNOWN, has 1 handler(s) for this service... The command completed successfully [oracle@localhost admin]$ [oracle@localhost admin]$ sqlplus 用户、密码登录 SQL> create database link keslink connect to "kes" identified by "123" using 'kes'; 42 第4章 ORACLE 数据库移植实战 Database link created. SQL> select * from t1@keslink; 4.2.7.2.3 移植 Oracle OCI 应用程序 KingbaseES 支持 OCI 的大部分常用接口。 具体参见手册《KingbaseES 客户端编程接口指南-DCI》。 4.2.7.3 其它应用框架 其它应用框架的使用,请参照客户端编程开发框架的使用指南。如无说明,请及时联系 KingbaseES 支持工程 师。 4.2.8 测试与调试移植系统 任何一个成熟的应用系统如果代码、尤其是关键代码变动后,则应进行全面细致的测试。类似的,更换新的后台 数据库系统以后,也应对移植后的数据库系统进行全面的功能和性能测试。 4.2.8.1 功能测试和排错 功能测试是指对移植数据库系统的每一个模块和功能进行全面的系统回归测试,用以确保新系统各个功能的正确 性。 因此,完成数据库对象和应用程序迁移后,应对移植系统进行全面的功能测试,并对测出问题及时分析、排查和 修改。对那些很难定位的问题,请及时联系 KingbaseES 支持工程师。 4.2.8.2 性能测试和调优 移植系统性能测试和调优是在完成移植系统功能测试后和系统上线前,在实际或模拟生产数据上,对移植系统进 行的性能测试和调优。 移植系统性能测试和调优的主要步骤如下: • 构造测试数据:若条件允许的话,建议构造与实际生产数据规模相同的数据,并模拟构造未来一年、两年、五 年或更长生命周期的数据进行测试。 • 部署测试软硬件环境:根据测试数据规模的大小,配置适当的测试软硬件环境。 • 性能测试:既可采用手动方式,也可利用 TPCC 测试工具、LoadRunner 等工具对移植系统进行自动测试。 • 性能调优:对未达到性能指标的功能模块及其 SQL 语句进行优化并给出相关建议。 43 第4章 ORACLE 数据库移植实战 通常,性能测试效果与测试数据规模、软硬件配置等因素密切相关。因此,建议性能测试时,测试数据规模、软 硬件配置应尽量与将来的实际生产环境一致。必要时,在未来一年、两年、五年等不同模拟数据规模场景下,应分别 测试移植系统的性能指标,用以保证移植系统未来仍能具有良好的性能表现。 44 版权声明 版权声明 北京人大金仓信息技术股份有限公司(简称:人大金仓)版权所有,并保留对本手册及本声明的一切权利。 未得到人大金仓的书面许可,任何人不得以任何方式或形式对本手册内的任何部分进行复制、摘录、备份、修 改、传播、翻译成其他语言、将其全部或部分用于商业用途。 免责声明 本手册内容依据现有信息制作,由于产品版本升级或其他原因,其内容有可能变更。人大金仓保留在没有任何通 知或者提示的情况下对手册内容进行修改的权利。 本手册仅作为使用指导,人大金仓在编写本手册时已尽力保证其内容准确可靠,但并不确保手册内容完全没有错 误或遗漏,本手册中的所有信息也不构成任何明示或暗示的担保。 技术支持 • 人大金仓官方网站:http://www.kingbase.com.cn/ • 人大金仓文档中心:http://help.kingbase.com.cn/ • 全国服务热线:400-601-1188 • 人大金仓技术支持与反馈信箱:support@kingbase.com.cn 45 服务周期承诺 服务周期承诺 由于市场需求在不断变化,技术创新和发展的进程不断加剧,产品的版本更迭不可避免。人大金仓对于产品版本 生命周期的有效管理,有助于您提前规划项目,更好地从产品服务终止上过渡。 表 5: KingbaseES 产品生命周期里程碑 关键里程碑点 定义 产品发布日期 产品正式发布版本,即 GA(general availability)版本的发布日期。 停止销售日期 正式停止销售的日期,版本停止接受订单日。该日之后,产品将不再销售。 停止功能升级日期 在该日期之后,不再提供新特性和新硬件支持。但依旧提供错误修复、安全修复、功 能维护等服务。 停止功能维护日期 在该日期之后,不再维护功能,修复问题。但依旧提供安全修复等服务 停止安全维护日期 在该日期之后,不再发布补丁版本修复中高风险漏洞,仅提供有限的支持。 产品服务终止日期 停止提供产品服务和支持的日期。包括软件维护版本,缺陷修复,以及针对该产品的 所有服务支持(包括服务热线和远程/现场支持)。 服务周期策略 金仓数据库管理系统 KingbaseES 产品确保以下的服务周期: 1)产品自发布之日起至产品停止功能升级(包含新特性、新硬件支持)之日不少于 5 年。 2)产品停止功能升级之日起至产品停止功能维护(主要包括问题修复)之日不少于 4 年。 3)产品功能维护停止之日起至产品停止安全维护(包括中高风险漏洞修复)之日不少于 2 年。 服务终止策略 金仓数据库管理系统 KingbaseES 产品确保在销售后,至少提供 6 年的服务支持。 注意: 人大金仓将会综合各方因素来确定产品服务终止日期。并将在实际产品服务终止日期之前至少 90 天,通过公 46 服务周期承诺 开方式宣布产品服务终止日期。 47

相关文章