Kingbase FlySync 需求及可行性评估指南

Kingbase FlySync 需求及可行性评估指南
北京人大金仓信息技术股份有限公司
Mar 20, 2023

目 录
1 前言 7
1.1 版权声明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 免责声明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3 技术支持 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2 概述 9
3 评估数据库版本及同步组合 11
3.1 数据库版本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.1.1 Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.2 SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.3 MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.4 KingbaseES/KinbgaseV7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.5 KADB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.6 PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.2 数据同步组合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4 评估软硬件环境 15
4.1 检查 CPU 架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.2 检查 CPU 核心数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.3 检查操作系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.3.1 检查版本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.3.2 检查时区和时间设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.4 检查可用内存大小 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.5 检查可用存储空间大小 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.6 检查本地信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5 评估源端数据库 21
5.1 评估数据类型和主键信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.1.1 Oracle 数据库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3
5.1.2 SQL Server 数据库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.1.3 MySQL 数据库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.1.4 KingbaseES/KingbaseV7 数据库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.1.5 PostgreSQL/KingbaseES PG 兼容模式数据库 . . . . . . . . . . . . . . . . . . . . . . . 41
5.2 评估数据库编码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.2.1 Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.2.2 SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.2.3 MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.2.4 KingbaseES/KingbaseV7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.2.5 PostgreSQL/ Kingbase ES PG 兼容模式 . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.3 评估数据库参数配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.3.1 Oracle 配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.3.1.1 检查并开启数据库归档 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.3.1.2 检查并开启补全日志 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.3.2 SQL Server 配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.3.2.1 数据库安装在 Linux 系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.3.2.2 数据库安装在 Windows 系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.3.3 MySQL 配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.3.4 KingbaseES V7 配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.3.5 KingbaseES V8 配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.3.6 PostgreSQL/Kingbase ES pg 兼容模式配置 . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.4 评估数据库账号权限 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.4.1 Oracle 权限 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.4.1.1 redo 方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.4.1.2 Logminer 方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.4.2 SQL Server 权限 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.4.3 MySQL 权限 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.4.4 KingbaseES V7 权限 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.4.5 KingbaseES V8 权限 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.4.6 PostgreSQL 权限 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.5 评估存量数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.5.1 Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.5.2 SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.5.3 MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.5.4 KingbaseES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.5.5 PostgreSQL/KingbaseES pg 兼容模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.6 评估关键字合法性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.6.1 Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.6.2 SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.6.3 MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.6.4 KingbaseES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.6.5 PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4
Kingbase FlySync 需求及可行性评估指南
5.7 查询数据库触发器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.7.1 Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.7.2 SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.7.3 MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.7.4 KingbaseES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.7.5 PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.7.6 KingbaseV7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.8 评估数据库大小写设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
6 评估目标端数据库 63
6.1 检查数据库编码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
6.2 检查数据库账号权限 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
7 评估网络环境及端口 65
8 评估数据转换能力满足度 67
9 评估和调整同步性能 69
9.1 性能评估 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
9.1.1 源端数据解析性能评估 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
9.1.2 数据传输性能评估 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
9.1.3 数据入库性能评估 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
9.2 性能调整 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
9.2.1 目标端入库瓶颈 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
9.2.2 网络传输瓶颈 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
9.2.3 源端解析瓶颈 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
9.3 性能调整总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
10 常见问题 77
目 录 5
Kingbase FlySync 需求及可行性评估指南
6 目 录
第 1 章
前言
1.1 版权声明
人大金仓版权所有,并保留对本手册及本声明的一切权利。未得到人大金仓的书面许可,任何人不得以任何
方式或形式对本手册内的任何部分进行复制、摘录、备份、修改、传播、翻译成其他语言、将其全部或部分
用于商业用途。
1.2 免责声明
本手册内容依据现有信息制作,由于产品版本升级或其他原因,其内容有可能变更。人大金仓保留在没有任
何通知或者提示的情况下对手册内容进行修改的权利。本手册仅作为使用指导,人大金仓在编写本手册时已
尽力保证其内容准确可靠,但并不确保手册内容完全没有错误或遗漏,本手册中的所有信息也不构成任何
明示或暗示的担保。
7
Kingbase FlySync 需求及可行性评估指南
1.3 技术支持
• 人大金仓官方网站: http://www.kingbase.com.cn/ 您可以在官网中获得人大金仓所有产品的资讯信
息,销售联系方式
• 金仓数据同步工具子网站: http://kfs.kingbase.com.cn/ 您可以在产品子网站中获得最新的产品技术
资料、产品故障原因及问题分析、产品的应用解决方案、软件升级资料等等。
• 全国服务热线: 400-601-1188
• 人大金仓技术支持与反馈信箱: support@kingbase.com.cn
8 第 1 章 前言
第 2 章
概述
一个标准的 Kingbase FlySync 实施项目包含如下几个工作阶段
• 需求及可行性评估
针对具体项目,收集客户需求、系统软硬件环境、涉及同步的数据库版本、待同步表的数据
类型、主外键约束等信息,结合 Kingbase FlySync 的产品能力提前发现和规避部署过程中可
能出现的问题,减少后续不必要的返工投入和系统上线运行风险。
• 部署方案设计
规划 Kingbase FlySync 的物理和逻辑拓扑。包括每个组件需要运行的物理节点(管控平台、
比对服务、同步服务)、各组件之间的连接方式、系统运行时需要启用的服务数量、以及各个
服务之间的交互关系。
• 存量数据迁移
在进行增量数据同步之前,判断是否需要进行存量历史数据的迁移,并根据需要迁移的数据
量大小制定迁移策略并实施。
• 增量数据同步
根据实际的现场数据同步需求和部署方式限制,选择增量数据的抽取和加载方式。判断是否
需要进行数据转换、以及制定具体的转换策略。
• 功能和性能验证及问题解决
在正式上线前进行 1 比 1 的功能验证和性能压力测试;将实际产品运行过程中可能出现的
问题提前暴露出来,进行调试和优化,确保上线后系统运行稳定。
9
Kingbase FlySync 需求及可行性评估指南
• 运维方案设计
数据同步系统正式上线运行后,制定保障系统正常运行的运维策略和故障应急处理方案,包
括连续性、一致性和时效性的保障。
• 回切方案及系统重建
针对容灾场景,制定当主库发生故障,需要将业务切换至备库时的切换方案;以及主库恢复
后需要重新进行数据同步时的同步系统恢复方案。
本文档详细展开 需求及可行性评估相关的内容。
针对需要新上线的数据库系统,开发商或者集成商在业务上线前通常会进行全面的功能和性能覆盖,而同
步项目通常是业务系统上线之后,作为容灾方案才出现,没有机会做单独的适配或者验证。
基于此,同步系统在上线之前就需要详细的需求满足度评估,从软硬件环境、操作系统、数据库版本、数据
库运行平台、需要同步的数据类型、转换规则等方面全面、深入的分析。将无法支持的项目从前期排除掉。
项目初期通常会使用《Kingbase FlySync 业务需求调研表.xlsx》进行粗略的准入性判断。本文档用于指导实
施人员在接触到客户实际系统后,进行再次评估。防止前期客户交流时填写的《Kingbase FlySync 业务需求
调研表.xlsx》存在偏差。减少后续不必要的重复性工作投入和系统运行风险。
随本文档还会一同提供 数据评估工具,评估工具的主要设计思路和实现方式都参考了本文。同时,为了保
证通用性,工具本身仅覆盖了和数据库相关的部分,关于软硬件环境、数据转换等内容还需要按照本文中提
供的方法进行人工确认。
10 第 2 章 概述
第 3 章
评估数据库版本及同步组合
3.1 数据库版本
数据库版本在初期投标、项目交流时就应该确认清楚。但是偶尔也会出现实际运行数据库版本和初期交流版
本不一致,导致将 Kingbase FlySync 部署在不支持的数据库版本出现无法运行的情形。
Kingbase FlySync 目前支持的源端数据源如下

品牌版本
KingbaseESV7、 V8R2、 V8R3、 V8R6
Oracle10g、 11g( RAC)、 12c( RAC)
SQL Server2008、 2014、 2016、 2017
MySQL5.7、 8.0

MySQL | 5.7、 8.0 |
以下列出查询各种数据库版本的方法
11
Kingbase FlySync 需求及可行性评估指南
3.1.1 Oracle
SELECT * FROM V$VERSION;
3.1.2 SQL Server
SELECT @@VERSION;
3.1.3 MySQL
SELECT version();
3.1.4 KingbaseES/KinbgaseV7
SELECT version();
3.1.5 KADB
SELECT cluster_version();
3.1.6 PostgreSQL
SELECT version();
3.2 数据同步组合
Kingbase FlySync 目前支持的源端和目标端组合如下
12 第 3 章 评估数据库版本及同步组合
Kingbase FlySync 需求及可行性评估指南

目标端
Ora
cle
SQL
Server
MySQLKingbase
V7
Kingbase
V8
KADBKafkaDM
源 端OracleYYYYYY
SQL
Server
YYYYY
MySQLYYYYY
Kingbase
V7
YYYY
Kingbase
V8
YYYYYYY
Post
greSQL
YYYYYYY

• 不在组合中的源端和目标端同步类型,原则上不支持。
• 不支持 MySQL 主从复制集群作为目标端。( MySQL 主从数据不一致时,可能会导致 KFS 同步失败)
3.2. 数据同步组合 13
Kingbase FlySync 需求及可行性评估指南
14 第 3 章 评估数据库版本及同步组合
第 4 章
评估软硬件环境
本文中的运行环境特指安装部署 Kingbase FlySync 同步软件的环境,包括
• 硬件平台
• 操作系统
• 内存大小
• CPU 核心数量
• 存储空间
• 网络配置
4.1 检查 CPU 架构
KingbaseFlySync 支持的硬件平台 (CPU) 如下

分类数据类型
CPUX86_64
飞腾 Phytium-FT1500A
龙芯 Loongson-3B3000
鲲鹏 920
兆芯
海光

15
Kingbase FlySync 需求及可行性评估指南
客户环境中,使用如下命令查询硬件平台
uname -m
结果如下时,表示支持

结果描述
x86_64X86、海光、兆芯
mips64el龙芯
aarch64飞腾、鲲鹏

