KingbaseES数据库KDTS迁移工具实战指南:从部署到数据迁移全流程
在数据库迁移场景中,当面临堡垒机访问、远程终端操作或系统无图形化界面等情况时,金仓KDTS迁移工具的SHELL版成为高效迁移数据到KingbaseES的关键选择。下面我们就聚焦SHELL版使用说明,从配置、运行日志、迁移报告到数据库优化,完整还原实战流程。
前言
在数据库迁移场景中,当面临堡垒机访问、远程终端操作或系统无图形化界面等情况时,金仓KDTS迁移工具的SHELL版成为高效迁移数据到KingbaseES的关键选择。下面我们就聚焦SHELL版使用说明,从配置、运行日志、迁移报告到数据库优化,完整还原实战流程。
文章目录
一、SHELL版迁移前配置:基础参数设置
SHELL版迁移需通过修改配置文件完成参数定义,核心配置集中在
kdts-plus/conf目录下,需按步骤完成源库、目标库、运行模式等关键参数设置。
1.1 源库类型配置:确定激活配置文件
迁移程序按源数据库类型生成独立配置文件,需先指定当前激活的源库类型。进入
kdts-plus/conf目录,打开application.yml文件,设置spring -> profiles -> active的值为目标源库类型,示例如下:
spring:
profiles:
active: oracle # 准备迁移的数据库,如dm(达梦)、gbase、kingbase、mysql、oracle等,具体的配置在kdts-XXX.yml文件中
若配置为mysql,则对应的配置文件为kdts-mysql.yml,以此类推。
1.2 运行模式配置:迁移与数据对比切换
SHELL版支持“数据迁移”和“数据对比”两种模式,默认是数据迁移模式。若需切换为数据对比模式,在
application.yml文件中,去掉running-mode前的注释并设置参数:
datasource:
type:
source: Hikari # Hikari、Druid、Simple # 源库为gbase8g时,只能选择Simple
target: Hikari # Hikari、Druid、Simple
log:
home: logs # 日志主目录
level: # 日志级别
console-appender: INFO # 控制台输出(OFF、TRACE、DEBUG、INFO、WARN、ERROR)
file-appender: INFO # 文件输出(OFF、TRACE、DEBUG、INFO、WARN、ERROR)
running-mode: DataCompare # 数据比较,注释掉则为默认数据迁移模式
1.3 源数据库配置:细粒度定义迁移范围
根据已设置的源库类型,打开对应的配置文件(如kdts-oracle.yml),完成连接信息、模式筛选、对象迁移规则等配置。
1.3.1 源库连接基础设置
以Oracle 11g为例,配置数据库类型、版本、连接地址、账号密码等信息:
# 源数据库类型
dbType: oracle
# 源数据库版本(9i,10g,11g,12c,19c)
dbVersion: 11g
# 连接字符串
url: jdbc:oracle:thin:@1.2.3.4:1521/orcl
# 驱动类名
driver-class-name: oracle.jdbc.OracleDriver
# 用户名
username: oracle
# 密码
password: 123456
# 数据库连接验证SQL
validationQuery: select 1 from dual
注意:若源库为MariaDB,需按对应关系配置dbVersion,如下表所示:
| MariaDb版本 | MySql版本 | kdts-plus对应的dbVersion |
|---|---|---|
| 5.5、10.0 | 5.5 | 5.5 |
| 10.1 | 5.6 | 5.7 |
| 10.2、10.3、10.4 | 5.7 | 5.7 |
| 10.5、10.6、10.7 | 8.0 | 8.0 |
若MySQL数据库字符集为GBK或GB2312,需在url中添加useUnicode=true&characterEncoding=utf-8。 |
1.3.2 模式与对象筛选配置
- 包含/排除模式:指定需迁移或排除的模式,多个模式用英文逗号隔开,也可填入
"*"迁移当前用户可访问的所有模式:# 要迁移的模式 schemas: Sehcma1,Sehcma2 # 不迁移的模式 schema-excludes: SYS,SYSTEM,MGMT_VIEW,DBSNMP,SYSMAN - 表、视图等对象筛选:通过配置文件或创建
txt文件指定仅迁移或排除的对象,例如:# 只迁移的表,多个表用英文逗号隔开,也可创建conf/tableIncludes.txt文件配置(文件优先) table-includes: Table1,Schema1.Table2 # 不迁移的表,多个表用英文逗号隔开,也可创建conf/tableExcludes.txt文件配置(文件优先) table-excludes: Table3,Schema2.Table4 # 只迁移的视图,多个视图用英文逗号隔开,也可创建conf/viewIncludes.txt文件配置(文件优先) view-includes: View1,Schema1.View2 - 迁移对象类别选择:开启或关闭序列、表结构、数据等对象的迁移开关:
# 是否迁移序列 migrate-sequence: true # 是否迁移表结构 migrate-table-structure: true # 是否迁移数据 migrate-table-data: true # 是否迁移主键 migrate-table-primary-key: true # 是否迁移索引 migrate-table-index: true # 是否迁移视图 migrate-view: false # 是否迁移函数 migrate-function: false
1.3.3 大表拆分设置
当表数据量较大时,可通过拆分阈值和最大块数设置,将大表拆分后并行迁移:
# 大表拆分阈值行数(当表的行数超过此值时,将对表进行拆分)
large-table-split-threshold-rows: 5000000
# 大表拆分阈值大小(单位为M,当表的数据大小超过此值时,将对表进行拆分)
large-table-split-threshold-size: 5000
# 大表拆分最大块数(每张表的最大拆分块数,应不超过总的读线程数)
large-table-split-max-chunk-num: 24
# 大表拆分条件定义文件(优先于按行数和大小拆分)
large-table-split-condition-file: largetable-split-condition.json
1.4 目标数据库配置:适配KingbaseES
目标数据库仅支持KingbaseES,以KingbaseES V8R6为例,在对应配置文件中设置连接信息和数据写入规则:
# 目标数据库类型
dbType: KINGBASE
# 目标数据库版本(V7,V8R3,V8R6,V8R6C7,V9)
dbVersion: V8R6
# 简单JDBC连接(V8R3和V8R6使用)
url: jdbc:kingbase8://1.2.3.4:54321/test1
# 驱动类名(V8R6使用)
driver-class-name: com.kingbase8.Driver
# 用户名
username: kingbase
# 密码
password: 123456
# 目标模式,多个模式用英文逗号隔开,填入"*"则目标模式与源模式同名
schemas: "*"
# 数据库连接验证SQL
validation-query: select 1
# 批量提交记录数(行数据)
write-batch-size: 1000
# 批量提交数据大小(单位M)
write-batch-byte-size: 100
# 删除目标库中已存在的对象(如表、视图等)
drop-existing-object: true
# 是否截断表(清空表数据)
truncate-table: false
# 是否创建目标模式
create-target-schema: true
注意:若迁移程序与目标数据库在同一台Linux服务器上,可使用Unix Domain Socket连接提升传输效率,配置如下:
url: jdbc:kingbase8:///db?currentSchema=db&socketFactory=org.newsclub.net.unix.AFUNIXSocketFactory$FactoryArg&socketFactoryArg=/tmp/.s.KINGBASE.54321&sslMode=disable
1.5 线程池配置:优化并发效率
数据迁移为IO密集型操作,进入kdts-plus/conf目录,打开kb-thread-config.xml文件,按服务器配置调整线程参数。以下为基于Intel Xeon Gold 6330(28核心56线程)、256G内存、JVM内存16G的示例配置:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<!-- 默认线程池 -->
<pool name="default">
<corePoolSize>1</corePoolSize><!-- 核心线程数-->
<maxPoolSize>1</maxPoolSize><!-- 最大线程数(设置为和核心线程数一致)-->
<keepAliveTime>15</keepAliveTime><!-- 线程空闲存活时间(单位:秒)-->
<workQueueSize>8</workQueueSize><!-- 工作队列大小-->
</pool>
<!-- 表数据读线程池 -->
<pool name="read">
<corePoolSize>8</corePoolSize><!-- 可根据服务器配置调整,源库读慢可提升比例-->
<maxPoolSize>8</maxPoolSize><!-- 和corePoolSize一致-->
<keepAliveTime>300</keepAliveTime><!-- 保持不变-->
<workQueueSize>150000</workQueueSize><!-- 保持不变-->
</pool>
<!-- 表数据写线程池 -->
<pool name="write">
<corePoolSize>48</corePoolSize><!-- 可根据服务器配置调整,源库读慢可提升比例-->
<maxPoolSize>48</maxPoolSize><!-- 和corePoolSize一致-->
<keepAliveTime>300</keepAliveTime><!-- 保持不变-->
<workQueueSize>75</workQueueSize><!-- maxPoolSize的1.5倍-->
</pool>
<!-- 大对象数据(Clob和Blob)写线程池 -->
<pool name="writeLargeObject">
<corePoolSize>16</corePoolSize><!-- 单条数据大时适当降低,避免内存不足-->
<maxPoolSize>16</maxPoolSize><!-- 和corePoolSize一致-->
<keepAliveTime>300</keepAliveTime><!-- 保持不变-->
<workQueueSize>16</workQueueSize><!-- 和maxPoolSize一致-->
</pool>
</config>
IO密集型操作的线程数公式为线程数= CPU核心数/(1-阻塞系数),阻塞系数通常取0.8~0.9,例如双核CPU线程数可设为20(2/(1-0.9))。
二、执行迁移任务与日志查看
2.1 启动迁移任务
配置完成后,执行启动脚本启动迁移任务。Linux平台在kdts-plus/bin目录下执行:
startup.sh
Windows平台执行:
startup.bat
Linux平台启动后程序在后台运行,若需查看运行日志,可使用tail命令:
tail -f kdts-plus/logs/kdtsplus_2022-06-24_22-22-22.log
若需停止运行中的程序,Linux平台执行shutdown.sh,Windows平台关闭命令窗口即可。
2.2 运行日志查看
迁移程序会在kdts-plus/logs目录下按迁移日期和时间创建日志目录,该目录下包含3个日志文件(error.log、info.log、warn.log)及不同模式名的子目录,每个子目录下存放对应模式的日志。示例目录结构如下:
logs/
├─2024-10-30_14_30_00/
│ ├─Schema1/
│ │ ├─error.log
│ │ ├─info.log
│ │ └─warn.log
│ ├─Schema2/
│ │ ├─error.log
│ │ ├─info.log
│ │ └─warn.log
│ ├─error.log
│ ├─info.log
│ └─warn.log
└─kdts-plus-2024-10-30_14_30_00.log # Linux平台下的完整日志(Windows无此文件)
“数据对比”的日志目录名有“DataCompare-”前缀,迁移失败时需重点查看error.log中的内容,定位错误原因。
三、迁移报告查看与KingbaseES优化
3.1 迁移报告查看
迁移程序会在kdts-plus/result目录下按迁移日期和时间创建报告目录,该目录下有index.html及不同模式名的子目录,每个子目录下存放该模式的详细报告。示例目录结构如下:
result/
├─2024-10-30_14_30_00/
│ ├─AcrpyRegisterScript/ # ArcGIS注册脚本(迁移GIS数据时使用)
│ ├─FailedScript/ # 失败脚本目录
│ ├─IgnoredScript/ # 略过脚本目录
│ ├─SuccessScript/ # 成功脚本目录
│ ├─detail_check_constraint.html # 检查约束详细报告
│ ├─detail_comment.html # 注释详细报告
│ ├─detail_table.html # 表详细报告
│ └─index.html # 模式信息首页
打开index.html可查看各模式下对象的迁移成功数、失败数和忽略数;FailedScript、IgnoredScript和SuccessScript目录下会生成对应脚本,例如成功的表结构脚本(SuccessScript/table.sql):
CREATE TABLE "PUBLIC"."TEST_TABLE" (
"ID" INTEGER NOT NULL,
"NAME" VARCHAR(50) NOT NULL,
PRIMARY KEY ("ID")
);
3.2 KingbaseES优化配置参数
为提升目标库性能,修改KingbaseES的kingbase.conf文件,推荐配置如下:
max_connections=2000
shared_buffers=RAM*0.4GB # RAM指内存,最大设置为64GB
work_mem =10MB
maintenance_work_mem=6GB
effective_cache_size=RAM*0.5GB # RAM指内存(free -g)
max_locks_per_transaction=1024
max_wal_size=100GB
checkpoint_timeout=5min
checkpoint_completion_target=0.9
logging_collector=on
log_destination='stderr'
log_directory='sys_log'
log_filename='kingbase-%d.log'
log_truncate_on_rotation=on
log_rotation_age=1440
log_connections=on
log_disconnections=on
log_statement='ddl'
四、SHELL版迁移注意事项
- 迁移顺序:由于对象之间存在依赖关系,可按“1、序列;2、表结构、表数据、主键约束、索引、唯一性约束;3、外键约束;4、检查约束、视图、函数、存储过程、包;5、同义词;6、触发器;7、注释”的顺序进行迁移。
- 大表拆分:自动拆分机制仅针对Oracle和达梦数据库,其它数据库需手动拆分;对表的排序和拆分不影响迁移结果,只影响效率。
- 大对象数据迁移:若表中有大对象数据字段(BLOB、CLOB等),单行数据大小达到100M以上,需增大JVM内存(修改
startup.sh/startup.bat中的-Xms和-Xmx参数),并控制大对象表的读写并发度。 - 网络抖动处理:迁移时若出现网络异常,可设置“网络读取超时”参数。例如KingbaseES的
url配置:jdbc:kingbase8://localhost:54321/db1?socketTimeout=900(单位为秒);MySQL的url配置:jdbc:mysql://localhost:3306/db1?socketTimeout=900000(单位为毫秒)。
结语
SHELL 版 KDTS 迁移工具凭借对无图形化、堡垒机等特殊场景的适配能力,成为 KingbaseES 迁移的重要选择。通过 “配置文件调整→启动任务→日志监控→报告验证” 的实战流程,可完成多源数据库的迁移任务。
人大金仓官网:【点击直达】
更多推荐
所有评论(0)