当前位置: 首页 > news >正文

kingbase数据库SHELL端迁移工具访问及使用

SHELL端迁移工具存放位置:
$KINGBASE_HOME/ClientTools/guitools/KDts/KDTS-CLI

SHELL工具中使用KDTS与Web端存在差异的部分在于:

  • 迁移任务配置上,Web方式在启动脚本之后,通过网页可视化表单直接修改配置项;SHELL方式需先配置好对应参数,再执行启动脚本。

  • 迁移任务启动方式上,Web方式需先启动脚本,再通过网页访问,配置任务,通过页面上的按钮等启动迁移;
    SHELL方式则需要先在配置文件中修改对应配置(源数据库端、目标数据库端等),执行启动脚本即开始迁移。

  • 迁移结果信息查看上,Web方式将迁移任务对应的结果和日志可视化呈现给用户;SHELL方式需在对应文件夹内查找日志内容和迁移报告。

在SHELL工具中使用KDTS进行迁移整体上分为三步:

  1. 配置, 包含数据源配置、迁移对象配置、映射关系配置、性能配置和其他配置,这些配置都应在实际迁移之前进行。

  2. 开始迁移,即执行启动脚本。

  3. 查看结果, 包含校验迁移结果和查看迁移日志、迁移报告两部分。

一、配置

配置文件存放于KDTS-CLI/conf目录下,其中datasource-开头的文件为数据源配置文件;data-type-filter_sample.json为数据类型映射配置文件;thread-config.md为线程池配置文件。
image

二、数据源配置

数据源配置用于指定迁移的源数据库连接和目标数据库连接。

迁移程序支持多种源数据库到目标数据库的迁移组合,为了避免不同数据源配置相互的干扰,在开始数据源配置之前,KDTS会根据kdts-plus/conf/application.yml文件中的配置,激活对应的配置文件。具体操作如下:

  • 进入kdts-plus/conf目录,打开application.yml文件,把“active”的值设置为对应的组合:

active: oracle #激活datasource-oracle.yml配置文件,每种源-目标数据库组合的迁移配置都应在当前文件夹中的datasource-xxx.yml文件中进行设置

  • 迁移工具除了“数据迁移”外,还支持将源库和目标库进行“数据对比”。可以修改kdts-plus/conf/application.yml文件中的“runningMode”参数值来调整KDTS接下来要做的事。

datasource:
poolType: #数据库连接池类型
source: Hikari #Hikari、Druid、Simple #源库为gbase8g、gbase8s、JDBC(sqlite)时,只能选择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 #数据比较


注释掉“running-mode”即为缺省的数据迁移模式,后续若新增运行模式,按照注释说明填写即可。


2.1 配置源数据库连接信息

修改配置文件中“source:”部分配置内容即可修改源数据库连接信息:
#源数据库类型
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
源端数据库 源端数据库版本 支持迁移的对象类型
oracle 9i、10g、11g、12c、19c 表(包含指定表、排除指定表)、视图、序列、函数、存储过程、程序包、同义词、触发器、用户自定义类型、注释
MySQL 5.X、8.X 表(包含指定表、排除指定表)、视图、函数、存储过程、触发器、用户自定义类型、注释
PostgreSQL 9、10、12、14、16 表(包含指定表、排除指定表)、视图、序列、函数、存储过程、同义词、触发器、用户自定义类型、注释
SQLServer 2000、2005、2008、2012、2014、2016、2017、2019 表(包含指定表、排除指定表)、视图、序列、函数、存储过程、同义词、触发器、用户自定义类型、注释
Gbase 8s、8g、8t、8sV8 表(包含指定表、排除指定表)、视图、序列、函数、存储过程、同义词、触发器、用户自定义类型、注释
DM 7、8 表(包含指定表、排除指定表)、视图、序列、函数、程序包、存储过程、同义词、触发器、用户自定义类型、注释
Sybase 15.7 表、主键、外键、索引、约束、视图、函数、存储过程、触发器

1、如果源库的类型为MariaDB时使用与Mysql使用相同的接口和配置文件,不再单独处理,请按照下表中的版本对应关系进行配置:

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

2、配置“连接字符串”时需要考虑数据库的初始化字符集等因素,例如当MySQL数据库的字符集是GBK或GB2312时,应在url中添加“useUnicode=true&characterEncoding=utf-8”。
3、当源数据库是SQLServer且数据库版本为2016或更高版本时,源数据库支持设置Max Degree of Parallellism(最大并行度配置),可使用exec sp_configure;命令来查看
建议该参数的值设置为0(由数据库自动管理)或一个大于0的值(由数据库专家给定):