4.2 检查 CPU 核心数
Kinggbase FlySync 对系统 CPU 核数无特殊要求,但是实际环境中,硬件 CPU 核数越多, Kingbase FlySync
工作的越好。
查看 CPU 核数的命令如下
lscpu
4.3 检查操作系统
4.3.1 检查版本
Kinggbase FlySync 支持的操作系统如下
• CentOS (6.x、 7.x)
• Redhat (6.x、 7.x)
• 银河麒麟
• 湖南麒麟
• 中标麒麟 (NeoKylin 4.x)
• 中标普华 (iSoft Server OS 5.x)
• UOS (20)
• 凝思( 4.0、 6.0)
客户环境中,使用如下命令查看 OS 平台
lsb_release -a
16 第 4 章 评估软硬件环境
Kingbase FlySync 需求及可行性评估指南
如果没有上述命令,可以尝试下面命令
cat /etc/redhat-release
cat /etc/debian_vesion
cat /etc/os-release
4.3.2 检查时区和时间设置
使用 Kingbase FlySync 进行数据同步时,要求数据同步的源端、目标端、管控平台、比对服务等所在物理机
器的时间和时区保持一致(如果不一致,可能造成时区类型的时间戳同步或者比对错误)
• Linux 系统检查时区和时间
使用如下命令查看时区和时间
[root@centos-linux ~]# date -R
Sat, 12 Dec 2020 16:46:53 +0800 # 表示 +8 时区,时间为 2020-12-12 16:46:53
如果时区不正确,使用如下命令进行调整
[root@centos-linux ~]# tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent or ocean.
1) Africa
2) Americas
3) Antarctica
4) Arctic Ocean
5) Asia
6) Atlantic Ocean
7) Australia
8) Europe
9) Indian Ocean
10) Pacific Ocean
11) none - I want to specify the time zone using the Posix TZ format.
#? 5
Please select a country.
1) Afghanistan 18) Israel 35) Palestine
2) Armenia 19) Japan 36) Philippines
3) Azerbaijan 20) Jordan 37) Qatar
4) Bahrain 21) Kazakhstan 38) Russia
5) Bangladesh 22) Korea (North) 39) Saudi Arabia
6) Bhutan 23) Korea (South) 40) Singapore
7) Brunei 24) Kuwait 41) Sri Lanka
8) Cambodia 25) Kyrgyzstan 42) Syria
9) China 26) Laos 43) Taiwan
(continues on next page)
4.3. 检查操作系统 17
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
10) Cyprus 27) Lebanon 44) Tajikistan
11) East Timor 28) Macau 45) Thailand
12) Georgia 29) Malaysia 46) Turkmenistan
13) Hong Kong 30) Mongolia 47) United Arab Emirates
14) India 31) Myanmar (Burma) 48) Uzbekistan
15) Indonesia 32) Nepal 49) Vietnam
16) Iran 33) Oman 50) Yemen
17) Iraq 34) Pakistan
#? 9
Please select one of the following time zone regions.
1) Beijing Time
2) Xinjiang Time
#? 1
The following information has been given:
China
Beijing Time
Therefore TZ='Asia/Shanghai' will be used.

Local time is now:
Universal Time is now:
Sat Dec 12 16:46:29 CST 2020.
Sat Dec 12 08:46:29 UTC 2020.

Is the above information OK?
1) Yes
2) No
#? 1
You can make this change permanent for yourself by appending the line
TZ='Asia/Shanghai'; export TZ
to the file '.profile' in your home directory; then log out and log in again.
Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Shanghai
如果时间不正确,使用如下命令进行调整
date -s "2020-12-12 15:00:00" # 表示将当前时间设置为 2020-12-12 15:00:00
• Windows 系统检查时区和时间
由于 Kingbase FlySync 目前不支持运行在 Windows 平台上,此部分省略
18 第 4 章 评估软硬件环境
Kingbase FlySync 需求及可行性评估指南
4.4 检查可用内存大小
Kingbase FlySync 正常运行至少需要 2GB 内存,使用如下命令查看系统内存
free -m
4.5 检查可用存储空间大小
Kingbase FlySync 至少需要 1GB 的基础运行空间,实际总体运行空间需要根据客户数据增量进行评估,
算法为
1GB + 7*每日数据增量
查看系统剩余空间的命令
df -h
4.6 检查本地信息
Kingbase FlySync 需要查看本地信息
locale
4.4. 检查可用内存大小 19
Kingbase FlySync 需求及可行性评估指南
20 第 4 章 评估软硬件环境
第 5 章
评估源端数据库
5.1 评估数据类型和主键信息
Kingbase FlySync 支持大部分数据库的大部分数据类型,目前仅在个别数据库的特殊类型上存在限制
• 原则上所有待同步的表都需要含有主键(不存在主键的表, UPDATE 或者 DELETE 操作可能存在问题)
• 大对象类型/时间类型/浮点类型不可以作为主键
• 当某张表中包括大对象类型时,需要保证当前表含有主键,并且主键列不能是大对象类型
大对象类型包括
• BLOB
• TINYBLOB
• MEDIUMBLOB
• LONGBLOB
• CLOB
• NCLOB
• XML
• RAW
• LONG RAW
21
Kingbase FlySync 需求及可行性评估指南
• LONG
• BFILE
• BINARY
• VARBINARY
• LONGVARBINARY
• BYTEA
• IMAGE
• TEXT
• NTEXT
• TINYTEXT
• MEDIUMTEXT
• LONGTEXT
以下分数据库类型列举检查数据类型和主键信息的查询方法
如果查询出来的结果不满足以上三条约束,需要协调客户解决(增加主键信息、过滤同步表等),对于无法
解决的,需要提前告知客户具体风险
• UPDATE 和 DELETE 操作可能失败,无主键的表数据比对,如果数据出现差异,无法确认具体哪一条
条数据是对还是错,因此只能整表同步,整表同步存在耗时等风险
• 具体涉及哪些表
5.1.1 Oracle 数据库
• 查询待同步表包含的所有数据类型 SQL 语句
SELECT DATA_TYPE, COUNT(0)
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'TEST' -- 待同步模式的模式名
GROUP BY DATA_TYPE
ORDER BY COUNT(0) DESC;
• 查询数据库中不存在主键信息表的 SQL 语句
SELECT TABLE_NAME
FROM ALL_TABLES
WHERE OWNER = 'TEST' -- 待同步模式的模式名
AND TABLE_NAME NOT IN
(
(continues on next page)
22 第 5 章 评估源端数据库
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
SELECT TABLE_NAME
FROM ALL_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'P'
AND OWNER = 'TEST'; -- 待同步模式的模式名
);
• 查询数据库中含有大字段类型表的 SQL 语句
SELECT TABLE_NAME, WM_CONCAT( DATA_TYPE) AS DATA_TYPE
FROM ALL_TAB_COLUMNS

WHERE OWNER = 'TEST'
AND DATA_TYPE IN (
-- 待同步模式的模式名

'BLOB'
, 'TINYBLOB'
, 'MEDIUMBLOB'
, 'LONGBLOB'
, 'CLOB'
, 'NCLOB'
, 'XML'
, 'RAW'
, 'LONG RAW'
, 'LONG'
, 'BFILE'
, 'BINARY'
, 'VARBINARY'
, 'LONGVARBINARY'
, 'BYTEA'
, 'IMAGE'
, 'TEXT'
, 'NTEXT'
, 'TINYTEXT'
, 'MEDIUMTEXT'
, 'LONGTEXT'
, 'NTEXT'
, 'LONGTEXT'
, 'NCLOB'
) GROUP BY TABLE_NAME;
• 查询数据库中不存在主键,并且含有大字段类型表的 SQL 语句 (特别要关注)
SELECT DISTINCT TABLE_NAME
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'TEST' -- 待同步模式的模式名
AND DATA_TYPE IN (
(continues on next page)
5.1. 评估数据类型和主键信息 23
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
'BLOB'
, 'TINYBLOB'
, 'MEDIUMBLOB'
, 'LONGBLOB'
, 'CLOB'
, 'NCLOB'
, 'XML'
, 'RAW'
, 'LONG RAW'
, 'LONG'
, 'BFILE'
, 'BINARY'
, 'VARBINARY'
, 'LONGVARBINARY'
, 'BYTEA'
, 'IMAGE'
, 'TEXT'
, 'NTEXT'
, 'TINYTEXT'
, 'MEDIUMTEXT'
, 'LONGTEXT'
, 'NTEXT'
, 'LONGTEXT'
, 'NCLOB'
)
AND TABLE_NAME NOT IN (
SELECT
TABLE_NAME
FROM
ALL_CONSTRAINTS
WHERE
CONSTRAINT_TYPE = 'P'
AND OWNER = 'TEST' -- 待同步模式的模式名
);
• 查询数据库中主键列数据类型的 SQL 语句
SELECT tc.DATA_TYPE, COUNT(0) FROM ALL_CONS_COLUMNS cc
LEFT JOIN ALL_CONSTRAINTS c
ON cc.CONSTRAINT_NAME = c.CONSTRAINT_NAME
LEFT JOIN ALL_OBJECTS o
ON o.owner = c.owner AND o.OBJECT_NAME = c.table_name
LEFT JOIN ALL_TAB_COLS tc
ON tc.TABLE_NAME = o.OBJECT_NAME
(continues on next page)
24 第 5 章 评估源端数据库
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
AND tc.COLUMN_NAME = cc.COLUMN_NAME
WHERE C.CONSTRAINT_TYPE = 'P'
AND o.owner = 'TEST' -- 待同步模式的模式名
GROUP BY DATA_TYPE
ORDER BY COUNT(0) DESC;
• 查询无主键表数据类型
SELECT
TABLE_NAME,
WM_CONCAT(DATA_TYPE) AS DATA_TYPE
FROM
(
SELECT
DISTINCT TABLE_NAME,
DATA_TYPE
FROM
ALL_TAB_COLUMNS
WHERE
OWNER = 'SYSTEM' --待同步模式的模式名
AND TABLE_NAME NOT IN(
SELECT
TABLE_NAME
FROM
ALL_CONSTRAINTS
WHERE
CONSTRAINT_TYPE = 'P'
AND OWNER = 'SYSTEM' --待同步模式的模式名
)
)
GROUP BY TABLE_NAME;
5.1.2 SQL Server 数据库
• 查询待同步表包含的所有数据类型 SQL 语句
SELECT
ts.name AS DATA_TYPE
, COUNT(0)
FROM
sys.all_columns ac
LEFT JOIN sys.tables t ON
t.object_id = ac.object_id
(continues on next page)
5.1. 评估数据类型和主键信息 25
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
LEFT JOIN sys.schemas s ON
s.schema_id = t.schema_id
LEFT JOIN sys.types ts ON
ts.system_type_id = ac.system_type_id
WHERE

