本部分描述 KingbaseES 的 OCCI 迁移和配置。
本部分包含以下内容:
迁移前准备
工程搭建与迁移
代码迁移与编译
数据库服务与连接配置
迁移后确认
在开始工程迁移前,需要做好一系列准备,包括:
适配度评估
系统环境评估
迁移前,需确认 KingbaseES 所支持的数据类型和函数是否满足您的业务需求。 您可以参考 KingbaseES 的 OCCI 特性支持 章节中的表格,评估是否可以完成迁移工程。
除了特性支持适配度以外,还需要考虑使用的平台是否支持 KingbaseES 数据库。目前 KingbaseES 支持的平台如下:
Windows 系统: 64 位操作系统,可运行 64 位 / 32 位 VS2013
在该平台上,可兼容 release/debug 版本的 OCCI。
Linux 系统: 各种主流的操作系统 64 位发行版本的 CPU 平台,如 x86/arm/mipsel/loongarch64
默认使用 gcc4.8.5 。
注意:
由于在 gcc5.1 版本之后重新实现了 C++ 底层的 string 类和 list 类,为了与原有方式兼容,引入了双重 ABI。新版本 gcc 默认使用新的 ABI, 即使用新版本 C++ 库,也可通过设置 gcc 参数定义宏_GLIBCXX_USE_CXX11_ABI=0(默认 1 表示新 ABI)以表示使用旧版本的 ABI,使用旧版本的 C++ 库。
在使用驱动之前,要明确项目所使用 gcc 版本、是否使用新的 ABI, 以及编译数据库驱动的 gcc 版本。
若项目使用高版本 gcc(大于 5.1)且使用新的 ABI (默认), 在连接低版本 gcc 编译的驱动时,会报错 undefined symbol,因要求提供高版本 gcc 编译的驱动。
若项目所在系统使用高版本 gcc,但在编译应用时指定了(_GLIBCXX_USE_CXX11_ABI=0)且又使用高版本 gcc 编译的数据库驱动,连接是也会报错,应要求提供低版本 gcc 编译的驱动。
工程搭建
工程迁移
Linux 平台工程搭建
Windows 平台工程搭建
4.2.1.1. Linux 平台工程搭建
将 OCCI 库文件拷贝至需求目录,本例的解压目录为 /home/nli/occitest;
2. 添加环境变量 $KINGBASE_CONFDIR(如.bashrc 中添加 "export KINGBASE_CONFDIR=/home/nli/occitest"),该目录下需放置 OCCI 的数据源配置文件 sys_service.conf。如果环境中因使用其他接口库而配置了该环境变量,则可复用该环境变量及其目录下的 sys_service.conf 文件;
3. 将 OCCI 中的 lib 目录添加至环境变量 LD_LIBRARY_PATH 中(如.bashrc 中添加 "export LD_LIBRARY_PATH=/home/nli/occitest/lib:$LD_LIBRARY_PATH");
4. 在 makefile 文件中引入 OCCI 中的头文件目录和库文件目录;
4.2.1.2. Windows 平台工程搭建
将 OCCI 库文件拷贝至需求目录,本例的解压目录为 D:\kbocci\v8r6_occi_win;
2. 添加环境变量 $KINGBASE_CONFDIR(如图所示,在 “控制面板→系统和安全→系统→高级系统设置→环境变量→系统环境变量” 中添加变量 "KINGBASE_CONFDIR",变量值设为配置文件 sys_service.conf 所在的目录);该目录下需放置 OCCI 的数据源配置文件 sys_service.conf。如果环境中因使用其他接口库而配置了该环境变量,则可复用该环境变量及其目录下的 sys_service.conf 文件。
3. 将 OCCI 中的 lib 目录添加至环境变量 PATH 中(如在系统环境变量中的 PATH 变量中添加 "D:\kbocci\v8r6_occi_win\lib_x64\release" 值);
4. 在工程配置文件中引入 OCCI 中的头文件目录和库文件目录。
将 Oracle 的 OCCI 工程迁移至 KingbaseES 是极为简单的,通常不需要在代码层进行改动,仅需在 KingbaseES 的 OCCI 库安装后变更一下编译依赖即可。
工程搭建 章节中详细介绍了金仓 OCCI 库的安装和使用方法,应用层可按照对应的步骤更改编译依赖,或者将原工程代码拷贝后,按照搭建步骤重新搭建依赖 KingbaseES OCCI 库的工程即可。
代码层通常不需要改动,只需要在完成 工程搭建与迁移 之后,即可进行编译。编译流程图如下图所示:
需要通过 sys_service.conf 文件配置数据源。
OCCI 的 sys_service.conf 文件配置与 OCI 的配置方法相同,KingbaseES 的 DCI 兼容了 OCI,因此您可以参考《KingbaseES 客户端编程接口指南 - DCI》的 sys_service.conf 文件配置。
详见 KingbaseES 客户端编程接口指南 - DCI 的 DCI 服务的配置方法与参数说明。
sys_service.conf 中的中括号里的字串代表一个数据源名字, OCCI 程序里中建立连接的地方需要填的是 sys_service.conf 中的数据源名字。
配置文件示例:
[KingbaseES] dbname=test port=54321 host=127.0.0.1 #Print=1 #DCILog=oci.log #DCILogLevel=DEBUG3 #UseExtendedProtocol=1 #UsePackage=1 #AutoCommit=1
迁移完成后,需确认迁移是否成功,以保证迁移后业务正常运行。
迁移完成后,编写一个程序连接到 KingbaseES 数据库,查看是否能连接成功。
程序示例请参考 程序开发示例 中的连接和断开数据库。
尝试运行您的业务,观察是否与迁移前行为一致。
如有疑问,请联系我们的技服人员。