exec sp_configure 'max degree of parallelism', 0;
go
reconfigure with override;
go

2.2、配置目标数据库连接信息

修改配置文件中“target:”部分配置内容即可修改源数据库连接信息:

#目标数据库类型
dbType: KINGBASE
#目标数据库版本(V7,V8R3,V8R6,V8R6C7,V9)
dbVersion: V9
#Unix Domain
#url: jdbc:kingbase8:///db?currentSchema=db&socketFactory=org.newsclub.net.unix.AFUNIXSocketFactory$FactoryArg&socketFactoryArg=/tmp/.s.KINGBASE.54321&sslMode=disable
#simple jdbc
url: jdbc:kingbase8://1.2.3.4:54321/test1 #V8R3和V9使用
#url: jdbc:kingbase://1.2.3.4:54321/TEST #V7使用
#driver-class-name: com.kingbase.Driver #V7使用
#driver-class-name: com.kingbase8.r3.Driver #V8R3使用
driver-class-name: com.kingbase8.Driver #V9使用
username: kingbase
password: 123456
#目标模式,多个模式用英文逗号隔开,如:A,B,C(不要回车换行),也可填入"*"(需要双引号,则目标模式与源模式同名)
#schemas: Sehcma1,Sehcma2,Sehcma3
#schemas: Sehcma1
schemas: "*"
#数据库连接验证SQL
validation-query: select 1

KDTS支持目标端数据库类型及其版本如下:

目标端数据库 目标端数据库版本
Oracle 10g、11g、12c、19c
MySQL 5.X、8.X
SQLServer 2008、2012、2014、2016、2017、2019
Gbase 8sV8
PostgreSQL 12
DM 7,8
Db2 9,10,11
神通(OSCAR) 7
Kingbase-ADB 3
PHOTONDB V9
GAUSSDB 12
CLICKHOUSE 22
KingbaseES V7、V8R3、V8R6、V8R6C7、V9

如果迁移程序和目标数据库(KingbaseES)在同一台计算机上,并且操作系统是Linux,可以使用Unix Domain进行连接,可提高数据传输效率。

三、迁移对象配置

3.1、源端配置

源端配置旨在根据迁移需求修改配置文件中源端参数(“source:”部分)。
配置迁移模式
在“source:”部分配置schemas参数及schema-excludes参数即可。

schemas参数后跟随需要迁移的模式名。若需迁移多个模式,在该参数后填入需迁移的模式名,不同模式之前使用英文逗号隔开;若需迁移源数据库连接中对应用户可访问的所有模式,可直接在该参数后指定"*"(双引号不可省略)。

schema-excludes参数后指定不迁移的模式,若需过滤多个模式不进行迁移,在该参数后填入过滤的模式名,不同模式之前使用英文逗号隔开。

#schemas: Sehcma1,Sehcma2,Sehcma3
#schemas: "*"
schemas: Sehcma1
schema-excludes: SYS,SYSTEM,MGMT_VIEW,DBSNMP,SYSMAN,OUTLN,FLOWS_FILES,MDSYS,ORDSYS,EXFSYS,WMSYS,APPQOSSYS,APEX_030200,OWBSYS_AUDIT,ORDDATA,CTXSYS,ANONYMOUS,XDB,ORDPLUGINS,OWBSYS,SI_INFORMTN_SCHEMA,OLAPSYS,SCOTT,ORACLE_OCM,XS$NULL,BI,PM,MDDATA,IX,SH,DIP,OE,APEX_PUBLIC_USER,HR,SPATIAL_CSW_ADMIN_USR,SPATIAL_WFS_ADMIN_USR

配置大表拆分
为了最大化迁移数据的效率,迁移工具按表中的数据行数和大对象大小对表进行了排序,并对达到拆分阈值的大表进行了拆分(拆分操作仅读取表数据记录标识,不影响数据),然后按分块并行读取,这些操作依赖于数据库统计信息并需要对拆分操作进行授权,如果条件允许,可在迁移前对源数据库做数据统计分析和拆分授权。

配置达标拆分参数如下:

#大表拆分阈值行数(当表的行数超过此值时,将对表进行拆分,每块的记录数为此值和表总记录数除以“拆分最大块数”中的最大值)
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、序列;2、表结构、表数据、主键约束、索引、唯一性约束;3、外键约束;4、检查约束、视图、函数、存储过程、包;5、同义词;6、触发器;7、注释”这样的顺序进行迁移。