s.name = 'TEST'
GROUP BY
-- 待同步模式的模式名

ts.name
ORDER BY
COUNT(0) DESC;
• 查询数据库中不存在主键信息表的 SQL 语句
SELECT
t.name
FROM
sys.tables t
LEFT JOIN sys.schemas s ON
s.schema_id = t.schema_id
WHERE
s.name = 'TEST' -- 待同步模式的模式名
AND t.object_id NOT IN (
SELECT
parent_object_id
FROM
sys.key_constraints kc
LEFT JOIN sys.schemas s ON
s.schema_id = kc.schema_id
WHERE
s.name = 'TEST' -- 待同步模式的模式名
AND TYPE = 'PK'
);
• 查询数据库中含有大字段类型表的 SQL 语句
SELECT
TABLE_NAME,
DATA_TYPE = stuff((
SELECT
',' + DATA_TYPE
FROM
(
SELECT
t.name AS TABLE_NAME,
(continues on next page)
26 第 5 章 评估源端数据库
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
ts.name AS DATA_TYPE
FROM
sys.all_columns ac
LEFT JOIN sys.tables t ON
t.object_id = ac.object_id
LEFT JOIN sys.schemas s ON
s.schema_id = t.schema_id
LEFT JOIN sys.types ts ON
ts.system_type_id = ac.system_type_id
WHERE
s.name = 'dbo' -- 待同步模式的模式名
AND ts.name IN ( 'BLOB' ,
'CLOB' ,
'XML' ,
'RAW' ,
'LONG' ,
'BFILE' ,
'BINARY' ,
'VARBINARY' ,
'LONGVARBINARY' ,
'RAW' ,
'BYTEA' ,
'IMAGE' ,
'MEDIUMTEXT' ,
'MEDIUMBLOB' ,
'TEXT' )) a
WHERE
a.TABLE_NAME = b.TABLE_NAME
FOR XML PATH('')), 1, 1, '')
FROM
(
SELECT
t.name AS TABLE_NAME,
ts.name AS DATA_TYPE
FROM
sys.all_columns ac
LEFT JOIN sys.tables t ON
t.object_id = ac.object_id
LEFT JOIN sys.schemas s ON
s.schema_id = t.schema_id
LEFT JOIN sys.types ts ON
ts.system_type_id = ac.system_type_id
WHERE
(continues on next page)
5.1. 评估数据类型和主键信息 27
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
s.name = 'dbo' -- 待同步模式的模式名
AND ts.name IN ( 'BLOB' ,
'CLOB' ,
'XML' ,
'RAW' ,
'LONG' ,
'BFILE' ,
'BINARY' ,
'VARBINARY' ,
'LONGVARBINARY' ,
'RAW' ,
'BYTEA' ,
'IMAGE' ,
'MEDIUMTEXT' ,
'MEDIUMBLOB' ,
'TEXT' )) b
GROUP BY TABLE_NAME
• 查询数据库中不存在主键,并且含有大字段类型表的 SQL 语句 (特别要关注)
SELECT
TABLE_NAME,
stuff((
SELECT
',' + DATA_TYPE
FROM
(
SELECT
t.name AS TABLE_NAME ,
ts.name AS DATA_TYPE
FROM
sys.all_columns ac
LEFT JOIN sys.tables t ON
t.object_id = ac.object_id
LEFT JOIN sys.schemas s ON
s.schema_id = t.schema_id
LEFT JOIN sys.types ts ON
ts.system_type_id = ac.system_type_id
WHERE
s.name = 'dbo' -- 待同步模式的模式名
AND ts.name IN (
'BLOB' ,
'TINYBLOB' ,
'MEDIUMBLOB' ,
(continues on next page)
28 第 5 章 评估源端数据库
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
'LONGBLOB' ,
'CLOB' ,
'NCLOB' ,
'XML' ,
'RAW' ,
'LONG RAW' ,
'LONG' ,
'BFILE' ,
'BINARY' ,
'VARBINARY' ,
'LONGVARBINARY' ,
'BYTEA' ,
'IMAGE' ,
'TEXT' ,
'NTEXT' ,
'TINYTEXT' ,
'MEDIUMTEXT' ,
'LONGTEXT' )
AND t.object_id NOT IN (
SELECT
parent_object_id
FROM
sys.key_constraints kc
LEFT JOIN sys.schemas s ON
s.schema_id = kc.schema_id
WHERE
s.name = 'dbo' -- 待同步模式的模式名
AND TYPE = 'PK' )) a
where
a.TABLE_NAME = b.TABLE_NAME
FOR XML PATH('')), 1, 1, '')
FROM
(
SELECT
t.name AS TABLE_NAME
FROM
sys.all_columns ac
LEFT JOIN sys.tables t ON
t.object_id = ac.object_id
LEFT JOIN sys.schemas s ON
s.schema_id = t.schema_id
LEFT JOIN sys.types ts ON
ts.system_type_id = ac.system_type_id
(continues on next page)
5.1. 评估数据类型和主键信息 29
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
WHERE
s.name = 'dbo' -- 待同步模式的模式名
AND ts.name IN ( 'BLOB' ,
'TINYBLOB' ,
'MEDIUMBLOB' ,
'LONGBLOB' ,
'CLOB' ,
'NCLOB' ,
'XML' ,
'RAW' ,
'LONG RAW' ,
'LONG' ,
'BFILE' ,
'BINARY' ,
'VARBINARY' ,
'LONGVARBINARY' ,
'BYTEA' ,
'IMAGE' ,
'TEXT' ,
'NTEXT' ,
'TINYTEXT' ,
'MEDIUMTEXT' ,
'LONGTEXT' )
AND t.object_id NOT IN (
SELECT
parent_object_id
FROM
sys.key_constraints kc
LEFT JOIN sys.schemas s ON
s.schema_id = kc.schema_id
WHERE
s.name = 'dbo' -- 待同步模式的模式名
AND TYPE = 'PK' )) b
GROUP BY TABLE_NAME;
• 查询数据库中主键列数据类型的 SQL 语句
SELECT
ts.name AS data_type, count(0)
FROM
sys.key_constraints kc
LEFT JOIN sys.index_columns ic ON
ic.object_id = kc.parent_object_id
AND kc.unique_index_id = ic.index_id
(continues on next page)
30 第 5 章 评估源端数据库
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
LEFT JOIN sys.columns c ON
c.column_id = ic.column_id
AND c.object_id = kc.parent_object_id
LEFT JOIN sys.types ts ON
ts.system_type_id = c.system_type_id
LEFT JOIN sys.tables t ON
t.object_id = kc.parent_object_id
LEFT JOIN sys.schemas s ON
s.schema_id = t.schema_id
WHERE

s.name = 'TEST'
GROUP BY ts.name
-- 待同步模式的模式名

ORDER BY count(0) desc;
• 查询数据库中触发器
SELECT
TABLE_NAME,
STUFF(
(
SELECT
',' + DATA_TYPE
FROM
(
SELECT
DISTINCT t.name AS TABLE_NAME,
ts.name AS DATA_TYPE
FROM
sys.all_columns ac
LEFT JOIN sys.tables t ON
t.object_id = ac.object_id
LEFT JOIN sys.schemas s ON
s.schema_id = t.schema_id
LEFT JOIN sys.types ts ON
ts.system_type_id = ac.system_type_id
WHERE
s.name = 'dbo' --待同步模式的模式名
AND t.object_id NOT IN(
SELECT
parent_object_id
FROM
sys.key_constraints kc
LEFT JOIN sys.schemas s ON
s.schema_id = kc.schema_id
(continues on next page)
5.1. 评估数据类型和主键信息 31
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
WHERE
s.name = 'dbo' --待同步模式的模式名
AND TYPE = 'PK'
)
) a
where
a.TABLE_NAME = b.TABLE_NAME FOR XML PATH('')
),
1,
1,
''
)
FROM
(
SELECT
DISTINCT t.name AS TABLE_NAME
FROM
sys.all_columns ac
LEFT JOIN sys.tables t ON
t.object_id = ac.object_id
LEFT JOIN sys.schemas s ON
s.schema_id = t.schema_id
LEFT JOIN sys.types ts ON
ts.system_type_id = ac.system_type_id
WHERE
s.name = 'dbo' --待同步模式的模式名
AND t.object_id NOT IN(
SELECT
parent_object_id
FROM
sys.key_constraints kc
LEFT JOIN sys.schemas s ON
s.schema_id = kc.schema_id
WHERE
s.name = 'dbo' --待同步模式的模式名
AND TYPE = 'PK'
)
) b
GROUP BY
TABLE_NAME;
32 第 5 章 评估源端数据库
Kingbase FlySync 需求及可行性评估指南
5.1.3 MySQL 数据库
• 查询待同步表包含的所有数据类型 SQL 语句
SELECT data_type, count(0) FROM
information_schema.columns
WHERE table_schema = 'mysql' -- 待同步数据库的库名
GROUP BY data_type
ORDER BY count(0) DESC;
• 查询数据库中不存在主键信息表的 SQL 语句
SELECT table_name
FROM information_schema.TABLES

WHERE TABLE_SCHEMA = 'mysql'
AND table_name NOT IN
-- 待同步数据库的库名

