4. 应用迁移流程

本文档描述了一套完整的数据库系统评估与迁移方案,目的是帮助客户更明确的了解数据库系统迁移至KingbaseES的流程、方法、关键节点及注意事项,依据数据库系统迁移全过程方法论及各关键节点的流程定义,对数据库系统的实际迁移操作进行指导和建议。

本章节包含以下内容:

  • 迁移方案设计
  • 迁移评估
  • 迁移准备
  • 数据迁移
  • 应用迁移
  • 测试与调试移植系统
  • 系统割接

4.1. 迁移方案设计

一个数据库的完整替代过程包括下图中内容,需要考虑从功能移植、性能验证、可用保障以及应用交割策略。

mysql workbenc 异构迁移 异构数据库数据迁移_mysql workbenc 异构迁移

人大金仓提供应用迁移全过程的支持服务。

整体迁移方案以方法论为指导,以过程为规范,以方案为基准,以自动化工具为辅助、以自动化全量回归为驱动、以迭代优化为保障,实现最大程度的自动化、最低风险的可控无痛迁移。

总体上,迁移方法分为迁移评估、方案设计、流程设计、自动化迁移、自动化测试验证以及迭代优化六大阶段。迁移全程,执行严格的项目的管理及风险控制流程。

  • 迁移评估:

划定迁移范围,通过《数据库需求调研表》以及《迁移工作量评估》进行风险和工作量评估,也可以通过人大金仓在线迁移评估工具 KDMS 发现存在的兼容性问题,预估其工作量,标识出主要风险点,争取在迁移之前了解各种潜在风险,做到无痛迁移。

  • 方案设计:

基于迁移评估,定制迁移整体方案,明确迁移计划、资源需求、所需环境以及风险规避的方法等,包括使用离线迁移还是在线迁移方案。

  • 流程设计:

基于成熟的迁移流程,针对客户具体情况,定制迁移流程,尽量降低过程风险。其中,涉及评估评估、迁移准备流程、数据迁移流程、应用迁移流程、自动化全量功能回归测试验证、性能优化流程及方法,以及配合系统割接的方法等。

  • 自动迁移:

实现数据库迁移以及应用系统迁移。其中:

  • 数据库迁移工具KDTS-PLUS

  • 应用迁移采用PLSQL调试功能,自动化测试工具Katalon Studio实现全量功能回归。

  • 测试验证:

自动化测试驱动的迭代验证过程,通过自动化测试工具Katalon,保证迁移后所有功能完好无损。

  • 迭代优化:

通过性能监控工具 Kmonitor 中动态运行时性能优化分析发现性能瓶颈并优化,多次迭代,解决系统中高频、低性能SQL的性能问题。

整体迁移过程中,关注范围定义、人员计划、资源计划、进度计划、风险管理以及沟通管理等,保障迁移以最高性价比成功实施。

为保障成功,迁移项目需配备合理的资源,包括自动迁移专家、应用开发人员、业务人员、系统专家,相应软硬件资源等。

具体的迁移步骤如下:

  1. 迁移评估
  2. 迁移准备
  3. 数据迁移
  4. 应用迁移
  5. 测试验证
  6. 系统割接

4.2. 迁移评估

4.2.1. 确定移植目标

开始迁移前,应根据用户的实际需求,确定移植目标。这些目标诸如:

  • 迁移源数据库的规模。
  • 迁移源数据库的数据库对象的种类和特征,如简单和复杂迁移对象所占比例等。
  • 迁移的难易程度,如是否迁移大对象,是否迁移大量约束等。
  • 迁移的工期要求。
  • 迁移过程中源应用和源数据库是否可以暂停。
  • 对目标系统的技术指标要求,诸如平台、版本、应用编程接口、工具、可用性、安全性和性能指标要求等。

明确移植目标以后,则可开始移植任务评估。可以把《数据库需求调研表》作为工作牵引和记录。

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分别部署在不同的物理机器上。
  • 为确保迁移效率,应尽量把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-PLUS 完成源库中所有对象定义和数据的搬迁。若是在线迁移,则需要首先使用 KDTS-PLUS 完成历史数据搬迁之后,使用 KFS 完成数据的追平。

