📑前言
在企业推进“国产化替代”与“自主可控”过程中,数据库迁移是最核心、最关键的一环。KingbaseES 内部提供了大量 Oracle 兼容能力,因此实际改造中,往往只需要对导出脚本做少量调整;在迁移对象完全兼容的场景下,甚至可以做到“零改造”迁移。同时,配合 KDTS、KFS 等工具,能够显著降低迁移复杂度,缩短上线周期。
本节围绕“将实际生产 Oracle 系统平滑替换为 KingbaseES”这一目标,完整说明迁移过程中的主要迁移内容、关键步骤以及典型问题与处理方式,帮助团队形成可执行、可落地的迁移方案。
一、主要改造范围(迁移内容)
在实际项目中,从 Oracle 平滑替换到 KingbaseES 通常涉及四大类工作:
- 数据库迁移
- 用户与权限迁移
- 数据迁移
- 应用程序移植
这四项必须严格按顺序执行,否则容易导致迁移过程卡住或返工。
- 数据库是对象的容器,用户是对象的管理者与使用者,因此在迁移数据前必须先完成数据库、用户/模式迁移。
- 应用迁移开始前,需要确认数据库对象已迁移完成,因为应用程序将直接访问这些对象。
- 在多数真实项目里,应用迁移与系统联调/测试往往交叉推进,这样能更快定位问题、缩短周期。
二、数据库、用户与模式改造
目标数据库启动后,需要在 KingbaseES 上创建与 Oracle 相匹配的环境:
- 创建与源 Oracle 同名数据库
- 创建与源 Oracle 同名用户
- 创建与用户同名的 模式(schema)
- 授予该用户使用数据库及模式的权限
同时需要特别注意:目标数据库字符集应与源 Oracle 一致。
若 KingbaseES 已存在同名数据库,则只需登录该数据库并创建同名用户即可。
三、数据迁移策略(在线/离线)
数据迁移阶段,应先明确采用在线迁移还是离线迁移,并制定相应策略:
- 离线迁移:使用 KDTS 完成 Oracle 的全量迁移
- 在线迁移:先 KDTS 迁历史存量,再通过 KFS 做在线追平,保证不停机切换
工具能力说明:
- KDTS:支持 Oracle9i/10g/11g/12c/19c 等到 KingbaseES 的迁移,支持动态加载接口,便于按需迁移。
- KFS:支持同构/异构同步,支持结构迁移、全量迁移、列名映射、where过滤、按条件追平等。
四、应用程序适配与移植
应用移植本质是把 Oracle API 或嵌入式 SQL 方式的应用切换为 KingbaseES 的访问方式,主要包括:
- 驱动程序与连接方式的迁移(JDBC/ODBC 等)
- Oracle 扩展/私有 API 的替换(KingbaseES 未兼容部分)
总体而言,KingbaseES 与 Oracle 在接口层兼容程度较高,因此应用移植通常工作量较少,但需要配合联调测试持续验证。
五、关键实施步骤(项目级迁移方法论)
一个成熟系统的替代升级,需要团队与流程保障。通常从 Oracle 替换到 KingbaseES 可分为 5 个步骤:
- 迁移评估
- 迁移准备
- 数据迁移
- 应用迁移
- 测试与调试
下面对每一步展开说明。
5.1 迁移评估
① 明确替代目标
迁移前需结合业务要求明确目标,例如:
- Oracle 数据库规模
- 数据库对象种类及比例(简单对象/复杂对象)
- 是否存在大对象、约束数量是否多、是否迁移大量约束
- 工期要求
- 迁移期间业务系统是否允许停机
- 对目标系统平台、版本、接口、工具、可用性、安全性、性能指标等要求
② 任务评估(可行性与风险)
迁移评估用于降低未知风险,主要包括:
- 业务压力与性能指标
- 数据规模(对象数量、PL/SQL 规模)
- KingbaseES 不支持特性数量
- 约束数量与种类
- 迁移过程潜在问题
项目评估常见模板包括:Oracle 版本、操作系统、服务器配置、用户事务量、数据库大小、对象统计(表、视图、序列、函数、触发器、同义词等)、约束数量、特性统计(RAC/Standby/ASM/AWR 等是否使用)等。
③ 组建迁移团队
迁移人员至少应具备:
- 熟悉 Oracle 与 KingbaseES 的 SQL/PLSQL 语法与兼容特性
- 熟悉双方的应用接口与驱动体系
- 熟悉各类客户端工具(PL/SQL Developer、JDBC/ODBC 等)及差异点
| 项目 | 描述 |
|---|---|
| Oracle数据库版本 | 8.1.7.4 |
| 操作系统版本 | Windows 2000/2003 Server |
| 服务器型号 CPU配置 内存(RAM) 磁盘(Disk Profile) | 联想/SUN |
| 服务器个数(# of Servers) | 1或2 |
| 用户数/天(# Users/Day) 事务量/天(# Transactions /Day) | 几十/天 |
| 当前数据库大小 数据库增长速率(#GB/month)目标用户(Schema) | 几个GB |
| 应用方式(OLTP/OLAP) | OLTP |
| 应用服务器(中间件) | 无 |
| 客户端应用类型 (C/S,B/S) | C/S |
| 客户端应用编程语言 | Delphi7 |
| 客户端应用连接接口 | ODAC/ADO |
| 是否深入SQL应用 | 无 |
| 监控工具 | 无 |
| 备份方式 | Exp/imp |
| 其它工具(备份软件等) | 无 |
| 高可用要求 | 较高 |
| 高可用配置方案 | VCS或单机 |
| 项目 | 描述 |
|---|---|
| 迁移分析日期 | 20220105下午 |
| 迁移分析人员KingbaseES版本 | ABC |
| Oracle 版本 OracleSchema | 11.1.7.4 |
| Oracle DB Size (GB) | 几个GB |
| Oracle Schema Size (MB) | 几个GB |
| 类型 | 小计 | 备注 |
|---|---|---|
| Function | 7 | 较少用 |
| Index | 有 | |
| LOB | 有 | 最大到几十MB,主要是照片、word、视频(较少) |
| Materialized View | 有>10 | |
| Procedure | 25 | |
| Sequence | 有>10 | |
| Table | 1660 | 约束较多 |
| Table Partition | 无 | |
| Trigger | <30 | |
| JOB | 无 | |
| Package | 无 | |
| Package Body | 无 | |
| Type | 无 | |
| View | >200 | |
| Synonym | >300 | |
| 对象共计 |
| 类型 | 小计 | 备注 |
|---|---|---|
| CHECK OR NOT NULL | ||
| FOREIGN KEY | ||
| PRIMARY KEY | ||
| UNIQUE KEY | ||
| OTHER | ||
| 约束共计 |
| 特性 | 小计 | 备注 |
|---|---|---|
| 数据压缩 | 无 | |
| 索引组织表 | 无 | |
| 维度(Dimensions) | 无 | |
| 物化视图 | 无 | |
| 存储概要 | 无 | |
| 高级队列 | 无 | |
| 空间数据管理 | 无 | |
| 全文搜索 | 无 | |
| 数据库链接 | 无 | |
| 数据复制 | 无 | |
| RAC | 无 | |
| 逻辑Standby | 无 | |
| 物理Standby | 无 | |
| 自动存储管理 ASM | 无 | |
| 自动工作负载信息库 AWR | 无 | |
| 共计 |
5.2 迁移准备
① 部署迁移环境
建议:
- 目标数据库服务器 CPU/内存/网络尽量采用更高配置
- 若 Oracle 数据规模较大(如 >1GB),建议 Oracle 与 KingbaseES 分开部署
- 两端尽量在同一局域网内,提升迁移效率
② 安装工具与软件
迁移前建议准备:
Oracle、KingbaseES、PL/SQL Developer、JDBC/ODBC、开发工具、OCI/DCI、测试工具(TPC-C/LoadRunner)等。
数据规模较大时,建议提前调优 KingbaseES:
- 增大 shared_buffers(建议内存 1/4)
- 预先创建更大的日志文件
- 预先分配足够表空间文件等
③ 获取源 Oracle 信息
包括:
- IP 地址
- 实例名
- 端口
- 用户/密码
在目标 KingbaseES 上:
- 创建与 Oracle 用户同名用户(如 scott)
- 创建与 Oracle 同名数据库(如 ORCL),属主为 scott
- 创建同名 schema(scott),属主 scott
5.3 关键兼容与风险处理
① Oracle 编码方式检查
select userenv('language') from dual;
示例结果:
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
② 数据规模统计
按 GB 排序统计各表大小:
select segment_name,bytes/1024/1024/1024
from user_segments
where segment_type='TABLE'
order by bytes desc;
③ 日期格式典型问题(非常关键)
默认时间格式为 ISO, MDY。若发现历史数据含年份如 0099-09-30 00:00:00,迁移工具可能输出 99-09-30 00:00:00,在 KingbaseES 被解析为月份导致报错:
ERROR: date/time field value out of range
建议通过兼容开关:
set ora_date_sytle = true;
并确保 datestyle 配置为 datestyle ='ISO,YMD'。
5.4 KingbaseES Oracle兼容参数建议配置
常见会话级兼容参数:
1)nls_length_semantics
决定 char 字段默认单位 byte/char。若不一致可能导致迁移 char 类型后出现多余空格。
Oracle 查询方式:
select value from nls_database_parameters
where parameter = 'NLS_LENGTH_SEMANTICS';
2)search_path
模式搜索路径设置,例如 $USER,SCOTT,PUBLIC
3)default_with_oids
OID 伪列开关,用于兼容 Oracle 的 ROWID。若 Oracle 使用 ROWID 建议开启并替换。
六、数据迁移实施(KDTS / KFS)
6.1 离线迁移(KDTS)
WEB 模式流程
- 创建源数据库连接(Oracle)
- 创建目标数据库连接(KingbaseES)
- 新建迁移任务(向导式)
- 选择数据源
- 选择模式
- 选择迁移对象(全部/指定/排除)
- 配置参数(建表、数据、约束、索引、触发器、线程等)
- 执行迁移任务(保存 / 保存并迁移)
- 查看迁移报告与日志,处理失败对象脚本
SHELL 模式流程
工程目录结构:
- bin / conf / doc / drivers / jdk / kdms / lib / logs / result
JDK 建议使用 11+ 解压版放入 KDTS-CLI/jdk。
配置连接信息:
application.yml激活源库(active: oracle)- 配置
datasource-oracle.yml中的 url/driver/username/password - 配置模式与对象迁移范围
常用参数如 fetch-size、拆分阈值、大对象批量写入、是否重建对象、truncate 等。
线程设置位于 kb-thread-config.xml,IO 密集型线程建议按公式:
线程数 = CPU核心数 / (1 - 阻塞系数)
阻塞系数通常 0.8~0.9
6.2 新建迁移任务
KDTS采用向导页的方式指导用户新建迁移任务,简单易用,用户依次配置“选择数据源”-“选择模式”-“选择迁移对象”-“配置参数”,即可快速配置一个迁移任务。
- 选择数据源
- 选择模式
- 选择迁移对象
可迁移此模式下全部表,也可以指定或排除部份表,当选择“包含指定表”或“排除指定表”时,请通过“从列表选择”、“从文件导入”或者在输入框内输入表名将数据添加到包含列表中,若未添加数据,则会提示错误导致无法进行下一步并完成新建任务。
从列表选择表时,可选择对应模式、检索表名关键字、数据条数限制进行快速检索对应的表。点击“添加”按钮后加入到已选列表,当想要移除部份表时可以选择对应的表点击“移除”按钮取消表。选择完成后点击确定。
- 配置参数
执行迁移任务
查看迁移报告及问题处理
SHELL迁移步骤
工程目录说明 ,使用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或更高。下载地址: jdk.java.net/archive/, 将下载的JDK解压到KDTS-CLI/jdk目录下即可。
备注
- 请使用解压版本的JDK,以免安装JDK影响服务器上的其它应用。
- 不要把当前的JDK加入系统环境变量,以免影响服务器上的其他应用。
- 如果需要使用服务器上已有的JDK,配置bin/startup.sh(Windows平台为startup.bat)中的JAVA_PATH即可。
配置数据库连接信息,配置步骤分为3步:激活配置文件、配置数据库连接、配置相关参数。
1)进入KDTS-CLI/conf目录下,打开application.yml文件,根据源库类型设置当前激活的源库配置(active: oracle),如下所示:
在正确设置application.yml中的active项后,打开对应配置文件(datasource-oracle.yml),按实际运行环境进行配置即可。
2)配置源端数据库连接信息、目标数据库连接信息。编辑conf/datasource-oracle.yml文件,编辑源端和目标端连接信息,包括url、driver-class-name、username、password信息,如下图所示:
3) 配置要迁移的源库模式,数据库对象,涉及到的参数见下图:
4) 迁移配置参数说明
编辑conf/datasource-oracle.yml文件有多个配置参数,可灵活使用。以下列举常用的配置参数。
- fetch-size,源数据库游标读取记录数,在一定范围内增加该值可提升读取效率,但会增加内存开销。
- table-with-large-object-fetch-size,源数据库含大对象数据表的游标读取记录数,此参数针对有大对象字段的表。
- 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源数据库类型。
- 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,如下图所示:
数据迁移属于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参数:
<font style="color:rgb(68, 73, 80);background-color:rgb(246, 247, 248);">JAVA_OPT="-server -Dfile.encoding=UTF-8 -Dconfig.path=$\{CONFIG_DIR\} -Xmx16g -Xms16g"</font> 主要是: <font style="color:rgb(68, 73, 80);background-color:rgb(246, 247, 248);">-Xmx16g -Xms16g</font> 参数
- 启动运行脚本
进入 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工具手动执行。
- 在线迁移
在线迁移过程中,为保障异构数据库数据同步且客户业务不停机,需要一个中间数据库(与源端数据库版本相同的单实例数据库)做媒介迁移存量数据。操作的过程分两部分。
- 先将存量数据迁移至中间数据库上,然后KDTS迁移工具进行初始数据搬迁或通过ETL进行初始数据搬迁至异构数据库(目标数据库)中。
- 待上一步操作完成,从指定断点开始启动KFS源端,正常启动目标端的KFS程序(在已经有KFS运行的情况下,可能需要重置KFS)。
备注
在迁移源库存量数据时避免做以下操作:
1). 运行大型批处理操作会降低复制速率。
2). 备份时执行DDL操作将导致DML和DDL之间存在锁问题
源端数据库备份
- 获取当前数据库一致性scn号
alter system checkpoint global;
select checkpoint_change# from v$database;
假设获取的值为200725471,该scn号将用作启动KFS起始的scn号。
- 创建备份目录(需要sysdba权限)
create directory dump_dir as 'd:/dump_dir';
grant read,write on directory dump_dir to kfs_user;
- 完整备份数据库
在单实例oracle数据库服务器上执行(导出用户kfs_user的内容):
expdp kfs_user/123456 schemas=kfs_user directory=dump_dir flashback_scn=200725471 dumpfile=DBNAME_20220511.dump
存量数据迁移
- 在中间库中创建备份目录(需要sysdba权限)
create directory dump_dir as 'E:/dump_dir';
grant read,write on directory dump_dir to kfs_user;
- 将源端备份的数据文件拷贝至E:/dump_dir目录下
- 将备份的数据还原至中间库
impdp kfs_user_new/123456 directory= dump_dir remap_schema=kfs_user:kfs_user_new table_exists_action=replace dumpfile= DBNAME_20220511.dump
- 使用数据迁移工具(KDTS)将中间库的数据搬迁至目标数据库。
启动KFS完成数据追平
备注
若KFS之前已经部署运行,则源端和目标端需要先执行重置命令fsrepctl –service XXX reset -all –y,确认中间表、kufl文件等被清除。 KFS部署参考《Kingbase FlySync 安装部署手册》。
源端操作 ,先启动KFS到offline状态,replicator start offline。再使用ONLINE命令,将源端的KFS完全启起来,执行ONLINE命令时需要指定-from-event参数,参数值为备份数据库时查询的scn值。
replicator start offline
fsrepctl -service oracle online -from-event ora:200725471: 200725471
目标端操作 ,启动目标端KFS,等待数据追平。
提示
追平的判断方法:
[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...
多次迁移
若项目开发过程中,需要定期从一个指定的源数据库迁移到目的数据库中, 那么根据迁移时源数据库和应用的状态,决定离线迁移还是在线迁移。
同时,由于是多次迁移,需要考虑每次迁移时数据库对象的定义是否需要迁移, 若不需要,则只迁移数据就可以,使用 KDTS 和 KFS 都支持只迁移数据; 若每次迁移时需要迁移对象定义,则:
1)对于定义发生变更的表,选择迁移定义和数据。可使用 KDTS的“迁移部分表”功能完成,详细步骤可参考 迁移工具 。
2)对于定义没有发生变更的表,只同步数据即可。可使用 KDTS的“按条件迁移”功能完成,详细步骤可参考 迁移工具 。
应用代码迁移
服务器应用代码迁移
数据迁移后,需要迁移应用系统中用到的服务器应用代码,例如 PL/SQL。
KDTS 已经完成了存储过程,函数,包等 PL/SQL对象的迁移, 只需要关注应用代码中用到的匿名块的代码的迁移。KingbaseES 的 plsql 语言和Oracle的plsql高度兼容, 需要关注如下2点:
- package中Oracle 允许存在同名同参数的存储过程和函数,KingbaseES 不支持,需要重命名为不同名字。
- KingbaseES 不支持 Object type的方法的连续调用,例如不支持 方法1.方法2.方法3, 需要改写为
var1 := 方法1;
var2 := var1.方法2;
var3 := var2.方法3;
客户端应用代码迁移
在应用编程接口方面,KingbaseES与Oracle兼容程度较高,所以,一般情况下,应用程序迁移比较容易。应用程序迁移通常应和迁移后的系统测试同时进行。这样可及时修改测试过程中发现的问题。
通常,在应用程序可采用API方式访问和操纵数据库:
该方式通过数据库厂商提供的各种标准应用编程接口在应用程序中与数据库进行交互。常用的应用编程接口如JDBC和ODBC等。目前,大多数数据库厂商均提供很多标准的数据库API及其驱动程序。
在实际应用中,应首先加载驱动程序。加载成功后,利用API函数与数据库交互并完成对数据库数据的操作。
ODBC
对于使用ODBC的应用程序,应创建 KingbaseES ODBC 数据源,然后修改应用程序中连接数据库的用户名、密码等。此外,在Windows系统下对于OLEDB、ADO和NDP,则不需创建数据源。
- Windows数据源配置
具体配置参数解释请参考 KingbaseES客户端编程接口指南-ODBC 。
- 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
Username = SYSTEM
Password = MANAGER
Database = TEST
具体配置参数解释请参考 KingbaseES客户端编程接口指南-ODBC 。
移植Oracle OCI应用程序
KingbaseES支持OCI的大部分常用接口。
具体参见手册 KingbaseES客户端编程接口指南-DCI 。
其它应用框架
其它应用框架的使用,请参照客户端编程开发框架的使用指南。如无说明,请及时联系KingbaseES支持工程师。
七、测试与调试迁移后的系统
任何一个成熟的应用系统如果代码、尤其是关键代码变动后,则应进行全面细致的测试。类似的,更换新的后台数据库系统以后,也应对迁移后的数据库系统进行全面的功能和性能测试。
功能测试和排错
功能测试是指对迁移后的数据库系统的每一个模块和功能进行全面的系统回归测试,用以确保新系统各个功能的正确性。
因此,完成数据库对象和应用程序迁移后,应对迁移后的系统进行全面的功能测试,并对测出问题及时分析、排查和修改。对那些很难定位的问题,请及时联系KingbaseES支持工程师。
性能测试和调优
迁移后的系统性能测试和调优是在完成迁移得系统功能测试后和系统上线前,在实际或模拟生产数据上,对迁移后的系统进行的性能测试和调优。
迁移后的系统性能测试和调优的主要步骤如下:
- 构造测试数据:若条件允许的话,建议构造与实际生产数据规模相同的数据,并模拟构造未来一年、两年、五年或更长生命周期的数据进行测试。
- 部署测试软硬件环境:根据测试数据规模的大小,配置适当的测试软硬件环境。
- **性能测试:**既可采用手动方式,也可利用TPCC测试工具、LoadRunner等工具对迁移后的系统进行自动测试。
- 性能调优:对未达到性能指标的功能模块及其SQL语句进行优化并给出相关建议。
通常,性能测试效果与测试数据规模、软硬件配置等因素密切相关。因此,建议性能测试时,测试数据规模、软硬件配置应尽量与将来的实际生产环境一致。必要时,在未来一年、两年、五年等不同模拟数据规模场景下,应分别测试迁移后的系统的性能指标,用以保证钱以后的系统未来仍能具有良好的性能表现。