(
SELECT table_name
FROM information_schema.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'
);
• 查询数据库中含有大字段类型表的 SQL 语句
SELECT
DISTINCT table_schema
, table_name
, GROUP_CONCAT(UPPER(data_type)) AS DATA_TYPE
FROM
information_schema.COLUMNS
WHERE
table_schema = 'mysql' -- 待同步数据库的库名
AND UPPER(data_type) IN (
'BLOB'
, 'TINYBLOB'
, 'MEDIUMBLOB'
, 'LONGBLOB'
, 'CLOB'
, 'NCLOB'
, 'XML'
, 'RAW'
, 'LONG RAW'
, 'LONG'
, 'BFILE'
, 'BINARY'
(continues on next page)
5.1. 评估数据类型和主键信息 33
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
, 'VARBINARY'
, 'LONGVARBINARY'
, 'BYTEA'
, 'IMAGE'
, 'TEXT'
, 'NTEXT'
, 'TINYTEXT'
, 'MEDIUMTEXT'
, 'LONGTEXT'
) GROUP by table_name;
• 查询数据库中不存在主键,并且含有大字段类型表的 SQL 语句 (特别要关注)
SELECT
DISTINCT table_schema
, table_name
, GROUP_CONCAT(UPPER(data_type)) AS DATA_TYPE
FROM
information_schema.COLUMNS
WHERE
table_schema = 'mysql' -- 待同步数据库的库名
AND UPPER(data_type) IN (
'BLOB'
, 'TINYBLOB'
, 'MEDIUMBLOB'
, 'LONGBLOB'
, 'CLOB'
, 'NCLOB'
, 'XML'
, 'RAW'
, 'LONG RAW'
, 'LONG'
, 'BFILE'
, 'BINARY'
, 'VARBINARY'
, 'LONGVARBINARY'
, 'BYTEA'
, 'IMAGE'
, 'TEXT'
, 'NTEXT'
, 'TINYTEXT'
, 'MEDIUMTEXT'
, 'LONGTEXT'
)
(continues on next page)
34 第 5 章 评估源端数据库
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
AND
table_name NOT IN
(
SELECT table_name
FROM information_schema.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'

AND table_schema = 'mysql'
) GROUP by table_name;
-- 待同步模式的模式名

• 查询数据库中主键列数据类型的 SQL 语句
SELECT
c.DATA_TYPE
, COUNT(0)
FROM
information_schema.KEY_COLUMN_USAGE kcu
LEFT JOIN information_schema.TABLE_CONSTRAINTS tc ON
kcu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
AND kcu.TABLE_SCHEMA = tc.TABLE_SCHEMA
AND tc.TABLE_NAME = kcu.TABLE_NAME
LEFT JOIN information_schema.columns c ON
c.TABLE_NAME = kcu.TABLE_NAME
AND c.TABLE_SCHEMA = kcu.TABLE_SCHEMA
AND c.COLUMN_NAME = kcu.COLUMN_NAME
WHERE
c.TABLE_SCHEMA = 'mysql' -- 待同步数据库的库名
AND tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
GROUP BY
c.DATA_TYPE
ORDER BY
COUNT(0) DESC;
• 查询数据库触发器
select
t.table_schema,
t.table_name,
GROUP_CONCAT(
upper( t.data_type )
) as data_type
from
(
select
distinct table_schema,
(continues on next page)
5.1. 评估数据类型和主键信息 35
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
table_name,
data_type
from
information_schema.COLUMNS
where
table_schema = 'console' -- 待同步模式的模式名
and table_name not in(
select
table_name
from
information_schema.TABLE_CONSTRAINTS
where
CONSTRAINT_TYPE = 'PRIMARY KEY'
and table_schema = 'console' -- 待同步模式的模式名
)
) t
group by table_name;
5.1.4 KingbaseES/KingbaseV7 数据库
• 查询待同步表包含的所有数据类型 SQL 语句
SELECT
ST.TYPNAME
, COUNT(0)
FROM
SYS_ATTRIBUTE SA
LEFT JOIN SYS_TYPE ST ON
ST.OID = SA.ATTTYPID
LEFT JOIN SYS_CLASS SC ON
SC.OID = SA.ATTRELID
LEFT JOIN SYS_NAMESPACE SN ON
SN.OID = SC.RELNAMESPACE
WHERE
SC.RELKIND = 'r'
AND SA.ATTNUM > 0
AND ST.TYPNAMESPACE = 11
AND UPPER(SN.NSPNAME) = 'PUBLIC' -- 待同步模式的模式名
GROUP BY
ST.TYPNAME
ORDER BY
COUNT(0) DESC;
36 第 5 章 评估源端数据库
Kingbase FlySync 需求及可行性评估指南
• 查询数据库中不存在主键信息表的 SQL 语句
SELECT
c.relname
FROM
sys_class C
LEFT JOIN sys_namespace n ON
n.oid = c.relnamespace
WHERE
c.relkind = 'r'
AND UPPER(n.nspname) = 'PUBLIC' -- 待同步模式的模式名
AND c.oid NOT IN (
SELECT
CONRELID
FROM
SYS_CONSTRAINT
WHERE
contype = 'p'
);
• 查询数据库中含有大字段类型表的 SQL 语句
SELECT
SC.RELNAME
, STRING_AGG(ST.TYPNAME,',')
FROM
SYS_ATTRIBUTE SA
LEFT JOIN SYS_TYPE ST ON
ST.OID = SA.ATTTYPID
LEFT JOIN SYS_CLASS SC ON
SC.OID = SA.ATTRELID
LEFT JOIN SYS_NAMESPACE SN ON
SN.OID = SC.RELNAMESPACE
WHERE
SC.RELKIND = 'r'
AND SA.ATTNUM > 0
AND ST.TYPNAMESPACE = 11
AND UPPER(SN.NSPNAME) = 'PUBLIC' -- 待同步模式的模式名
AND UPPER(ST.TYPNAME) IN (
'BLOB'
, 'TINYBLOB'
, 'MEDIUMBLOB'
, 'LONGBLOB'
, 'CLOB'
, 'NCLOB'
(continues on next page)
5.1. 评估数据类型和主键信息 37
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
, 'XML'
, 'RAW'
, 'LONG RAW'
, 'LONG'
, 'BFILE'
, 'BINARY'
, 'VARBINARY'
, 'LONGVARBINARY'
, 'BYTEA'
, 'IMAGE'
, 'TEXT'
, 'NTEXT'
, 'TINYTEXT'
, 'MEDIUMTEXT'
, 'LONGTEXT'
) GROUP BY SC.RELNAME;
• 查询数据库中不存在主键,并且含有大字段类型表的 SQL 语句 (特别要关注)
SELECT
SC.RELNAME
, ST.TYPNAME
FROM
SYS_ATTRIBUTE SA
LEFT JOIN SYS_TYPE ST ON
ST.OID = SA.ATTTYPID
LEFT JOIN SYS_CLASS SC ON
SC.OID = SA.ATTRELID
LEFT JOIN SYS_NAMESPACE SN ON
SN.OID = SC.RELNAMESPACE
WHERE
SC.RELKIND = 'r'
AND SA.ATTNUM > 0
AND ST.TYPNAMESPACE = 11
AND UPPER(SN.NSPNAME) = 'PUBLIC' -- 待同步模式的模式名
AND UPPER(ST.TYPNAME) IN (
'BLOB'
, 'TINYBLOB'
, 'MEDIUMBLOB'
, 'LONGBLOB'
, 'CLOB'
, 'NCLOB'
, 'XML'
, 'RAW'
(continues on next page)
38 第 5 章 评估源端数据库
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
, 'LONG RAW'
, 'LONG'
, 'BFILE'
, 'BINARY'
, 'VARBINARY'
, 'LONGVARBINARY'
, 'BYTEA'
, 'IMAGE'
, 'TEXT'
, 'NTEXT'
, 'TINYTEXT'
, 'MEDIUMTEXT'
, 'LONGTEXT'
)
AND Sc.oid NOT IN (
SELECT
CONRELID
FROM
SYS_CONSTRAINT
WHERE
contype = 'p'
);
• 查询数据库中主键列数据类型的 SQL 语句
SELECT
T.TYPNAME AS DATA_TYPE
, COUNT(0)
FROM
SYS_CONSTRAINT C
LEFT JOIN SYS_CLASS SC ON
SC.OID = C.CONRELID
LEFT JOIN SYS_NAMESPACE N ON
N.OID = C.CONNAMESPACE
LEFT JOIN SYS_ATTRIBUTE A ON
A.ATTRELID = SC.OID
AND A.ATTNUM = CONKEY[1]
LEFT JOIN SYS_TYPE T ON
T.OID = A.ATTTYPID
WHERE
CONTYPE = 'p'
AND UPPER(N.NSPNAME) = 'PUBLIC' -- 待同步模式的模式名
GROUP BY
T.TYPNAME
(continues on next page)
5.1. 评估数据类型和主键信息 39
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
ORDER BY
COUNT(0) DESC;
• 查询待同步表包含的所有数据类型 SQL 语句
SELECT
t.RELNAME AS TABLE_NAME,
STRING_AGG(
t.TYPNAME,
','
) AS DATA_TYPE
FROM
(
SELECT
DISTINCT SC.RELNAME,
ST.TYPNAME
FROM
SYS_ATTRIBUTE SA
LEFT JOIN SYS_TYPE ST ON
ST.OID = SA.ATTTYPID
LEFT JOIN SYS_CLASS SC ON
SC.OID = SA.ATTRELID
LEFT JOIN SYS_NAMESPACE SN ON
SN.OID = SC.RELNAMESPACE
WHERE
SC.RELKIND = 'r'
AND SA.ATTNUM > 0
AND ST.TYPNAMESPACE = 11
AND UPPER( SN.NSPNAME )= 'PUBLIC' --待同步模式的模式名
AND Sc.oid NOT IN(
SELECT
CONRELID
FROM
SYS_CONSTRAINT
WHERE
contype = 'p'
)
) t
GROUP BY t.RELNAME;
40 第 5 章 评估源端数据库
Kingbase FlySync 需求及可行性评估指南
5.1.5 PostgreSQL/KingbaseES PG 兼容模式数据库
• 查询待同步表包含的所有数据类型 SQL 语句
SELECT
ST.TYPNAME
, COUNT(0)
FROM
pg_ATTRIBUTE SA
LEFT JOIN pg_TYPE ST ON
ST.OID = SA.ATTTYPID
LEFT JOIN pg_CLASS SC ON
SC.OID = SA.ATTRELID
LEFT JOIN pg_NAMESPACE SN ON
SN.OID = SC.RELNAMESPACE
WHERE
SC.RELKIND = 'r'
AND SA.ATTNUM > 0
AND ST.TYPNAMESPACE = 11
AND UPPER(SN.NSPNAME) = 'PUBLIC' -- 待同步模式的模式名
GROUP BY
ST.TYPNAME
ORDER BY
COUNT(0) DESC;
• 查询数据库中不存在主键信息表的 SQL 语句
SELECT
c.relname
FROM
pg_class C
LEFT JOIN pg_namespace n ON
n.oid = c.relnamespace
WHERE
c.relkind = 'r'
AND UPPER(n.nspname) = 'PUBLIC' -- 待同步模式的模式名
AND c.oid NOT IN (
SELECT
CONRELID
FROM
pg_CONSTRAINT
WHERE
contype = 'p'
);
• 查询数据库中含有大字段类型表的 SQL 语句
5.1. 评估数据类型和主键信息 41
Kingbase FlySync 需求及可行性评估指南
SELECT
SC.RELNAME
, ST.TYPNAME
FROM
pg_ATTRIBUTE SA
LEFT JOIN pg_TYPE ST ON
ST.OID = SA.ATTTYPID
LEFT JOIN pg_CLASS SC ON
SC.OID = SA.ATTRELID
LEFT JOIN pg_NAMESPACE SN ON
SN.OID = SC.RELNAMESPACE
WHERE
SC.RELKIND = 'r'
AND SA.ATTNUM > 0
AND ST.TYPNAMESPACE = 11
AND UPPER(SN.NSPNAME) = 'PUBLIC' -- 待同步模式的模式名
AND UPPER(ST.TYPNAME) IN (
'BLOB'
, 'CLOB'
, 'XML'
, 'RAW'
, 'LONG'
, 'BFILE'
, 'BINARY'
, 'VARBINARY'
, 'LONGVARBINARY'
, 'RAW'
, 'BYTEA'
, 'IMAGE'
, 'MEDIUMTEXT'
, 'MEDIUMBLOB'
, 'TEXT'
);
• 查询数据库中不存在主键,并且含有大字段类型表的 SQL 语句 (特别要关注)
SELECT
SC.RELNAME
, ST.TYPNAME
FROM
pg_ATTRIBUTE SA
LEFT JOIN pg_TYPE ST ON
ST.OID = SA.ATTTYPID
LEFT JOIN pg_CLASS SC ON
(continues on next page)
42 第 5 章 评估源端数据库
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
SC.OID = SA.ATTRELID
LEFT JOIN pg_NAMESPACE SN ON
SN.OID = SC.RELNAMESPACE
WHERE
SC.RELKIND = 'r'
AND SA.ATTNUM > 0
AND ST.TYPNAMESPACE = 11
AND UPPER(SN.NSPNAME) = 'PUBLIC' -- 待同步模式的模式名
AND UPPER(ST.TYPNAME) IN (
'BLOB'
, 'CLOB'
, 'XML'
, 'RAW'
, 'LONG'
, 'BFILE'
, 'BINARY'
, 'VARBINARY'
, 'LONGVARBINARY'
, 'RAW'
, 'BYTEA'
, 'IMAGE'
, 'MEDIUMTEXT'
, 'MEDIUMBLOB'
, 'TEXT'
)
AND Sc.oid NOT IN (
SELECT
CONRELID
FROM
pg_CONSTRAINT
WHERE
contype = 'p'
);
• 查询数据库中主键列数据类型的 SQL 语句
SELECT
T.TYPNAME AS DATA_TYPE
, COUNT(0)
FROM
pg_CONSTRAINT C
LEFT JOIN pg_CLASS SC ON
SC.OID = C.CONRELID
LEFT JOIN pg_NAMESPACE N ON
(continues on next page)
5.1. 评估数据类型和主键信息 43
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
N.OID = C.CONNAMESPACE
LEFT JOIN pg_ATTRIBUTE A ON
A.ATTRELID = SC.OID
AND A.ATTNUM = CONKEY[1]
LEFT JOIN pg_TYPE T ON
T.OID = A.ATTTYPID
WHERE
CONTYPE = 'p'
AND UPPER(N.NSPNAME) = 'PUBLIC' -- 待同步模式的模式名
GROUP BY
T.TYPNAME
ORDER BY
COUNT(0) DESC;
• 查询数据库中主键列数据类型的 SQL 语句
SELECT
T.TYPNAME AS DATA_TYPE
, COUNT(0)
FROM
pg_CONSTRAINT C
LEFT JOIN pg_CLASS SC ON
SC.OID = C.CONRELID
LEFT JOIN pg_NAMESPACE N ON
N.OID = C.CONNAMESPACE
LEFT JOIN pg_ATTRIBUTE A ON
A.ATTRELID = SC.OID
AND A.ATTNUM = CONKEY[1]
LEFT JOIN pg_TYPE T ON
T.OID = A.ATTTYPID
WHERE
CONTYPE = 'p'
AND UPPER(N.NSPNAME) = 'PUBLIC' -- 待同步模式的模式名
GROUP BY
T.TYPNAME
ORDER BY
COUNT(0) DESC;
44 第 5 章 评估源端数据库
Kingbase FlySync 需求及可行性评估指南
5.2 评估数据库编码
目前还没有证据表明同步两端的数据库编码不一致会影响到 Kingbase FlySync 的数据同步。
但是从原理上来说,异构数据库编码的不一致,可能会影响到数据同步时中文的正确性。
本节列出查询各关系型数据库编码的方法
5.2.1 Oracle
SELECT
PARAMETER
, VALUE
FROM
NLS_DATABASE_PARAMETERS
WHERE
PARAMETER LIKE '%CHARACTERSET';
5.2.2 SQL Server
SELECT
SERVERPROPERTY(
N'collation'
) AS COLLATION -- 数据库字符集
, @@LANGUAGE AS LANGUAGE -- 数据库使用的语言,如 us_english 等
, COLLATIONPROPERTY(
'chinese_prc_ci_as'
, 'codepage'
); -- 查看代码页