使用 KDTS-PLUS 将源数据库中的数据迁移到 KingabseES 中,目前 KDTS-PLUS 支持Oracle、SQLServer、MySQL、DB2等多种数据源。

数据迁移时,可以按照 KDTS-PLUS 手册和 KFS 手册中关于性能调优的部分,根据cpu设置并发线程数,提高迁移速度。

源数据库中数据类型对KingbaseES的数据类型的转换,有默认规则,用户也可以自定义数据类型转换。

数据迁移完成后,需要确认迁移结果。迁移工具自动进行源库和目的数据库的数据量对比,确定数据迁移无损正确。 若发生错误,也请参考KDTS-PLUS的 “ 迁移结果 ” 章节进行处理,也可以使用KDTS-PLUS的二次迁移功能,再次进行迁移。

4.5. 应用迁移

在应用编程接口方面,KingbaseES支持的非常丰富,所以,一般情况下,应用程序迁移比较容易。应用程序迁移通常应和移植系统测试同时进行。这样可及时修改测试过程中发现的问题。

下面是常用应用编程接口的移植说明:

  • JDBC:对于使用JDBC的应用程序,只需把Oracle的JDBC驱动程序和数据库连接字符串替换为KingbaseES的对应内容即可。此外,KingbaseES的JDBC驱动程序存放在数据库安装程序目录的JDBC文件夹内,其中 kingbase8-8.6.0.jre6.jar 对应的JDK1.6版本,kingbase8-8.6.0.jre7.jar 对应的JDK1.7版本, kingbase8-8.6.0.jar 对应的JDK1.8版本。
  • ODBC:对于使用ODBC的应用程序,应创建与Oracle同名的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数据源配置

mysql workbenc 异构迁移 异构数据库数据迁移_bc_02

图 4.5.1 Windows 平台 ODBC 数据源配置 1

mysql workbenc 异构迁移 异构数据库数据迁移_bc_03

图 4.5.2 Windows 平台 ODBC 数据源配置 2

mysql workbenc 异构迁移 异构数据库数据迁移_java_04

图 4.5.3 Windows 平台 ODBC 数据源配置 3

mysql workbenc 异构迁移 异构数据库数据迁移_数据库_05

图 4.5.4 Windows 平台 ODBC 数据源配置 4

具体配置参数解释请参考KingbaseES V8.6 手册中的 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 8 ODBC Driver] 这一项。 如果没有,则编写一个模板文件 template_file1,包含如下内容:

[KingbaseES 8 ODBC Driver]
Description = KingbaseES 8 ODBC Driver for Linux
Driver = /opt/Kingbase/Odbc/lib/kdbodbcw.so

增加odbc.ini文件,内容如下:

[kingbase]
Description = KingbaseES
Driver = KingbaseES 8 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 V8

JDBC基本使用

--声明连接

Connection con;

--加载驱动程序

Class.forName ("oracle.jdbc.driver.OracleDriver");

--连接串

String url = "jdbc:oracle:thin:@192.168.0.1:1521:databasename";

--获得连接

con= DriverManager.getConnection(url,user,pwd);

--声明连接

Connection con;

--加载驱动程序

Class.forName("com.kingbase8.Driver");

--连接串

String url = "jdbc:kingbase8://192.168.0.1:54321/databasename";

--获得连接

con= DriverManager.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 中增加如下声明:


<bean id="processEngineConfiguration"

    class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

    <property name="jdbcDriver" value="org.postgresql.Driver"></property>

    <property name="jdbcUrl" value="jdbc:postgresql://localhost:54321/test">
        </property>

    <property name="jdbcUsername" value="test"></property>

    <property name="jdbcPassword" value="test"></property>

    <!-- 没有表创建表 -->

    <property name="databaseSchemaUpdate" value="true"></property>

</bean>


更多关于Activiti的使用,请参见 KingbaseES客户端编程开发框架-Activiti 。

4.5.1.4. Flyway

适配 Flyway 需要直接使用pg形态的驱动,即直接使用pg的驱动类(org.postgresql.Driver)和连接串("jdbc:postgresql://localhost:54321/test")。

如果数据库使用了Oracle模式的plsql,需要使用ES对应版本的Flyway包替换用户的Flyway包。

4.5.1.5. Liquibase