#表优先列表
tablePriorityList:

配置迁移对象
迁移程序中可直接指定迁移对象信息,共有两种配置方式:

  • 在对应配置文件(datasource-xxx.yml)中修改"sources:"部分的xxxx-includes(需要迁移的对象名)及xxxx-excludes(需要过滤的对象名)参数,xxxx指的是对象类别。
  • 在项目工程的conf目录下创建xxxxIncludes.txt文件(需要迁移的对象名)和xxxxExcludes.txt(需要过滤的对象名)进行配置,xxxx指的是对象类别。

当前支持指定的对象类别为:table、column、view、function、procedure、package、sequence、synonym,需要注意的是,若两种配置方式都设置了,优先使用文件配置。

table-includes:schema1.tbl1
table-excludes:schema1.tbl2
column-includes:schema1.tbl1.col1
column-excludes:schema1.tbl1.col2
view-includes:schema1.view1
view-excludes:schema1.view2
function-includes:schema1.func1
function-excludes:schema1.func2
procedure-includes: schema1.pro1
procedure-excludes: schema1.pro2
package-includes: schema1.pkg1
package-excludes: schema1.pkg2
sequence-includes: schema1.seq1
sequence-excludes: schema1.seq2
synonym-includes: schema1.syn1
synonym-excludes: schema1.syn2

1、若对象名称中包含!@#$%^&*(_+}{]<ABC"。 2、若一个参数中指定多个值,请使用英文逗号分隔,不要回车换行。指定对象名时可指定模式名;指定列名时需指定表名,可指定模式名。

配置迁移对象类别
指定migrate-xxx参数值可修改需要迁移的对象类别,该参数仅接受布尔值作为参数值。

#是否迁移序列
migrate-sequence: true
#序列仅更新值(不创建)
sequence-only-updating-value: false
#序列是否使用CurrVal做当前值(Oracle调用CurrVal前需要调用NextVal,会耗费一个序列值)
sequence-use-current-value: false
#是否迁移表结构
migrate-table-structure: true
#是否迁移数据
migrate-table-data: true
#是否迁移主键
migrate-table-primary-key: true
#是否迁移索引
migrate-table-index: true
#是否迁移唯一性约束
migrate-table-unique: true
#是否迁移外键
migrate-table-foreign-key: true
#是否迁移检查约束
migrate-table-check: true
#是否迁移视图
migrate-view: false
#是否迁移函数
migrate-function: false
#是否迁移存储过程
migrate-procedure: false
#是否迁移包
migrate-package: false
#是否迁移同义词
migrate-synonym: false
#是否包含公共同义词
include-public-synonym: false
#是否迁移触发器
migrate-trigger: false
#是否迁移注释
migrate-comment: true

配置kdms转换

#是否使用kdms做转换(视图、函数、存储过程、包、触发器)
use-kdms: false
#kdms访问地址
kdms-url: http://192.168.0.25:12580/kdms/
#kdms源数据库类型
kdms-source-db-type: Oracle
#kdms目标数据库类型
kdms-target-db-type: Kingbase_ES_V8_R6

3.2、目标端配置

目标端需配置以下子项,若不修改则为默认值。

#批量提交记录数(行数据)
write-batch-size: 1000
#批量提交数据大小(单位M)
write-batch-byte-size: 100
#删除目标库中已存在的对象(如表、视图等)
drop-existing-object: true
#是否截断表(清空表数据)
truncate-table: false
#目标数据库对象重命名-除表名、列名外的其他对象: pk、fk、constraint、unique constraint、index 等
rename-object: true
#检查约束不验证已存在数据
check-constraint-not-validated: true
#是否记录成功脚本
log-success-script: true
#是否创建目标模式
create-target-schema: true
#迁移结果保留时长(单位为天)
result-retention-days: 7
#是否删除空字符(解决 无效的 "UTF8" 编码字节顺序(invalid byte sequence for encoding "UTF8": 0x00))
remove-null-character: false
#是否将分区表当作普通表迁移
partition-table-as-normal: false
#写数据超时时长(单位毫秒,0表示永不超时)
write-data-timeout: 0
#最大重试次数
max-retries: 0
#重试间隔(毫秒)
retry-interval: 500
#数据对比缓冲区大小(目标端),仅“数据对比”运行模式时有效
data-compare-buffer-size: 200000
#数据对比查询并行度,仅“数据对比”运行模式时有效
data-compare-query-parallelism: 5
#目标数据库最大连接数
maximum-poolsize: 200