--936 代表 gbk
--20936 代表 gb2312

5.2.3 MySQL
查看数据库编码格式
mysql> show variables like 'character_set_database';
查看数据表的编码格式
mysql> show create table <表名>;
5.2. 评估数据库编码 45
Kingbase FlySync 需求及可行性评估指南
5.2.4 KingbaseES/KingbaseV7
查看数据库存储编码
SELECT
sys_encoding_to_char(encoding)
FROM
sys_database
WHERE
DATNAME = 'TEST'; -- 待查询数据库的库名
5.2.5 PostgreSQL/ Kingbase ES PG 兼容模式
查看数据库存储编码
SELECT
pg_encoding_to_char(encoding)
FROM
pg_database
WHERE
DATNAME = 'TEST'; -- 待查询数据库的库名
5.3 评估数据库参数配置
为了保证 Kingbase FlySync 能够正常运行,源端数据库需要开启特定的配置参数。此类参数主要指源端数据
库, Kingbase FlySync 对目标端数据库参数无特殊要求。
5.3.1 Oracle 配置
5.3.1.1 检查并开启数据库归档
使用 Kingbase FlySync 解析 Oracle 数据库增量时,必须开启数据库归档
• 检查是否归档已经开启
SQL> select log_mode from v$database;
LOG_MODE
------------
NOARCHIVELOG
• 如果归档没有开启,则需要开启归档(此步骤需要重启数据库) :
46 第 5 章 评估源端数据库
Kingbase FlySync 需求及可行性评估指南
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
数据库装载完毕。
SQL> alter database archivelog;
数据库已更改。
SQL> alter database open;
数据库已更改。
• 再次查看数据库归档情况
SQL> select log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG
5.3.1.2 检查并开启补全日志
• 检查补全日志的状态
SQL> SELECT supplemental_log_data_min, supplemental_log_data_pk,
supplemental_log_data_all FROM v$database;
SUPPLEME SUP SUP
-------- --- ---
NO NO NO
• 开启补全日志 (建议在 MOUNT 模式下执行)
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
Database altered.
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
Database altered.
TODO: 验证仅开启主键的附加日志是否 OK
• 再次检查补全日志的状态
5.3. 评估数据库参数配置 47
Kingbase FlySync 需求及可行性评估指南
SQL> SELECT supplemental_log_data_min, supplemental_log_data_pk,
supplemental_log_data_all FROM v$database;
SUPPLEME SUP SUP
-------- --- ---
YES YES YES
1. 切换日志文件
SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered
5.3.2 SQL Server 配置
Kingbase FlySync 获取 SQL Server 数据库增量数据,基于 CDC 机制。所以 SQL Server 作为源端时,需要检
查并启用 SQL Server Agent
5.3.2.1 数据库安装在 Linux 系统
Linux 中执行如下命令开启 SQL Server Agent
/opt/mssql/bin/mssql-conf set sqlagent.enabled true
systemctl restart mssql-server.service
5.3.2.2 数据库安装在 Windows 系统
Windows 中需要在服务管理器中检查并开启 SQL Server Agent 服务,具体需要检查并确认的服务名包括
MSSQLSERVER
SQL Server Agent
5.3.3 MySQL 配置
Kingbase FlySync 使用物理日志解析的方式获取 MySQL 数据库的增量数据, MySQL 数据库作为源端时,需
要保证两个主要参数开启

名称取值备注
binlog_formatROW必须开启
character_set_serverutf8不开启,解析中文可能乱码

查看 MySQL 数据库参数当前取值的命令如下
48 第 5 章 评估源端数据库
Kingbase FlySync 需求及可行性评估指南
show variables like '%binlog_format%';
show variables like '%character_set_server%';
如果当前参数取值和期望值不一致,需要修改 MySQL 数据库配置文件 my.cnf ,加入
[mysqld]
binlog_format = ROW
character_set_server = utf8
设置完成后,需要重启数据库,并再次检查进行确认,直到参数设置成功。
5.3.4 KingbaseES V7 配置
Kingbase FlySync 采用物理日志解析的方式获取 KingbaseES V7 数据库的增量数据, KingbaseES V7 作为源
端时,需要保证如下参数设置正确

名称取值含义
log_archive_starton开启归档日志
log_archive_dest‘归档目录’设置归档日志的存放位置,必须为存在的路径
enable_llogmineron开启 logminer
llogminer_condition_method‘auto’允许同步分区表

查看 KingbaseES V7 数据库参数当前设置,可以使用如下 SQL 语句
show log_archive_start;
show log_archive_dest;
show enable_llogminer;
show llogminer_condition_method;
如果当前参数取值和期望值不一致,需要修改数据库配置文件 kingbase.conf ,加入
log_archive_start = on
log_archive_dest = '归档文件夹绝对路径'
enable_llogminer = on
llogminer_condition_method = 'auto'
设置完成后,需要重启数据库,并再次检查进行确认,直到参数设置成功。
5.3. 评估数据库参数配置 49
Kingbase FlySync 需求及可行性评估指南
5.3.5 KingbaseES V8 配置
Kingbase FlySync 在获取 KingbaseES V8 数据库增量时,采用向数据库内核注入插件的形式实现。 KingbaseES V8 作为源端时,需要保证如下参数设置正确
• 在 data/sys_hba.conf 文件中,确保如下内容存在
host replication all 127.0.0.1/32 md5
host replication all 0.0.0.0/0 md5
• 在 data/kingbase.conf 文件中,确认如下内容正确