适配 Liquibase 需使用pg形态的驱动,即直接使用pg的驱动类(org.postgresql.Driver)和连接串(jdbc:postgresql://localhost:54321/test)。

注意:liquibase创建包含blob和clob类型的表时,需要使用<sql></sql>标签定义sql语句,不能使用liquibase提供的列属性type指定列类型,否则blob会被映射为oid类型,clob会被映射为text类型。在changelog文件中中声明建表语句:


<?xml version="1.0" encoding="UTF-8"?>

  <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog

        http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">

    <changeSet id="1" author="test">

        <sql>

            create table person(

            id serial primary key,

            name text,

            date date,

            sex bool,

            blob blob,

            clob clob

            );

        </sql>

    </changeSet>

  </databaseChangeLog>


4.5.1.6. Hibernate

表 4.5.2 Hibernate的比较说明

说明

Oracle

KingbaseES V8

Hibernate基本使用

定义 hibernate 配置文件,根据用户选 择更改以下配置文件。

在 hibernate.properties 中增加如下声明:

hibernate.dialect=org. hibernate.dialect. OracleDialect

在hibernate.cfg.xml 中增加如下声明:

<property name="dialect">org. hibernate. dialectOracleDialect </property>

在persistence.xml 中增加如下声明:

<property name ="hibernate.dialect" value="org.hibernate.d ialect.OracleDialect" />

定义 hibernate 配置文件,根据用户选 择更改以下配置文件。

在 hibernate.properties 中增加如下声明:

hibernate.dialect=org. hibernate.dialect. Kingbase8Dialect

在hibernate.cfg.xml 中增加如下声明:

<property name="dialect">org. hibernate.dialect. Kingbase8Dialect </property>

在persistence.xml 中增加如下声明:

<property name ="hibernate.dialect" value="org.hibernate.d ialect.Kingbase8Dialec t" />

KES方言包

适用范围

hibernate-2.0.dialect.jar

2.0<=适用范围<2.1

hibernate-2.1.dialect.jar

2.1<=适用范围<3.0

hibernate-3.0.dialect.jar

3.0<=适用范围<3.0.3

hibernate-3.0.3.dialect.jar

3.0.3<=适用范围<4.0

hibernate-4.0.dialect.jar

4.0<=适用范围

4.5.1.7. MyBatis

目前Mybatis3.2.8,Mybatis3.3.0和Mybatis3.4.5均已通过KingbaseES V8 版本适配的验证测试

MyBatis的jar包可以从官方网站下载,Mybatis所以使用的JDBC包kingbase8-8.6.0.jar位于$KINGBASE_HOME/interface/jdbc目录下。使用时将Mybatis包和JDBC包导入到项目的Libraries中并定义相关配置项即可。

定义Mybatis配置文件,跟据用户选择,更改一下配置文件。

在config.xml中配置JDBC的驱动信息参数,数据库服务器信息参数和登陆用户信息参数。当然,这些参数也可以根据用户应用需求,单独生成property文件,针对不用的应用场景,导入不同的属性文件。这里以property为例说明下config.xml的配置使用。

在property 中增加如下声明:


jdbc.driverClassName=com.kingbase8.Driver
jdbc.url=jdbc:kingbase8://192.168.229.128:54322/test
jdbc.username=登录用户名
jdbc.password=登录用户密码
在config.xml 中增加如下声明:

   <environments default="development">
     <environment id="development">
       <transactionManager type="JDBC"/>
       <dataSource type="POOLED">
         <property name="driver" value="${jdbc.driverClassName}"/>
         <property name="url" value="${jdbc.url}"/>
         <property name="username" value="${jdbc.username}" />
         <property name="password" value="${jdbc.password}" />
       </dataSource>
     </environment>
   </environments>


具体使用样例请参考KingbaseES V8.6 手册中MyBatis章节

或者MyBatis 官网http://www.mybatis.org/mybatis-3/zh/index.html

4.5.1.8. PHP

目前支持的版本有:

X86

龙芯

飞腾

Windows

PHP5.2.x, PHP5.3.3, PHP5.4.x, PHP5.5.x, PHP5.6.2, PHP5.5.22, PHP7.2.0

PHP5.4.0, PHP5.4.16,

PHP5.6.x

PHP5.6.22

PHP5.3.3,

PHP7.2.0

打开 PHP 目录下的 php.ini ,找到 extension_dir="./",修改其为pdo_kdb.so 文件所在目录的路径。

添加扩展库,在 php.ini 中找到 ;extension=*.so (前面的“;”表示注释),添加 extension=pdo_kdb.so ,表示将 KingbaseES 库作为扩展库供 PHP 加载。验证是否加载成功,在 php 的安装目录下找到程序 php,在当前路径下,在终端程序中运行 ./php -m(最好安装 php 在默认路径 /usr/local 下,可以直接在终端运行程序 php -m),查看输出列表中是否有“pdo_kdb”,如果有表示加载成功,没有表示加载失败。

数据库连接示例


$dsn = 'kdb:host=localhost;dbname=TEST;port=54321';
$user = 'SYSTEM';
$password = '123456';
$dbh = null;
try {
    $dbh = new PDO($dsn,$user, $password, array(PDO::ATTR_ERRMODE =>
  PDO::ERRMODE_EXCEPTION));
} catch (Exception $e) {
    echo 'Connection Failed: ' . $e->getMessage() ."\n";
}
return $dbh;


详细介绍请参看 KingbaseES客户端编程接口指南-PHP PDO

4.5.1.9. PERL

目前支持的版本有:

X86

龙芯

飞腾

Windows

PERL5.16, PERL5.18

PERL5.16, PERL5.18

PERL5.16, PERL5.18

PERL5.16.3

下面的例子描述了如何建立与数据库的连接以及获取结果集。


#!/usr/bin/perl

use DBI;
use DBD::KB;
printf("before connect\n");
$dbh = DBI->connect("DBI:KB:dbname=TEST;host=192.168.4.8", 'SYSTEM', 'MANAGER');
printf("after connect\n");
$sth = $dbh->prepare("select 123 as a, 456 as b");
$sth->execute();
while(@row = $sth->fetchrow_array())
{
   print "row = @row\n";
}


详细介绍请参看 KingbaseES客户端编程接口指南-Perl DBI

4.5.1.10. Golang

目前支持的版本有:

X86

龙芯

飞腾

Windows

Golang1.11.5

Golang1.11.5

连接示例:


package main

import (
    "database/sql"
    "fmt"
    _ "kingbase.com/gokb"
)

const (
    host     = "127.0.0.1"
    port     = 54321
    user     = "system"
    password = "123456"
    dbname   = "TEST"
)

func main() {
    connInfo := fmt.Sprintf("host=%s port=%d user=%s "+
        "password=%s dbname=%s sslmode=disable",
        host, port, user, password, dbname)

    db, err = sql.Open("kingbase", connInfo)
    if err != nil {
        panic(err)
    }
    err = db.Ping()
    if err != nil {
        panic(err)
    }
    fmt.Println("Connection test success!")
    db.Close()
}


详细介绍请参看 KingbaseES客户端编程接口指南-Gokb

4.5.1.11. Nodejs

目前支持的版本有:

X86

龙芯

飞腾

Windows

NodeJS 8

NodeJS 10

NodeJS 12

NodeJS 8

NodeJS 10

NodeJS 12

NodeJS 8

NodeJS 10

NodeJS 12

NodeJS 8

NodeJS 10

NodeJS 12

使用 Client.connect() 连接数据库。


/* 导入Nodejs驱动模块 */
const { Client } = require('kb')

/* 实例化Client对象 */
const client = new Client({
  user: 'SYSTEM',        /* 用户名 */
  host: '192.168.0.102',         /* 数据库服务器IP */
  database: 'TEST',         /* 要连接的库 */
  password: '123456',       /* 密码 */
  port: 54321,        /* 端口 */
  ssl: false,      /* 是否使用ssl加密,true/false 默认值为false */
})

/* 连接数据库 */
client.connect(err => {
  if (err) {
    console.error('connection error', err.stack)
  } else {
    console.log('connected')
  }
})


4.5.1.12. ADO.NET

ES 提供Kdbndp.dll用来支持.NET平台访问。

说明

Oracle

KingbaseES V8

net基本使用

--驱动名称

Oracle. ManagedDataAccess.dll;

--加载驱动程序

1、安装Oracle Data Provider for .NET;

2、通过nuget 包安装,命令如下:

Dotnet add package Oracle. ManagedDataAccess --version 19.9.0

--连接串

string str =

"Data Source= (DESCRIPTION=(ADDRESS =(PROTOCOL=TCP)(HOST= 127.0.0.1)(PORT=1521) )( CONNECT_DATA=( SERVICE_NAME=orcl))); Persist Security Info=True;User ID=xxx;Password=xxx;"

--获得连接

using Oracle. ManagedDataAccess. Client;

OracleConnection con = new OracleConnection(str) ;

con.Open();

if (con.State == ConnectionState.Open)

{

Message Box.Show("连接成功");

}

--驱动名称

Kdbndp.dll;

--加载驱动程序

通过编译环境 中引用添加,引用驱动

--连接串

const string Connection String = "Server=192.168.28.152 ;User ID=SYSTEM; Password=123456; Database=TEST; Port=54331";

--获得连接

try

{

Conn = new KdbndpConnection (ConnectionString);

Conn.Open();

strError = "【数据库连接】 数据库连接成功";

}

catch

(KdbndpException e)

{

if (Conn != null)

Conn.Close();

if (e.Message == "3D000")

strError = "Please create a database test1, owned by user kdbndp_tests";

else if (e.Message == "28P01")

strError = "Please create a user kdbndp_tests as follows: create user kdbndp_tests with password 'kdbndp_tests'";

else

throw;

}

4.5.1.13. EF6

ES提供EntityFramework6.Kdbndp.dll用来支持Windows平台下.Net的EF6框架。

连接数据库的配置.

说明

Oracle

KingbaseES V8

ef core基本使用

--驱动名称

Oracle. ManagedDataAccess.dll;

--加载驱动程序

1、安装Oracle Data Provider for .NET;

2、通过nuget 包安装,命令如下:

Dotnet add package Oracle. ManagedDataAccess --version 19.9.0

--连接串

string str =

"Data Source= (DESCRIPTION=(ADDRESS =(PROTOCOL=TCP)(HOST= 127.0.0.1)(PORT=1521) )(CONNECT_DATA=( SERVICE_NAME=orcl))); Persist Security Info=True;User ID=xxx;Password=xxx;"

--获得连接

自定义数据模型, 应用数据模型,遵循ef 6 框架使用标准

CommonDBContext db = new CommonDBContext()

--驱动名称

EntityFramework6. Kdbndp.dll;

--加载驱动程序

通过编译环境 中引用添加,引用驱动

--连接串

const string ConnectionString = "Server=192.168.28.152 ;User ID=SYSTEM; Password=123456; Database=TEST; Port=54331";

--获得连接

自定义数据模型, 应用数据模型,遵循ef6 框架使用标准

CommonDBContext db = new CommonDBContext()

4.5.1.14. EFcore

ES提供Kdbndp.EntityFrameworkCore.KingbaseES.dll用来支持Windows平台下.Net的EF6框架。

连接数据库的配置。

说明

Oracle

KingbaseES V8

ef core基本使用

--驱动名称

Oracle. ManagedDataAccess. core.dll;

--加载驱动程序

1、安装Oracle Data Provider for .NET;

2、通过nu get包安装,命令如下:

dotnet add package Oracle. ManagedDataAccess. Core--version 2.19.90

--连接串

string str =

"Data Source= (DESCRIPTION=(ADDRESS =(PROTOCOL=TCP)(HOST= 127.0.0.1)(PORT=1521) )(CONNECT_DATA=( SERVICE_NAME=orcl))); Persist Security Info=True;User ID=xxx;Password=xxx;"

--获得连接

自定义数据模型, 应用数据模型,遵循 efcore 框架使用标准

CommonDBContext db = new CommonDBContext()

--驱动名称

Kdbndp.EntityFramework Core.KingbaseES.dll;

--加载驱动程序

通过编译环境 中引用添加,引用驱动

--连接串

const string ConnectionString = "Server=192.168.28.152 ;User ID=SYSTEM; Password=123456; Database=TEST; Port=54331";

--获得连接

自定义数据模型, 应用数据模型,遵循 efcore 框架使用标准

CommonDBContext db = new CommonDBContext()

4.5.1.15. QT

目前支持的版本有:

X86

龙芯

飞腾

Windows

Qt4.8.6

Qt5.6.3

Qt4.8.6

Qt5.6.3

Qt4.8.6

Qt5.6.3

Qt4.8.6

Qt5.6.3

说明

Oracle

KingbaseES V8

QT4/QT5基本使用

--驱动名称

QOCI/QOCI8;

--加载驱动程序

Windows: 将驱动放置对应 版本的安装目下plugins/ sqldrivers下,例如:

D:Qt4.8.7pluginssqldrivers

Linux:

/usr/local/Qt-5.6.1/ plugins/sqldrivers

--连接串

db=QSqlDatabase ::addDatabase("QOCI") ;

db.setHostName(host);

db.set DatabaseName(dbName);

db.setUserName(user);

db.setPassword (password);

db.setPort(port);

--获得连接

db.open();

--驱动名称

QKINGBASE;

--加载驱动程序

Windows: 将驱动放置对应 版本的安装目下plugins/ sqldrivers下,例如:

D:Qt4.8.7pluginssqldrivers

Linux:

/usr/local/Qt-5.6.1/ plugins/sqldrivers

--连接串

db=QSqlDatabase:: addDatabase ("QKINGBASE");

db.setHostName(host);

db.set DatabaseName(dbName);

db.setUserName(user);

db.setPassword (password);

db.setPort(port);

--获得连接

db.open();

4.5.1.16. Python

说明

Oracle

KingbaseES V8

Python2/3基本使用

--驱动包

cx_Oracle-6.4. 1-cp37-cp37m-win32

--使用方言包

pip install cx_Oracle-6.4. 1-cp37-cp37m-win32.whl

--连接串

connInfo = "用户名/密码@IP :端口号/SERVICE_NAME"

--获得连接

conn = cx_Oracle. connect('用户名/ 密码@IP:端口号/ SERVICE_NAME')

--驱动包

ksycopg2

--使用方言包

import ksycopg2

--连接串

connInfo = "dbname={} user={} password={} host={} port=

{}".format("TEST", "SYSTEM", "123456", "127.0.0.1", "54321")

--获得连接

conn = ksycopg2. connect(connInfo)

4.5.2. 移植Oracle Pro*C应用程序

将 Oracle 的 Pro*C 工程迁移至 KingbaseES 是极为简单的,通常不需要在翻译后的代码层进行改动,仅需在 KingbaseES 的 Pro*C 运行时库安装后变更一下编译依赖即可。

详细请看 Por*C迁移指南 。

4.5.3. 移植Oracle OCI应用程序

Kingbase V8.6 支持OCI的大部分常用接口。

具体参见手册 《KingbaseES客户端编程接口指南-DCI》。

4.5.4. 修改应用框架

如果应用使用的框架支持多种数据库和各自方言,修改配置使得框架使用postgresql库及其方言。

分享【教育部语言文字系统-应用迁移】:

未修改之前框架适配使用的是oracle的方言和表结构,其中用到了BLOB/CLOB。

经调研框架也支持其他库,例如mysql和postgresql,除oracle外,类型均为bytea/binary,目前解决方法是配置框架使用postgresql库及其方言。

具体修改:

  1. BaseInterceptor.java中Kingbase类型库使用postgresql方言
  2. Spring-Context-Activiti.xml中指定database type为postgres,database schema update设为false
  3. 数据库实例需要配置为大小写不敏感,工作流使用的库需要建在默认schema下

4.6. 测试与调试移植系统

任何一个成熟的应用系统如果代码、尤其是关键代码变动后,则应进行全面细致的测试。类似的,更换新的后台数据库系统以后,也应对移植后的数据库系统进行全面的功能和性能测试。

4.6.1. 功能测试和排错

功能测试是指对移植数据库系统的每一个模块和功能进行全面的系统回归测试,用以确保新系统各个功能的正确性。

因此,完成数据库对象和应用程序迁移后,应对移植系统进行全面的功能测试,并对测出问题及时分析、排查和修改。对那些很难定位的问题,请及时联系KingbaseES支持工程师。

4.6.2. 性能测试和调优

移植系统性能测试和调优是在完成移植系统功能测试后和系统上线前,在实际或模拟生产数据上,对移植系统进行的性能测试和调优。

移植系统性能测试和调优的主要步骤如下:

  • 构造测试数据:若条件允许的话,建议构造与实际生产数据规模相同的数据,并模拟构造未来一年、两年、五年或更长生命周期的数据进行测试。
  • 部署测试软硬件环境:根据测试数据规模的大小,配置适当的测试软硬件环境。
  • 性能测试:既可采用手动方式,也可利用TPCC测试工具、LoadRunner等工具对移植系统进行自动测试。
  • 性能调优:对未达到性能指标的功能模块及其SQL语句进行优化并给出相关建议。

通常,性能测试效果与测试数据规模、软硬件配置等因素密切相关。因此,建议性能测试时,测试数据规模、软硬件配置应尽量与将来的实际生产环境一致。必要时,在未来一年、两年、五年等不同模拟数据规模场景下,应分别测试移植系统的性能指标,用以保证移植系统未来仍能具有良好的性能表现。测试的结果可以填写《KES迁移性能验收》。

4.6.3. 高可用方案测试

高可用性测试安排在功能、性能用例后,测试常见故障情况下,数据库系统的可用性,模拟数据库节点级故障情况下的高可用性。

通过模拟故障测试产品的高可用性,故障模拟包括集群节点软件故障、硬件故障、网络故障等。

  • 系统应能够提供7 X 24 不间断服务。
  • 允许数据库系统单点故障,不会导致系统服务终止。
  • 故障恢复总体时间,记录恢复时间,数据丢失情况以及数据一致性。

同时,需要测试系统运维方案中的备份恢复方案的测试。

4.6.4. 系统管理测试

数据库整体状态监控测试,验证可以通过图形化界面查看主节点及所有节点机的状态。SQL运行状态监控测试,验证可以通过图形化的界面监控SQL语句的运行。具备测试目标如下:

  • 测试产品通过图形化监控能力,能够提供人性化的图形界面,展示数据库的整体状态
  • 展示SQL运行状态及特点SQL的监控等。

4.6.5. 可以使用测试工具

测试工具包括:

  • BenchmarkSQL 5.0
  • Katalon自动化测试工具
  • Loadrunner等

4.7. 系统割接

4.7.1. 割接评估

在进行系统割接前,首先对系统进行割接评估,包括但不局限于如下内容:

  • 数据库及应用系统在实际生产环境中测试是否满足需求
  • 数据库及应用系统对用户感知的影响是否很大
  • 对现有业务产生的影响是否很大
  • 数据库及应用系统的割接是否会影响具体业务运行
  • 是否具备割接的具体条件

4.7.2. 割接准备

应根据业务的特点制定合适的割接方案,为割接操作提供切实可行的依据。

割接操作前,应做好割接准备。割接准备分为两个层面,管理层面准备和技术层面准备。管理层面的准备如割接前的系统公告、割接后客户回访等;技术层面的割接准备,如准备好数据库相关硬件设备和环境等。

4.7.3. 割接操作

在数据库及应用系统割接中,割接操作应包含但不限于如下几个步骤:

  • 原系统停用

将原系统中止对外服务,停止数据访问,保持数据的完整性。中止服务时,请不要关闭原有系统,而是简单地将网络断开,这样,如果迁移后的数据库不能正常使用,可在最短时间内启用原系统。

  • 最终的数据同步

将原生产系统内的数据与KingbaseES数据库环境内的新系统进行最终的数据同步,以便平滑迁移。

  • 新系统上线

基于KingbaseES数据库的应用系统上线,开始对外提供服务。

4.7.4. 回退机制

由于数据库及应用系统割接后,地点和配置都可能发生变化,一些因素有可能导致割接失败。数据库及应用系统割接应在规定的时间窗口内完成,如规定时间内无法完成,或者割接后运行不稳定,则需考虑回退应用系统,拨回配置信息,启用原系统。

4.7.5. 割接后观察

当基于KingbaseES数据库的应用系统上线后,应成立专门的监护小组对割接后的系统进行观察。在割接后观察期中,遇到不稳定运行的系统,要考虑是否回退。如可以解决,在进行问题解决及优化,如需要回退,则启动回退流程。

观察期周期设置取决于具体的应用系统特点,建议观察期在三个完整的业务周期以上。