四、迁移操作

SHELL工具中使用KDTS进行迁移仅需执行启动脚本。

  • Linux平台: startup.sh

    Linux平台启动后程序在后台运行,如果需要查看运行日志,可使用tail命令:tail -f logs/kdts-app-console_yyyy-mm-dd_hh-mm-ss.log
    如果需要停止运行中的程序,可执行shutdown.sh。

  • Windows平台: startup.bat

五、查看结果

迁移结束后续确认迁移结果(对象迁移成功数,失败数,失败原因,是否需要二次迁移等)。KDTS在迁移后会生成对应的运行日志和迁移报告,以便于用户查看迁移结果并作出对应处理。

校验迁移结果

可以通过查看运行日志和迁移报告来查看迁移结果,或通过“数据对比”功能对比源端数据库和迁移后的源端数据库来获取迁移前后数据库对象的差异。

查看运行日志和迁移报告

日志信息

迁移程序会在kdts-plus/logs目录下按迁移日期和时间创建日志目录,该目录下会有3个日志文件以及不同模式名的子目录,每个子目录下存放该模式相关的日志(error.log、info.log、warn.log),请注意查看error.log中的内容。

Schema1     #模式1的日志
Schema2     #模式2的日志
Schema2     #模式3的日志
error.log   #错误
info.log    #信息
warn.log    #警告

迁移报告
迁移程序会在kdts-plus/result目录下按迁移日期和时间创建报告目录,该目录下会有index.html以及不同模式名的子目录,每个子目录下存放该模式的详细报告,可打开index.html进行查看。每个模式名子目录下内容如下:

AcrpyRegisterScript                                    #ArcGIS注册脚本(迁移GIS数据时从此目录下取注册数据的脚本文件)
FailedScript                                           #失败脚本目录
IgnoredScript                                          #略过脚本目录
SuccessScript                                          #成功脚本目录
index.html                                             #模式信息首页
detail_check_constraint.html                           #检查约束详细信息页
detail_comment.html                                    #注释详细信息页
detail_foreign_key_constraint.html                     #外键详细信息页
detail_function.html                                   #函数详细信息页
detail_index.html                                      #索引详细信息页
detail_package.html                                    #包详细信息页
detail_primary_key_constraint.html                     #主键详细信息页
detail_procedure.html                                  #存储过程详细信息页
detail_sequence.html                                   #序列详细信息页
detail_synonym.html                                    #同义词详细信息页
detail_table.html                                      #表详细信息页
detail_table_data.html                                 #表数据详细信息页
detail_trigger.html                                    #触发器详细信息页
detail_unique_constraint.html                          #唯一性约束详细信息页
detail_view.html                                       #视图详细信息页
http://www.hskmm.com/?act=detail&tid=18050

相关文章:

  • 数据质量定胜负:Apple 如何破解双语大模型性能鸿沟
  • 从零开始:VirtualBox 虚拟机安装与 CentOS 7 部署 + 双网卡网络配置指南
  • 微信个人号api|搭建高效微信机器人系统
  • 【光照】[物理模型]中的[BRDF]是什么?
  • [fakeadmin]-(session伪造flask框架)-CTF
  • 《Linux Robust锁》
  • Manim实现气泡特效
  • 完整教程:决策树(Decision Tree)
  • C# Inno Setup
  • CF2139虚拟游记
  • 新方向 - MKT
  • 翻斗幼儿园历险记-CTF-WP
  • .net8+winform+Antdui 制作 LOL 小助手
  • 深入解析:【Git】Git 简介及基本操作
  • hutool主要内容list
  • 20250916_QQ_Powershell
  • 完整教程:HTTP安全响应头--CSP(Content-Security-Policy)
  • 原码,反码,补码
  • Experiment1
  • 读书笔记:Oracle 自动索引:让数据库自己管索引?
  • 1_2025.9.26_1
  • 故障处理:Oracle RAC集群CTSS时钟同步故障案例分析与解决
  • Linux系统提权-web/普通用户-docker逃逸提权shell交互
  • PostgreSQL技术大讲堂 - 第106讲:分区表索引优化
  • 四边形不等式优化
  • 斜率优化
  • AI智能体:从认知到实践
  • Kinect屏幕边缘检测不灵敏的解决方案
  • 暴力拓客游戏小程序:助力商家高效引流与裂变的智能解决方案
  • vue3小坑之-为什么把ref定义的数组赋值给数组对象后取值为空数组?