名称取值含义
max_wal_senders2* 同步数据库数量日志发送进程数
wal_keep_segments4保留日志数量,根据磁盘空间设置,越大越好
wal_levellogical日志级别
max_replication_slots2* 同步数据库数量复制槽数量

查看 KingbaseES V8 数据库参数当前设置,可以使用如下 SQL 语句
show max_wal_senders;
show wal_keep_segments;
show wal_level;
show max_replication_slots;
如果当前参数取值和期望值不一致,需要修改数据库配置文件 kingbase.conf ,加入
max_wal_senders = 2*同步数据库数量
wal_keep_segments = 4
wal_level = logical
max_replication_slots = 2*同步数据库数量
设置完成后,需要重启数据库,并再次检查进行确认,直到参数设置成功。
5.3.6 PostgreSQL/Kingbase ES pg 兼容模式配置
Kingbase FlySync 在获取 PostgreSQL 数据库增量时,采用向数据库内核注入插件的形式实现。 PostgreSQL
作为源端时,需要保证如下参数设置正确
• 确认如下参数的正确性
50 第 5 章 评估源端数据库
Kingbase FlySync 需求及可行性评估指南

名称取值含义
max_wal_senders2* 同步数据库数量日志发送进程数
wal_keep_segments4保留日志数量,根据磁盘空间设置,越大越好
wal_levellogical日志级别
max_replication_slots2* 同步数据库数量复制槽数量

查看 PostgreSQL 数据库参数当前设置,可以使用如下 SQL 语句
show max_wal_senders;
show wal_keep_segments;
show wal_level;
show max_replication_slots;
5.4 评估数据库账号权限
从客户处获得数据库连接账号后,需要第一时间检查权限是否满足同步需求。如果不满足,需要联系客户进
行授权。 Kingbase FlySync 正常运行需要两类数据库权限
1. 特殊系统权限
2. 获取增量数据时相关系统视图或者表的查询权限
本文主要描述针对各种源端数据库,第 1 类权限的查看和授予方式
5.4.1 Oracle 权限
Oracle 数据库支持两种类型的解析方式
• Redo (需要和数据库部署在同一台机器上,直接解析数据库物理日志,性能高)
• Logminer (可以和数据库分离部署,依赖数据库本身自带的 Logminer,性能稍低)
5.4.1.1 redo 方式
当配置为 redo 方式时,仅需要保证当前数据库账号可以查询系统字典表,具体为
-- 资源使用
GRANT CONNECT TO KFS_USER;
GRANT CREATE SESSION TO KFS_USER;
GRANT UNLIMITED TABLESPACE TO KFS_USER;
-- 创建断点记录中间表
GRANT CREATE TABLE TO KFS_USER;
(continues on next page)
5.4. 评估数据库账号权限 51
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
-- 查询系统表权限
GRANT EXECUTE_CATALOG_ROLE TO KFS_USER;
GRANT SELECT ANY DICTIONARY TO KFS_USER;
GRANT SELECT ON V_$PARAMETER TO KFS_USER;
GRANT SELECT ANY TABLE TO KFS_USER;
GRANT SELECT ANY TRANSACTION TO KFS_USER;
5.4.1.2 Logminer 方式
当配置为 Logminer 方式时,需要以下的额外权限
-- 资源使用
GRANT CONNECT TO KFS_USER;
GRANT CREATE SESSION TO KFS_USER;
GRANT UNLIMITED TABLESPACE TO KFS_USER;
-- 创建断点记录中间表
GRANT CREATE TABLE TO KFS_USER;
-- 调用 Logminer 所需权限
GRANT CREATE MINING MODEL TO KFS_USER;
GRANT LOGMINING TO KFS_USER;
GRANT EXECUTE ON DBMS_FLASHBACK TO KFS_USER;
GRANT EXECUTE ON DBMS_LOGMNR TO KFS_USER;
GRANT EXECUTE ON DBMS_LOGMNR_D TO KFS_USER;
GRANT EXECUTE ON SYS.DBMS_LOGMNR TO KFS_USER;
GRANT EXECUTE ON SYS.DBMS_LOGMNR_D TO KFS_USER;
GRANT EXECUTE ON SYS.DBMS_LOGMNR_INTERNAL TO KFS_USER;
GRANT EXECUTE ON SYS.DBMS_LOGMNR_LOGREP_DICT TO KFS_USER;
GRANT EXECUTE ON SYS.DBMS_LOGMNR_SESSION TO KFS_USER;
GRANT EXECUTE_CATALOG_ROLE TO KFS_USER;
GRANT SELECT ANY DICTIONARY TO KFS_USER;
GRANT SELECT ANY TABLE TO KFS_USER;
GRANT SELECT ANY TRANSACTION TO KFS_USER;
GRANT SELECT ON SYS.V_$ARCHIVED_LOG TO KFS_USER;
GRANT SELECT ON SYS.V_$DATABASE TO KFS_USER;
GRANT SELECT ON SYS.V_$LOGMNR_CONTENTS TO KFS_USER;
GRANT SELECT ON V_$ARCHIVED_LOG TO KFS_USER;
GRANT SELECT ON V_$DATABASE TO KFS_USER;
GRANT SELECT ON V_$LOG TO KFS_USER;
GRANT SELECT ON V_$LOGFILE TO KFS_USER;
GRANT SELECT ON V_$LOGMNR_CONTENTS TO KFS_USER;
(continues on next page)
52 第 5 章 评估源端数据库
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
GRANT SELECT ON V_$LOGMNR_DICTIONARY TO KFS_USER;
GRANT SELECT ON V_$LOGMNR_LOGS TO KFS_USER;
GRANT SELECT ON V_$LOGMNR_PARAMETERS TO KFS_USER;
GRANT SELECT ON V_$PARAMETER TO KFS_USER;
如果有条件,可以考虑使用 DBA 权限
GRANT CONNECT, RESOURCE TO KFS_USER;
GRANT EXECUTE_CATALOG_ROLE TO KFS_USER;
GRANT CREATE SESSION TO KFS_USER;
GRANT SELECT ANY TRANSACTION TO KFS_USER;
GRANT SELECT ANY TABLE TO KFS_USER;
GRANT UNLIMITED TABLESPACE TO KFS_USER;
GRANT dba TO KFS_USER;
注:当源端 oracle 使用 logminer 方式解析时,由于 logminer 自身限制,不支持 GIS 相关类型数据的解析,
如不可避免,可改用 redo 方式解析
5.4.2 SQL Server 权限
Kingbase FlySync 使用 SQL Server CDC 的形式获取增量数据,部署时需要使用 SA 账号。
部署过程中使用 SA 账号自动创建 Kingbase FlySync 运行时需要的普通账号,之后不再使用 SA 账号。
故现场需要联系客户,获知 SA 账号密码。
5.4.3 MySQL 权限
Kingbase FlySync 采集 MySQL 源端增量数据采用物理日志解析的方式:
-- 源端数据库库 SUPER 权限
mysql> GRANT ALL ON *.* TO kfs_user@'%';
mysql> flush privileges;
如果是 8.0 及以上版本的 MySQL,还需要执行如下授权语句
ALTER USER kfs_user IDENTIFIED WITH mysql_native_password
5.4. 评估数据库账号权限 53
Kingbase FlySync 需求及可行性评估指南
5.4.4 KingbaseES V7 权限
Kingbase FlySync 使用物理日志解析的方式获取 KingbaseES V7 数据库增量数据。
目前需要使用 SUPERUSER 权限
ALTER USER KFS_USER SUPERUSER;
5.4.5 KingbaseES V8 权限
Kingbase FlySync 在获取 KingbaseES V8 数据库增量时,采用向数据库内核注入插件的形式实现。需要
REPLICATION 权限
CREATE USER KFS_USER PASSWORD 'password';
ALTER USER KFS_USER REPLICATION;
GRANT ALL PRIVILEGES ON DATABASE TEST TO KFS_USER;
其中 TEST 是要进行同步的数据库。如果需要同步 DDL,必须要在已赋权限的基础上赋予 create 权限和
insert 权限赋权后需要更改数据库安装目录下的 data/sys_hba.conf 文件,增加如下:
host replication KFS_USER 0.0.0.0/0 md5
5.4.6 PostgreSQL 权限
Kingbase FlySync 在获取 PostgreSQL 数据库增量时,采用向数据库内核注入插件的形式实现。需要
REPLICATION 权限
CREATE USER KFS_USER PASSWORD 'password';
ALTER USER KFS_USER REPLICATION;
GRANT ALL PRIVILEGES ON DATABASE postgre TO KFS_USER;
其中 postgre 是要进行同步的数据库。
5.5 评估存量数据
业务系统的存量数据量会影响到初始数据搬迁的耗时,以及上线后是否能够在有限时间之内完成全量数据
比对。
以下给出各种数据库的存量数据查询评估方法
54 第 5 章 评估源端数据库
Kingbase FlySync 需求及可行性评估指南
5.5.1 Oracle
SELECT
t.table_name
, t.num_rows
FROM
all_tables t
WHERE
owner = 'TEST' -- 待同步数据库的模式名
ORDER BY
NUM_ROWS DESC;
5.5.2 SQL Server
SELECT
t.name
, SUM(sPTN.Rows)
FROM
sys.tables t
INNER JOIN sys.partitions AS sPTN ON
t.object_id = sPTN.object_id
LEFT JOIN sys.schemas s ON
s.schema_id = t.schema_id
WHERE

s.name = 'test'
GROUP BY
-- 待同步数据库的模式名

t.name
ORDER BY
SUM(sPTN.Rows) DESC;
5.5.3 MySQL
SELECT
table_name
, table_rows
FROM
information_schema.tables
WHERE
TABLE_SCHEMA = 'test' -- 待同步数据库的库名
ORDER BY
table_rows DESC;
5.5. 评估存量数据 55
Kingbase FlySync 需求及可行性评估指南
5.5.4 KingbaseES
SELECT
relname AS TABLE_NAME
, n_live_tup AS ROWCOUNTS
FROM
sys_stat_user_tables
WHERE
schemaname = 'public' -- 待同步数据库的库名
ORDER BY ROWCOUNTS DESC;
5.5.5 PostgreSQL/KingbaseES pg 兼容模式
SELECT
relname AS TABLE_NAME
, reltuples AS rowCounts
FROM
pg_class c
LEFT JOIN pg_namespace n ON
n.oid = c.relnamespace
WHERE
c.relkind = 'r'
AND n.nspname = 'MYTEST' -- 待同步数据库的模式名
ORDER BY
rowCounts DESC;
5.6 评估关键字合法性
此问题主要出现在需要进行数据比对的场景。目前 Kingbase FlySync 的比对模块不支持表名称和字段名称为
特殊字符时的数据比对。在比对时,对于表和字段名需要满足如下的命名规则:
1. 以字母或者下划线开头
2. 后续可以跟一个或者多个字母、下划线、数字、美元符号
查询各个数据库中不满足约束的表名和字段名的 SQL 语句如下
56 第 5 章 评估源端数据库
Kingbase FlySync 需求及可行性评估指南
5.6.1 Oracle
• 查询不满足要求的表名
SELECT
TABLE_NAME
FROM
ALL_TABLES
WHERE

OWNER = 'TEST'
AND NOT REGEXP_LIKE (
-- 待同步数据库的库名

TABLE_NAME
, '^[_a-zA-Z][_\$a-zA-Z0-9]*$'
);
• 查询不满足要求的字段名
SELECT
table_name
, column_name
FROM
ALL_TAB_COLUMNS
WHERE

OWNER = 'TEST'
AND NOT REGEXP_LIKE (
-- 待同步数据库的库名

column_name
, '^[_a-zA-Z][_\$a-zA-Z0-9]*$'
);
5.6.2 SQL Server
目前 SQL Server 数据库不能够直接使用正则表达式,本文不列出 SQL Server 数据库的查询方法。
待后续再支持 SQL Server。
5.6.3 MySQL
• 查询不满足要求的表名
SELECT
table_name
FROM
information_schema.TABLES
WHERE
(continues on next page)
5.6. 评估关键字合法性 57
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
TABLE_SCHEMA = 'test' -- 待同步数据库的库名
AND NOT table_name REGEXP '^[_a-zA-Z][_\$a-zA-Z0-9]*$';
• 查询不满足要求的字段名
SELECT
table_name
, column_name
FROM
information_schema.columns
WHERE
TABLE_SCHEMA = 'test' -- 待同步数据库的库名
AND NOT column_name REGEXP '^[_a-zA-Z][_\$a-zA-Z0-9]*$';
5.6.4 KingbaseES
• 查询不满足要求的表名
SELECT
TABLENAME
FROM
SYS_TABLES
WHERE
SCHEMANAME = 'PUBLIC' -- 待同步数据库的模式名
AND TABLENAME !~ '^[_a-zA-Z][_\$a-zA-Z0-9]*$';
• 查询不满足要求的字段名
SELECT
c.relname
, a.attname
FROM
SYS_ATTRIBUTE a
LEFT JOIN SYS_CLASS c ON
c.oid = a.attrelid
LEFT JOIN SYS_NAMESPACE n ON
n.oid = c.relnamespace
WHERE
c.relkind = 'r'
AND n.nspname = 'PUBLIC'
AND a.attnum > 0
AND a.attname !~ '^[_a-zA-Z][_\$a-zA-Z0-9]*$';
58 第 5 章 评估源端数据库
Kingbase FlySync 需求及可行性评估指南
5.6.5 PostgreSQL
• 查询不满足要求的表名
SELECT
TABLENAME
FROM
pg_TABLES
WHERE
SCHEMANAME = 'PUBLIC' -- 待同步数据库的模式名
AND TABLENAME !~ '^[_a-zA-Z][_\$a-zA-Z0-9]*$';
• 查询不满足要求的字段名
SELECT
c.relname
, a.attname
FROM
pg_ATTRIBUTE a
LEFT JOIN pg_CLASS c ON
c.oid = a.attrelid
LEFT JOIN pg_NAMESPACE n ON
n.oid = c.relnamespace
WHERE
c.relkind = 'r'
AND n.nspname = 'PUBLIC'
AND a.attnum > 0
AND a.attname !~ '^[_a-zA-Z][_\$a-zA-Z0-9]*$';
5.7 查询数据库触发器
查询模式下的所有表是否有触发器存在:
查询各个数据库中不满足约束的表名和字段名的 SQL 语句如下
5.7.1 Oracle
• 查询模式下触发器
SELECT
t.TABLE_OWNER AS SCHEMA_NAME,
t.TABLE_NAME AS TABLE_NAME,
t.TRIGGER_NAME,
(continues on next page)
5.7. 查询数据库触发器 59
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
t.STATUS STATUS
FROM
ALL_TRIGGERS t
WHERE
t.TABLE_OWNER = 'CMZHAO'; -- 待同步数据库的模式名
5.7.2 SQL Server
• 查询模式下触发器
SELECT
s.name as schema_name,
st.name as table_name,
t.name as trigger_name,
t.is_disabled as status
FROM
sys.triggers t
LEFT JOIN sys.tables st ON
t.parent_id = st.object_id
LEFT JOIN sys.schemas s ON
st.schema_id = s.schema_id
WHERE
t.type = 'TR'
AND s.name = 'dbo'; -- 待同步数据库的模式名
5.7.3 MySQL
• 查询模式下触发器
select
t.event_object_schema as schema_name,
t.event_object_table as table_name,
t.trigger_name,
'' as status
from
information_schema.triggers t
where
event_object_schema = 'sys'; -- 待同步数据库的模式名
60 第 5 章 评估源端数据库
Kingbase FlySync 需求及可行性评估指南
5.7.4 KingbaseES
• 查询模式下触发器
SELECT
t.SCHEMANAME AS SCHEMA_NAME,
t.TABLENAME AS TABLE_NAME,
t.TGNAME AS TRIGGER_NAME,
t.TGENABLED AS STATUS
FROM
sys_triggers t
WHERE
tgkind = 'n'
AND t.SCHEMANAME = 'SCOTT'; -- 待同步数据库的模式名
5.7.5 PostgreSQL
• 查询模式下触发器
SELECT
t.trigger_schema AS SCHEMA_NAME,
t.trigger_catalog AS TABLE_NAME,
t.trigger_name AS TRIGGER_NAME,
'' AS STATUS
FROM
pg_trigger t
WHERE
t.trigger_schema = 'SCOTT'; -- 待同步数据库的模式名
5.7.6 KingbaseV7
• 查询模式下触发器
SELECT
t.SCHEMANAME AS SCHEMA_NAME,
t.TABLENAME AS TABLE_NAME,
t.TGNAME AS TRIGGER_NAME,
t.TGENABLED AS STATUS
FROM
sys_triggers t
WHERE
tgkind = 'n'
AND t.SCHEMANAME = 'SCOTT'; -- 待同步数据库的模式名
5.7. 查询数据库触发器 61
Kingbase FlySync 需求及可行性评估指南
5.8 评估数据库大小写设置
此问题主要出现在包含 KingbaseES 和其他异构数据源的数据比对场景。
问题的表现为 KingbaseES 在开启了大小写不敏感参数之后,默认的排序规格和其他数据源不一致,比如同
样包含四条数据,如下
• A
• B
• a
• b
• SQL Server 中的排序结果为
– A
– B
– a
– b
• KingbaseES 的排序结果为
– A
– a
– B
– b
导致比对时无法匹配,比对结果出错。查看 KingbaseES 是否开启了大小写不敏感参数的方式为
show case_sensitive;
当结果为 false 时需要注意,比对时可能会出现错误。
62 第 5 章 评估源端数据库
第 6 章
评估目标端数据库
目标端数据库原则上没有太大的要求,只需要权限够用即可
6.1 检查数据库编码
Kingbase FlySync 在数据同步过程中,如果是同构数据库,最好保证两端的数据库编码一致。
查询数据库字符编码的方法,参考 评估源端数据库一节中的描述
6.2 检查数据库账号权限
数据库同步目标端账号需要的权限为:
• 对被同步表记录的基本修改和删除权限
• 如果同步 DDL,还需要有对应权限的创建权限
目标端的权限通常比较容易满足,针对目标端账号权限的修改也不会影响到源端的业务系统,故本节不再
展开。
如果实际运行过程中发生了操作某些表权限不满足的情况,可以临时联系客户授权。
63
Kingbase FlySync 需求及可行性评估指南
64 第 6 章 评估目标端数据库
第 7 章
评估网络环境及端口
Kingbase FlySync 运行本身需要的端口如下

端口描述
11000/11001Kingbase FlySync 远程管理/监控 RMI 端口
3112KUFL 传输接口
8089管控平台外部访问接口
8090管控平台中心服务(比对服务需要独立部署时打开)
8091比对服务监听接口(比对服务需要独立部署时打开)

此外, Kingbase FlySync 所在机器需要能够连通同步两端数据库,可以使用 ping 命令检查数据库所在机器
的连通性
ping xx.xx.xx.xx
使用 telnet 检查数据库端口是否开放
telnet xx.xx.xx.xx 端口
注意
• 存在单向隔离设备的隔离环境中,还需要确认客户提供的配置端口是否满足需求,具体检测方式以客
户提供的方法为准
65
Kingbase FlySync 需求及可行性评估指南
• 配置端口的数量需要和 KFS 部署的实例数保持一致;如果需要部署多个服务的 KingbaseFlySync 同步
多个不同的数据库数据,就需要提供多对隔离映射端口。
66 第 7 章 评估网络环境及端口
第 8 章
评估数据转换能力满足度
在一些复杂的业务场景中,同步两端的数据库品牌或者业务逻辑不一样,导致两端的表结构不一致。从而要
求 Kingbase FlySync 在数据同步过程中还要进行数据的转换。
Kingbase FlySync 目前支持的转换能力参见《Kingbase FlySync 生命周期管理手册》中的 数据转换方案一节
评估时,需要结合客户的诉求和 Kingbase FlySync 目前的转换支持能力,客观的给出结果。
67
Kingbase FlySync 需求及可行性评估指南
68 第 8 章 评估数据转换能力满足度
第 9 章
评估和调整同步性能
Kingbase FlySync 的产品定位为实时数据同步软件,同步性能是最主要的评价标准之一
实际现场部署前、在完成功能评估后,还需要进行性能评估和调整。
9.1 性能评估
性能评估涉及三个部分
• 源端数据解析性能评估
• 数据传输性能评估
• 数据入库性能评估
以下分别阐述评估办法
9.1.1 源端数据解析性能评估
数据解析评估的指导方法为
• 部署好 Kingbase FlySync 同步软件后,停止同步服务
fsrepctl offline [-service 源端服务名] -- 停止同步服务
• 对源端应用进行压力测试;或者等待源端应用运行一个业务周期( N 个小时,或者 N 天)
69
Kingbase FlySync 需求及可行性评估指南
• 开启 Kingbase FlySync 同步软件源端,观察需要多长时间解析软件可以解析完累积的数据
fsrepctl online [-service 源端服务名] -- 启动同步服务
kufl list -last [-service 源端服务名] -- 不断重复执行,观察输出结果中的 TIME 值和当前时
间一致
• 计算数据解析时间和压测时间或者业务运行时间之间的差值
解析时间需要小于数据生成的时间,才能够保证解析性能满足指标
9.1.2 数据传输性能评估
传输性能可以根据数据解析阶段生成的中间 KUFL 文件大小进行评估,具体指导方法为
• 计算解析阶段生成的 KUFL 文件大小
du -sh 安装路径/kufl
• 根据数据成生成的时长(压测时间或者等待业务运行时间),计算需要的传输速度
KUFL 大小 / 数据生成时长
正常情况下,计算出来的值小于 60MB/s ,传输性能就能够满足
9.1.3 数据入库性能评估
入库性能同样可以根据数据解析阶段生成的中间 KUFL 文件大小进行评估,具体指导方法为
• 关闭目标端同步服务
fsrepctl offline [-service 目标端服务名] -- 停止同步服务
• 将源端生成的 KUFL 文件,拷贝至目标端 KUFL 目录(或者等待自然传输完成),目标端 KUFL 目录路径
安装路径/kufl/服务名
• 启动目标端,并计算整体入库时间

kufl list -last
date
fsrepctl online [-service 目标端服务名]
fsrepctl wait -applied 最大事务号
date
-- 获取 kufl 中最大事务号
-- 标记启动时间
-- 启动同步服务
-- 标记结束时间

最终性能计算方法
70 第 9 章 评估和调整同步性能
Kingbase FlySync 需求及可行性评估指南
KUFL 大小 / (结束时间 - 启动时间)
当入库的时长小于数据生成时长时,认为入库性能可以满足需求
注意:
• 解析性能评估和网络性能评估阶段,不要开启目标端同步服务,否则可能在入库性能评估前,已经有
部分数据入库完成
• 评估前源端和目标端数据尽量保持一致,否则在数据入库时可能出现数据冲突
– 如果冲突数据较少,可以配置 replicator.applier.failure_policy=warn 参数来进行忽略
– 如果冲突数据太多,则需要重新进行评估(否则性能评估不准确)
9.2 性能调整
上一阶段评估出来的性能如果无法满足实际业务需求,就需要进行性能调整。
性能调整分为两个步骤
• 识别瓶颈点
• 根据性能瓶颈点,调整和变化 Kingbase FlySync 部署方式
识别性能瓶颈已经在上一节完成,本节主要描述针对不同的性能瓶颈具体调整思路
9.2.1 目标端入库瓶颈
目标端入库瓶颈是比较常见的性能瓶颈,调整方法也比较多,具体的解决方法可以根据瓶颈大小进行选择,
指导方向顺序如下(顺序进行,当前调整不能满足要求时,继续进行下一级调整)
1. 调整每次提交数据量大小
调整目标端参数 replicator.global.buffer.size ,提高 10 倍或者更高 (减少目标数据库
commit 次数)
property=replicator.global.buffer.size=100 -- 默认为 10
1. 增加入库通道数量( 1 读 N 写)
用在业务比较简单的场景,比如全部为 INSERT 操作,或者针对某些表的 UPDATE、 DELETE 操
作;不存在事务之间的先后顺序依赖
配置方法为,在目标端增加如下参数
svc_parallelization_type=memory
channels=4 -- 根据实际需要调整
(continues on next page)
9.2. 性能调整 71
Kingbase FlySync 需求及可行性评估指南
(continued from previous page)
property=replicator.store.parallel-queue.partitionerClass=\
com.continuent.tungsten.replicator.storage.parallel.
,→RoundRobinPartitioner
1. 增加传输通道数量( N 个 1 读 1 写)
目标端增加多个服务,每个服务同步特定的表,比如
[服务 1]
...
svc-remote-filters=replicate
property=replicator.filter.replicate.do=PUBLIC.TABLE1,PUBLIC.TABLE2
...
[服务 2]
...
svc-remote-filters=replicate
property=replicator.filter.replicate.do=PUBLIC.TABLE3,PUBLIC.TABLE4
...
[服务 3]
...
svc-remote-filters=replicate
property=replicator.filter.replicate.ignore=PUBLIC.TABLE1,PUBLIC.TABLE2,\
PUBLIC.TABLE3,PUBLIC.TABLE4
...
前两个服务仅同步特定表,最后一个服务同步前两个服务未同步的表(将前面两个服务已经同步
的表过滤掉)
实际部署时,可以根据现场环境调整服务数量,和每个服务需要同步的表。
分服务部署方案的好处不仅是增加了传输通道,更重要的特点在于:将某些操作频繁的表分出
来单独入库,最大限度的利用 Kingbase FlySync 的 PBE 特性,提高了单通道的入库性能。
注意: 采用目标端配置多个传输通道的方案,会改变原有的部署架构,对初始数据搬迁产生影
响。建议初始搬迁在没有进行通道拆分之前完成,如果运行过程中需要进行初始搬迁,则
需要针对目标端的每个服务,分别进行初始搬迁。
1. 同时增加传输通道数量和入库通道数量( M 个 1 读 N 写)
如果经过前面三个调整方式,性能还无法满足需求,可以考虑将第 2 种方式和第 3 种方式结
合起来
• 部署多个服务
• 每个服务本身再使用多通道入库
72 第 9 章 评估和调整同步性能
Kingbase FlySync 需求及可行性评估指南
9.2.2 网络传输瓶颈
Kingbase FlySync 在传输过程中需要进行对象的序列化和反序列化,所以在有些场景下,并不能将网络带宽
全部占用,可以使用增加传输通道的形式优化传输性能。
增加传输通道的配置方式参见目标端入库瓶颈 中的描述。
如果网络带宽本身变成瓶颈,则需要考虑升级硬件设备
9.2.3 源端解析瓶颈
解析瓶颈需要具体分析引发原因,根据原因进行调整,具体包括
• 超大事务导致的解析慢
此类问题的识别方法为:源端的业务压力很大, Kingbase FlySync 也一直处于 ONLINE 状态, 执行如
下命令
kufl [-service 服务名] -list last
发现最后的一条解析数据总是不变。此时可以判定有大事务一直解析不出来,处于阻塞状态。解决办
法为,在源端配置种增加如下配置
property=replicator.extractor.dbms.minRowsPerBlock=1000 -- 表示最大 1000 条数据拆分为一个
事务
• 源端数据库业务量大,导致的解析性能跟不上
如果发现源端的解析性能跟不上,可以考虑在源端部署多个服务,每个服务解析不同的表
[服务 1]
...
svc-extractor-filters=replicate
property=replicator.filter.replicate.do=PUBLIC.TABLE1,PUBLIC.TABLE2
...
[服务 2]
...
svc-extractor-filters=replicate
property=replicator.filter.replicate.do=PUBLIC.TABLE3,PUBLIC.TABLE4
...
[服务 3]
...
svc-extractor-filters=replicate
property=replicator.filter.replicate.ignore=PUBLIC.TABLE1,PUBLIC.TABLE2,\
PUBLIC.TABLE3,PUBLIC.TABLE4
9.2. 性能调整 73
Kingbase FlySync 需求及可行性评估指南
前两个服务仅同步特定表,最后一个服务同步前两个服务未同步的表(将前面两个服务已经同步的表
过滤掉)
实际部署时,可以根据现场环境调整服务数量,和每个服务需要同步的表。
注意:
源端部署了多个服务后,目标端也需要一一对应的部署多个服务。
• 源端数据库访问慢,导致的解析性能跟不上
Kingbase FlySync 源端每解析出一个事务,在事务存储为 KUFL 的同时,还需要更新数据库中的断点
信息表。如果数据库访问特别慢(具体需要进行 profile 才能定位),可以考虑不在数据库中记录断点
信息。
– 方案 1,在文件中记录断点信息
[服务 1]
...
property=replicator.store.kufl.dataSource=file_metadata
...
– 方案 2,不记录断点信息(使用源端 KUFL 作为断点信息,弊端是无法手动调整断点)
[服务 1]
...
property=replicator.store.kufl.dataSource=
...
• 源端数据库访问慢、数据变化涉及的表数量多,导致的解析性能跟不上
Kingbase FlySync 源端在解析增量时,需要从数据库查询表的元信息,如果数据库访问特别慢(具体
需要进行 profile 才能定位),需要查询元信息的表又特别多,可以考虑启动时一次性缓存大量元信息。
[服务 1]
...
property=replicator.extractor.dbms.cacheMeta=true
proterty=replicator.extractor.dbms.cacheSize=1000
...
备注:
此参数仅支持源端为 Oracle Redo 时
74 第 9 章 评估和调整同步性能
Kingbase FlySync 需求及可行性评估指南
9.3 性能调整总结
实际项目中需要尽可能的覆盖业务场景进行性能的评估和调整,如果各种调整优化手段之后性能还无法满
足,就需要慎重决定是否采用 Kingbase FlySync 作为同步方案
9.3. 性能调整总结 75
Kingbase FlySync 需求及可行性评估指南
76 第 9 章 评估和调整同步性能
第 10 章
常见问题
本节列出评估阶段的常见问题
1. 源端 V8/PG,分区表主表有主键,子表无主键, update/delete 操作不解析
当源端是 V8/PG 时,分区表存在主表与子表的概念,我们解析的是子表的数据操作,当
子表没有主键的情况下,需要对子表执行如下语句 ALTER TABLE TABLE_NAME REPLICA
IDENTITY FULL;
77

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值