前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >崖山数据库 YMP 迁移工具使用体验

崖山数据库 YMP 迁移工具使用体验

作者头像
JiekeXu之路
发布2024-05-28 17:14:55
1560
发布2024-05-28 17:14:55
举报
文章被收录于专栏:JiekeXu之路JiekeXu之路
作者 | JiekeXu 来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)

一、简 介

崖山迁移平台(YashanDB Migration Platform,YMP)是 YashanDB 提供的数据库迁移产品,支持异构 RDBMS 与 YashanDB 之间进行迁移评估、离线迁移、数据校验的能力。YMP提供可视化服务,用户只需通过简单的界面操作,即可完成从评估到迁移整个流程的执行与监控,实现低门槛、低成本、高效率的异构数据库迁移。

核心特性

精确评估:基于可插拔数据库最小内核,在评估阶段即精确验证SQL 兼容性,评估结果真实可信。

SQL自动转换:支持SQL语句自动转换,全面适配YashanDB语法,解决大部分不兼容SQL的适配转换问题,大大减少人工适配工作量。

评估迁移无缝对接:评估结果自动作为迁移的基础,迁移时即按照评估阶段所做的对象DDL 自动/手动改写来执行,实现评估兼容即迁移成功。

对象一键迁移:一键整合所有对象元数据迁移,充分考虑对象依赖关系,及对数据迁移的影响,并采用端到端性能最优的执行策略,智能决策元数据对象创建顺序。

数据高性能迁移:基于数据库原生高性能导入导出能力,采用流水线多级并行架构,实现原厂级高性能数据迁移。

数据校验:通过数据库自身查询排序能力,并发抽取数据,对异构数据源数据统一格式处理,实现数据对比检验,确保数据一致性。

一站式服务:将包括迁移评估、离线迁移、数据校验在内的迁移方案全流程整合在一个平台上,为用户提供低门槛、可视化、可复制的一站式迁移服务。

应用场景:YMP是面向数据库迁移场景提供的离线评估迁移工具,能够解决迁移兼容性与工作量预估、异构数据库元数据迁移以及数据快速迁移的问题。

YMP 架构

崖山迁移平台(YashanDB Migration Platform,YMP)的总体架构如下:

核心服务介绍

对象评估:提供多源异构RDBMS与YashanDB之间对象兼容的评估能力。支持多种异构数据库源、SQL文件、XML文件作为输入源,提供SQL转换、DDL改写和SQL自动验证等功能。

元数据迁移:提供元数据迁移能力。支持对迁移范围的灵活选择,支持不同情景下的对象冲突策略选择,迁移前风险检查和实时展示迁移进度和对象级迁移结果。

数据迁移:提供表数据迁移能力。支持数据冲突处理选择,基于数据库原生高性能导入导出能力,采用多表并行、分表并行架构,实现原厂级高性能数据迁移。

数据校验:提供多源异构RDBMS与YashanDB之间的数据校验能力。包括全量校验和统计校验功能,满足迁移后数据一致性的强力支持。

数据库版本支持

从官网来看目前仅支持 Oracle11g-21c、MySQL5.6/5.7/5.8、DM8 这三种数据库,像其他主流的PG 暂时还没有支持,不在下表的数据库及版本也不支持,例如 Oracle10g 就不支持。

数据类型支持

二、安装前说明

本虚拟机为RHEL7.6 8c16g已经提前安装过YashanDB Server Personal Edition Release 23.1.1.100 x86_64 - X86 64bit Linux,然后也安装了 Oracle 19.23 的单机版,自带openjdk 11。

迁移信息

源端数据库

Oracle 11.2.0.4

IP 地址:192.168.217.124

RHEL7.6 4c16g

YMP 迁移工具

v23.2.1.2

IP 地址:192.168.217.87

RHEL7.6 8c16g

目标端数据库

23.2.1.100

IP 地址:192.168.217.173

RHEL7.6 8c16g

注:YMP 离线迁移,增量数据无法迁移,避坑指南:YMP 和目标数据库版本需要保持一致。

三、安装前准备

操作系统参数调整

需确保操作系统max user processes最大用户线程数不小于65535。

代码语言:javascript
复制
# 查看最大用户线程数

# ulimit -u
# 执行如下命令使最大用户线程数临时生效,重启后无效

# ulimit -u 65536

行执行如下命令将最大用户线程数写入/etc/security/limits.conf文件,重启后参数永久生效

代码语言:javascript
复制
# echo "
 * soft nproc 65536
 * hard nproc 65536
 " >> /etc/security/limits.conf

开放端口

安装默认端口号,我这里采用了以前YashanDB23.1.1 版本作为内置库,故端口号为 1688。

端口列表请参考:https://doc.yashandb.com/ymp/23.2/zh/%E5%8F%82%E8%80%83%E8%AF%B4%E6%98%8E/%E7%AB%AF%E5%8F%A3%E5%88%97%E8%A1%A8.html。

YMP监听

内置库监听

主机间通信

yasom

yasagent

8090

8091

8092

8093

8094

关闭防火墙

在主机上执行如下命令关闭防火墙:

代码语言:javascript
复制
代码语言:javascript
复制
# 关闭防火墙
# systemctl stop firewalld
# 关闭开机自启
# systemctl disable firewalld
代码语言:javascript
复制

如果防火墙不能关闭,则需按如下步骤添加端口到白名单中:

1.查看防火墙端口开放情况:

代码语言:javascript
复制
# firewall-cmd --zone=public --list-ports

2.添加端口到防火墙(Firewall):

这里以 8090 为例演示如何添加端口到防火墙中,其他端口操作方法相同。

代码语言:javascript
复制
代码语言:javascript
复制
# 添加(--permanent 永久生效,没有此参数重启后失效)
# firewall-cmd --zone=public --add-port=8090/tcp --permanent
# 重新载入
# firewall-cmd --reload
# 查看
# firewall-cmd --zone=public --query-port=8090/tcp
代码语言:javascript
复制

如需从白名单中删除已添加的端口,使用如下命令:

代码语言:javascript
复制
代码语言:javascript
复制
# 删除已添加的端口
# firewall-cmd --zone=public --remove-port=8090/tcp --permanent
代码语言:javascript
复制

YMP 用户准备

创建一个用户用于安装 YMP,以 YMP 为例,在用户创建和授权后,后续所有安装步骤均在该用户下操作。

代码语言:javascript
复制
代码语言:javascript
复制
# 新建YMP用户
# useradd -d /home/ymp -m ymp
# passwd ymp
#这里设置密码为 Yashan23.1.1
代码语言:javascript
复制

JDK环境准备

YMP 仅支持在 JDK8 或 JDK11 的环境下安装。

代码语言:javascript
复制
[root@JiekeXu ~]# java -version
openjdk version "11-ea" 2018-09-25
OpenJDK Runtime Environment (build 11-ea+28)
OpenJDK 64-Bit Server VM (build 11-ea+28, mixed mode, sharing)
[root@JiekeXu ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.6 (Maipo)
[root@JiekeXu ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:          15884        4647        3810        6638        7426        4401
Swap:          8063         271        7792
[root@JiekeXu ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             2
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 79
Model name:            Intel(R) Xeon(R) CPU E7-4809 v4 @ 2.10GHz
Stepping:              1
CPU MHz:               2094.952
BogoMIPS:              4189.90
Hypervisor vendor:     VMware
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              20480K
NUMA node0 CPU(s):     0-7
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap xsaveopt arat spec_ctrl intel_stibp flush_l1d arch_capabilities 

libaio 环境准备

YMP 运行需要的 libaio 动态库。

代码语言:javascript
复制
# 查看是否已安装 libaio 动态库
# rpm -qa | grep libaio
libaio-devel-0.3.109-13.el7.i686
libaio-0.3.109-13.el7.x86_64
libaio-devel-0.3.109-13.el7.x86_64
libaio-0.3.109-13.el7.i686
#  若未有版本信息打印,安装libaio
# yum install -y libaio

OCI 环境准备

如需要使用 Oracle 到 YashanDB 的数据迁移功能,请进行 OCI 环境安装。

准备 OCI 环境需从 Oracle 官网(https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html#license-lightbox) 下载 OCI 客户端并依据官网所列步骤进行安装。

YMP 现仅支持 OCI Version 19.19.0.0.0 及以上版本。建议下载和安装的版本信息如下:

·instantclient-basic-linux.x64-19.19.0.0.0dbru.el9.zip

instantclient-basic-linux.x64-19.19.0.0.0dbru.el9.zip

上传安装包至YMP用户/home/ymp/路径。

代码语言:javascript
复制
代码语言:javascript
复制
# 解压OCI安装包
$ unzip instantclient-basic-linux.x64-19.19.0.0.0dbru.el9.zip
代码语言:javascript
复制
           

YashanDB 环境准备

使用默认内置库时,本步骤可省略。

使用外部内置库时:

我这里已有的 YashanDB 单机环境,则需由 DBA 在该环境中执行如下脚本:

代码语言:javascript
复制
 --创建一个 ymp 用户(以 YMP_DEFAULT 为例)并为其授权
 create user YMP_DEFAULT IDENTIFIED BY ymppw602 DEFAULT TABLESPACE users;
 GRANT ALL PRIVILEGES TO YMP_DEFAULT;
 GRANT DBA TO YMP_DEFAULT;

软件包准备

代码语言:javascript
复制
YMP 安装包:yashan-migrate-platform-v23.2.1.2-linux-x86-64.zip
YashanDB 安装包:yashandb-personal-23.2.1.100-linux-x86_64.tar.gz
OCI 安装包:instantclient-basic-linux.x64-19.19.0.0.0dbru.el9.zip
https://download.yashandb.com/download
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html#license-lightbox

四、安装 YMP

解压软件包

上传 YMP 安装包至 /home/ymp 目录下然后解压:

代码语言:javascript
复制
代码语言:javascript
复制
# 切换至 YMP 安装目录
$ cd /home/ymp/
$ unzip yashan-migrate-platform-v23.2.1.2-linux-x86-64.zip

安装参数调整

依据实际需要对 YMP 启动参数进行调整,我这里全部采用默认值,没做修改。https://doc.yashandb.com/ymp/23.2/zh/%E5%8F%82%E8%80%83%E8%AF%B4%E6%98%8E/%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E.html。

默认内置库安装配置文件

代码语言:javascript
复制
# /home/ymp/yashan-migrate-platform/conf
代码语言:javascript
复制
代码语言:javascript
复制
# more /home/ymp/yashan-migrate-platform/conf/db.properties
YASDB_PASSWORD=3uplbtbnyZ5XFRtpg5F5JQ== # 默认内置库sys用户默认密码密文
YASDB_PORT=8091 # 默认内置库默认端口号
YASDB_CHARACTER_SET=UTF8 # 默认内置库字符集,还可选择ASCII, ISO88591, GBK
代码语言:javascript
复制

YMP 配置文件

代码语言:javascript
复制
# /home/ymp/yashan-migrate-platform/conf
代码语言:javascript
复制
# more /home/ymp/yashan-migrate-platform/conf/application.properties
# YMP服务端口
server.port=8090
# 用户登录后空闲过期时间,单位秒(s),默认15分钟
shiro.session.timeout=900
# YMP使用的最大堆内存,支持按绝对内存指定(如:4G)和按物理机实际内存的百分比指定(如:50%)
ymp_memory=50%
# YMP使用的堆外内存,单位: GB
ymp_direct_memory=2
# YMP使用的时区ID
time_zone_id=GMT+8:00

# ========================================YMP内置库=============================================
# YMP内置库连接信息
spring.datasource.url=jdbc:yasdb://127.0.0.1:8091/yashan
spring.datasource.username=YMP_DEFAULT
spring.datasource.password=BPZ0VmrxlFoUgfm1UOS2pg==
spring.datasource.largePoolSize=64M
spring.datasource.cursorPoolSize=64M
# 默认内置库表类型,默认HEAP,可选HEAP,TAC,LSC
spring.datasource.defaultTableType=HEAP
spring.datasource.openCursors=3000
spring.datasource.sharePoolSize=2G
spring.datasource.dateFormat=yyyy-mm-dd hh24:mi:ss
spring.datasource.ddlLockTimeout=2

# ========================================评估=============================================
# YMP的最大并行任务数
task.parallel.max-num=500
# 预计数据迁移速度,KB/s。修改会影响评估结果预计迁移时间的大小
commons.dataMigrateSpeed=51200
# 预计对象迁移速度,number/s。修改会影响评估结果预计迁移时间的大小
commons.objMigrateSpeed=200
# 评估任务单个会话获取DDL的数量,如果Oracle性能较差,则需要降低该值
assessment.ddlCount=50
# 评估任务最多同时拥有的会话数,如果Oracle性能较差,则需要降低该值
assessment.maxThreadCount=20
# 内置库表类型是否为LSC,默认为false
isLscTable=false
# 拦截的Oracle数据源db/schema黑名单
schemaBlackList.oracle=ANONYMOUS,APEX_030200,APEX_PUBLIC_USER,APPQOSSYS,BI,CTXSYS,DBSNMP,DIP,EXFSYS,FLOWS_FILES,HR,IX,MDDATA,MDSYS,MGMT_VIEW,OE,OLAPSYS,ORACLE_OCM,ORDDATA,ORDPLUGINS,ORDSYS,OUTLN,OWBSYS,OWBSYS_AUDIT,PM,SCOTT,SH,SI_INFORMTN_SCHEMA,SPATIAL_CSW_ADMIN_USR,SPATIAL_WFS_ADMIN_USR,SYS,SYSMAN,SYSTEM,WMSYS,XDB,XS$NULL
# 拦截的MySQL数据源db/schema黑名单
schemaBlackList.mysql=information_schema,mysql,performance_schema,sys
# 拦截的dm数据源db/schema黑名单
schemaBlackList.dm=SYS,SYSDBA,SYSSSO,SYSAUDITOR,CTISYS

# ========================================迁移=============================================

# 元数据迁移过程中源端、目标端查询视图连接数。在元数据迁移过程中会有分批量的查询的动作, 需要开启多个查询连接并行查询。该参数配置元数据迁移的源端、目标端查询的并行线程数,决定了对数据库的查询最大连接数,不设置默认20
migration.parallel.query=20
# 元数据迁移过程中目标端执行创建连接数。在元数据迁移过程中会并行把对象在目标端的执行,以提升迁移效率。该参数配置元数据迁移的目标端DDL执行的并行线程数,决定了连接数据库的执行最大连接数,不设置默认20。migration.parallel.query和migration.parallel.execute的连接总和,是最终迁移过程中所有的目标端数据库连接数。
migration.parallel.execute=20
# 创建索引是否使用并行参数,true/TRUE:使用,false/FALSE:不使用
migration.parallel.createIndexUseParallel=true
# 索引创建的并行度,需要考虑migration.parallel.execute。例:migration.parallel.execute:10,migration.parallel.index: 5,表示,同时10个连接在并行建索引,每个索引的并行度是5(CREATE INDEX XXX PARALLEL 5)。不填默认CPU核数。
migration.parallel.index=5
# 数据迁移前是否将表设为nologging,默认为false
setNoLogging=false
# 导出oracle时使用的导出方式,支持 [dts, jdbc] 两种方式
export.oracle.tool=dts
# 导出时每个csv文件的行数
export.csv.exportRowsEveryFile=2000000
# 迁移成功时候是否删除csv文件
export.csv.isRemoveCsvFileInSuccess=true
# csv文件存储路径包含对schema和table的拼接,schema名或table名中包含以上字符时,将会被替换,以避免被操作系统识别错误导致迁移失败;不过这可能会使某些表(比如AA$与AA.)在替换后使用的csv文件存储路径相同,导致迁移失败(No such file or directory),可以通过重新迁移失败表来解决
export.csv.path.replacement.from=\ /'."*$
# 发生csv文件存储路径字符替换时(详见export.csv.path.replacement.from),指定替换的目标字符或字符串
export.csv.path.replacement.to=_
# 导出时大表拆分的个数
export.table.splitCount=5
# 导出时触发大表拆分的行数
export.table.splitConditionCount=10000000
# 导出时触发大表拆分的表大小(G)
export.table.splitConditionSize=5
# 导出时带lob字段大表拆分的个数
export.lobTable.splitCount=5
# 导出时触发带lob字段大表拆分的行数
export.lobTable.splitConditionCount=1000000
# 导出时触发带lob字段大表拆分的表大小(G)
export.lobTable.splitConditionSize=5
# 使用jdbc导出时每个csv文件的最大行数
export.jdbc.thresholdForSplittingFileLines=5000000
# 使用jdbc导出时每个csv文件的最大大小(M)
export.jdbc.thresholdForSplittingFileSize=3072
# 一行数据中所有lob字段小于指定字节长度时会优化为行内导入
export.jdbc.lob.headSize=8192
# 在数据迁移阶段,源端数据类型是char、nchar、character时,移除数据右侧空格
export.jdbc.charRightTrim=true
# 在数据迁移阶段,源端数据类型是varchar、nvarchar时,移除数据右侧空格
export.jdbc.varcharRightTrim=false
# #yasldr More References: http://doc.yashandb.com/yashandb/22.2/zh/%E5%B7%A5%E5%85%B7%E6%89%8B%E5%86%8C/yasldr/yasldr%E4%BD%BF%E7%94%A8%E6%8C%87%E5%AF%BC.html
# yasldr导入时的并行度
import.degree_of_parallelism=16
# yasldr导入时每批次的CSV数据行数
import.batch_size=2048
# yasldr导入方式,包括BASIC方式和BATCH方式
import.mode=BATCH
import.SENDERS=7
import.CSV_CHUNK_SIZE=128

# ========================================校验=============================================

# 校验任务限制每个数据源支持的最大连接数
checkTask.datasource.max-connection=500
# 校验任务获取连接超时时间,单位:ms
checkTask.datasource.connection-timeout=10000
# 校验任务获取的连接池中维持的最小连接数
checkTask.datasource.minimum-idle=0
# 校验任务的最大并行任务数
checkTask.task.parallel.max-num=20
# 校验任务的子任务的最大并行任务数,即一个任务多少个表在同时校验
checkTask.subTask.parallel.max-num=200
# 校验任务的全量校验对YashanDB的FLOAT数据类型的校验精度
checkTask.checkFloatPrecision=6
# 校验任务的全量校验对YashanDB的Double数据类型的校验精度
checkTask.checkDoublePrecision=15
# 校验任务的数据类型映射源端是char数据类型就移除源端和目标端的数据右侧空格进行对比
checkTask.charRightTrim=true
# 校验任务的数据类型映射源端是varchar数据类型就移除源端和目标端的数据右侧空格进行对比
checkTask.varcharRightTrim=false
# MySQL和DM的“”转换成NULL值进行校验
checkTask.emptyStringConvertToNull=true
# MySQL的数据类型YEAR、TIME、DATE、DATETIME、TIMESTAMP都是0值转换成NULL进行校验
checkTask.zeroDateConvertToNull=true
# LOB类型一次获取大小(数组长度)
checkTask.lobBufferSize=1024
# LOB类型差异展示长度,确保小于bufferSize(数组长度)
checkTask.lobPerformSize=200
# CLOB类型一次获取大小(数组长度)
checkTask.clobBufferSize=1080

默认内置库安装 YMP

YMP 安装时按默认方式自行安装 YashanDB 作为内置库。

默认内置库相关信息:

·部署形态:单机

·集群名称:ymp

·安装目录:/home/ymp/yashan-migrate-platform/db

更改内置库SYS用户默认密码(可选)
代码语言:javascript
复制
# 进入安装目录执行更改密码命令,以 Yasdb_123 为例:
代码语言:javascript
复制
代码语言:javascript
复制
$ cd /home/ymp/yashan-migrate-platform/        
$ sh bin/ymp.sh password --sys Yasdb_123
代码语言:javascript
复制

安装内置库和 OCI 客户端并启动 YMP

代码语言:javascript
复制
代码语言:javascript
复制
# 进入安装目录执行安装命令
$ cd /home/ymp/yashan-migrate-platform/

$ sh bin/ymp.sh install --db /home/ymp/yashandb-personal-23.2.1.100-linux-x86_64.tar.gz --path /home/ymp/instantclient_19_19
checking install profile.toml...
install version: yashandb 23.2.1.100
update host to yasom...
YMP started successfully!
代码语言:javascript
复制

自定义内置库安装 YMP

使用自定义内置库指使用外部的YashanDB数据库作为 YMP 的业务库使用,YMP 安装时不再安装 YashanDB 数据库。BUT,这里还是有坑哈,自定义的内置库版本要一样哦。

不能使用迁移的目标库作为自定义内置库。建议还是单独安装一个默认的内置库,不要选择以前的旧版本,不然会太坑,后面迁移配置时离线检查过不去。。。

修改配置文件

代码语言:javascript
复制
# 修改工具yashan-migration-platform/conf/application.properties文件

# YMP 业务数据库连接信息

# url 改为自定义内置库的 url,格式为 IP:PORT

代码语言:javascript
复制
# 进入安装目录执行更改连接信息指令,
代码语言:javascript
复制
$ cd /home/ymp/yashan-migrate-platform/
$ sh bin/ymp.sh connection --url 192.168.217.87:1688 --username YMP_DEFAULT --password ymppw602
代码语言:javascript
复制
# 单独修改配置文件中连接用户密码
代码语言:javascript
复制
$ sh bin/ymp.sh password --user yasdb_123
代码语言:javascript
复制

执行安装

安装 yasldr 依赖库和 OCI 客户端并启动 YMP

代码语言:javascript
复制
# 进入安装目录执行安装命令
$ cd /home/ymp/yashan-migrate-platform/
$ sh bin/ymp.sh installnodb --db /home/ymp/yashandb-personal-23.2.1.100-linux-x86_64.tar.gz --path /home/ymp/instantclient_19_19
代码语言:javascript
复制

查看运行状态

代码语言:javascript
复制
$ cd /home/ymp/yashan-migrate-platform/
$ sh bin/ymp.sh status
YMP is running, pid is 13566.
Built-in database is used, pid is 13412.
代码语言:javascript
复制
重启 YMP

默认内置库启动 YMP:

代码语言:javascript
复制
$ cd /home/ymp/yashan-migrate-platform/
 $ sh bin/ymp.sh start  
代码语言:javascript
复制

自定义内置库重启 YMP:

代码语言:javascript
复制
代码语言:javascript
复制
 $ cd /home/ymp/yashan-migrate-platform/
 $ sh bin/ymp.sh restartnodb
代码语言:javascript
复制
代码语言:javascript
复制
           

默认内置库停止 YMP:

代码语言:javascript
复制
代码语言:javascript
复制
 $ cd /home/ymp/yashan-migrate-platform/
 $ sh bin/ymp.sh stop
代码语言:javascript
复制

自定义内置库停止 YMP:

代码语言:javascript
复制
代码语言:javascript
复制
 $ cd /home/ymp/yashan-migrate-platform/
 $ sh bin/ymp.sh stopnodb
代码语言:javascript
复制
代码语言:javascript
复制
           

默认内置库重启 YMP:

代码语言:javascript
复制
代码语言:javascript
复制
 $ cd /home/ymp/yashan-migrate-platform/
 $ sh bin/ymp.sh restart
查看版本
代码语言:javascript
复制
$ cd /home/ymp/yashan-migrate-platform/
$ sh bin/ymp.sh -v
Yashan-migrate-platform version: Release v23.2.1.2
YashanDB SQL Personal Edition Release 23.2.1.100 x86_64
YashanDB Loader Personal Edition Release 23.2.1.100 x86_64 2d13f1d        

五、访问YMP

访问方式:http://IP:PORT/,PORT默认8090,初始账户名和密码是(admin/admin)。

代码语言:javascript
复制
http://192.168.217.87:8090

第一次登录需要修改密码,我这里将其修改为 Yashan23.1.1

六、添加数据源

点击右上角【+ 添加数据源】,填写基础信息之后点击【测试连接】,只有测试连接成功才可以成功添加数据源。

若测试连接失败会提示对应的失败消息,例如用户名或密码错误等。

在添加数据源时会同步获取数据源的版本和连接信息。

添加数据源字段说明:

·数据源名称:系统内唯一数据源名称。

·数据源类型:支持选择 Oracle、MySQL、YashanDB、DM。

·主机 IP:数据库所在IP地址。

·端口:数据库监听端口,目前这个 YMP 23.2.1.2 版本监听端口不能大于等于 60000。

·数据库:可选项,Oracle必填、MySQL、DM、YashanDB选填。

·用户名:数据库连接用户(连接用户需要有迁移平台所需权限,所需权限详见:数据源权限配置)。

·密码:数据库连接用户密码。

·是否为普通用户:仅 Oracle 和 DM 数据源支持,默认为非普通用户。详见:普通用户配置。

我这里是测试环境,源端使用了 11.2.0.4 版本的 system 系统用户建立数据源。

目标端一开始使用 YMP 主机上的 yashan23.1 出现问题后,又选择其他机器部署23.2 版本的数据库作为目标端迁移。

任务管理

介绍任务管理的所有操作。

整个任务流程如图:

创建任务是一切任务的起点,点击任务列表右上角【创建任务】。

创建任务字段说明:

基础信息

·任务名称:必填,最大128字符长度,不支持空格,不能为空、不可与现有任务名称重复。

·迁移步骤:必填,且至少一个,不允许跨步骤勾选,目前开始步骤仅支持评估和迁移,该属性决定了任务的生命周期,即该任务所能执行的全部步骤。

·源端数据库:必填,选择已添加的数据源,也可以点击【添加数据源】进行添加要使用的数据库,该数据源为该任务使用的源端数据库。

·目标端数据库:选填,选择已经添加的YashanDB数据源,也可以点击【添加数据源】进行添加要使用的数据源,该数据源为迁移和校验使用的目标端数据库。

·备注说明:选填,该任务的一个简单说明,最长为100个字符。

创建任务

点击【创建任务】,保存当前页面任务填写的信息,返回任务列表,此时该任务处于创建阶段和创建任务-成功状态。

开始配置

点击【下一步:开始配置】,跳转至选择的第一个步骤所属阶段任务的创建界面。

开始步骤为评估,则跳转至评估配置。

开始步骤为迁移,则跳转至迁移配置。

在阶段任务保存和开始前可以变更起始步骤,一旦保存和开始已选择步骤不可取消,则只能新增后续步骤。

兼容评估

兼容评估只有 95% 没有达到 100% 无法进行下一步。只能去检查有哪些不兼容对象,手动修改设置或忽略后点击右上角“刷新报告”,达到 100% 进行下一步。

不支持类型

自定义类型、函数以及约束、 Lob 大对象不能完全支持。

代码语言:javascript
复制
CREATE OR REPLACE TYPE BODY "DTS"."HS_BOX_PLOT_IMPL" IS
    static function ODCIAGGREGATEINITIALIZE(sctx IN OUT HS_BOX_PLOT_IMPL) return number IS
    begin
        sctx := HS_BOX_PLOT_IMPL(HS_NUMERIC_ARRAY());
        return ODCIConst.Success;

ALTER TABLE "ODS"."RULE_BUSINISS_TAG" MODIFY (
              "RULE_ID" NOT NULL ENABLE);

LOB ("BUSINISS_DATA") STORE AS BASICFILE( TABLESPACE "USERS"  ENABLE STORAGE IN ROW CHUNK 8192 NOCACHE  LOGGING );

CREATE OR REPLACE FUNCTION "DTS"."HS_BOX_PLOT" (input float) return HS_NUMERIC_ARRAY AGGREGATE USING HS_BOX_PLOT_IMPL;
/

然后点击下一步“迁移配置”。

迁移配置

离线迁移前的检查
更换 yasldr 版本

为满足对不同版本 yasldr 的需求,ymp.sh 提供单独替换 yasldr 版本的功能,使用时需指定用来替换的数据库安装包。

代码语言:javascript
复制
$ cd /home/ymp/yashan-migrate-platform/
$ sh bin/ymp.sh replace --yasldr /home/ymp/yashandb-personal-23.1.1.100-linux-x86_64.tar.gz
代码语言:javascript
复制
$ sh bin/ymp.sh replace --yasldr /home/ymp/yashandb-personal-23.1.1.100-linux-x86_64.tar.gz
Yasldr version has been changed!
[ymp@JiekeXu yashan-migrate-platform]$ bin/ymp.sh -v
Yashan-migrate-platform version: Release v23.2.1.2
YashanDB SQL Personal Edition Release 23.2.1.100 x86_64
YashanDB Loader Personal Edition Release 23.1.1.100 x86_64 0e623bd
[ymp@JiekeXu yashan-migrate-platform]$ sh bin/ymp.sh restart
YMP stopped successfully!
YMP started successfully!     

· 更换yasldr版本后需重新启动YMP后才能生效,可使用bin/ymp.sh -v查看版本。

· 更换yasldr版本功能需在安装成功后才可使用

更换 OCI 客户端版本

为满足对不同版本 OCI 的需求,提供替换 OCI 版本的方式:

上传新版本的 OCI 至 YMP 用户目录下

代码语言:javascript
复制
代码语言:javascript
复制
$ cd /home/ymp
# 解压OCI安装包
$ unzip instantclient-basic-linux.x64-19.19.0.0.0dbru.el9.zip

更换 OCI 客户端版本

代码语言:javascript
复制
# 修改YMP环境变量
$ cd yashan-migrate-platform
$ vi db/conf/ymp_migrate.bashrc  # 修改LD_LIBRARY_PATH行,指定新的OCI路径,例如:
export LD_LIBRARY_PATH=/home/ymp/instantclient_19_19:/home/ymp/yashan-migrate-platform/bin/yasdts/lib
# 保存修改后source该ymp_migrate.bashrc文件
$ source db/conf/ymp_migrate.bashrc

重启 YMP

代码语言:javascript
复制
代码语言:javascript
复制
$ cd /home/ymp/yashan-migrate-platform/
$ sh bin/ymp.sh restart

我这里当时下载 OCI 时没有细看,下载了 basiclite 格式的客户端,结果就出现了上面的问题,这里直接下载正确的 OCI 替换就好了。

然后我们继续点下一步“离线迁移”,可以看到这里有个警告,两个数据库之间的时间类型“DATE”和“TIMESTAMP”不一样,可能存在风险。

我这里不小心点击了“重新评估”,然后点击“离线迁移”时就出现了“被 test_qy 任务评估占用”的情况。没办法解决了,这个坑了好久。那么我把目标库换到其他机器上进行部署23.2.2作为迁移的目标库看看,这样也有个问题,我还需要将 yasldr 的版本换回23.2.2。

schema:XXX 在当前目标端数据库(192.168.217.87:1688)上,被test_qy任务评估占用; schema:DXX 在当前目标端数据库(192.168.217.87:1688)上,被test_qy任务评估占用; schema:XXXM 在当前目标端数据库(192.168.217.87:1688)上,被test_qy任务评估占用; schema:ODXX 在当前目标端数据库(192.168.217.87:1688)上,被test_qy任务评估占用;

代码语言:javascript
复制
[ymp@JiekeXu yashan-migrate-platform]$ sh bin/ymp.sh replace --yasldr /home/ymp/yashandb-personal-23.2.1.100-linux-x86_64.tar.gz
Yasldr version has been changed!
[ymp@JiekeXu yashan-migrate-platform]$ bin/ymp.sh -v
Yashan-migrate-platform version: Release v23.2.1.2
YashanDB SQL Personal Edition Release 23.2.1.100 x86_64
YashanDB Loader Personal Edition Release 23.2.1.100 x86_64 2d13f1d
[ymp@JiekeXu yashan-migrate-platform]$ sh bin/ymp.sh restart
YMP stopped successfully!
YMP started successfully!
[ymp@JiekeXu yashan-migrate-platform]$ bin/ymp.sh -v
Yashan-migrate-platform version: Release v23.2.1.2
YashanDB SQL Personal Edition Release 23.2.1.100 x86_64
YashanDB Loader Personal Edition Release 23.2.1.100 x86_64 2d13f1d

然后点击下一步“离线迁移”。

离线迁移

这一步我们可以下载迁移报告和任务日志,由于我这里是生产环境所对应的准测试环境,数据量不大,迁移评估都很快,报告自然也不大,过大的对象可能会导致内存溢出无法下载等其他问题,具体可参考官方文档。然后点击下一步“初始化校验”。

初始化校验

这一步会选择需要校验的对象,默认是全选。然后点击下一步“开始一致性校验”。

一致性校验

任务完成后会自动生成报告,报告生成结束后可以对当前页面的报告信息进行离线展示和下载。

目标端数据库查看

代码语言:javascript
复制
[yashan@jiekexu instance]$ yasql sys/Yashan23.2.2
YashanDB SQL Personal Edition Release 23.2.1.100 x86_64

Connected to:
YashanDB Server Personal Edition Release 23.2.1.100 x86_64 - X86 64bit Linux
SQL> select status,version,startup_time from v$instance;

STATUS        VERSION                                                          STARTUP_TIME                                                     
------------- ---------------------------------------------------------------- ----------------------------------------------------------------     
OPEN          Personal Edition Release 23.2.1.100 x86_64                       2024-05-21 11:37:46.763886                                      

1 row fetched.
SQL> select count(*) from dba_tables where owner not in ('SYS','MDSY');

             COUNT(*) 
--------------------- 
                   75

七、卸载YMP(可选)

非必要情况下需要卸载,可以使用如下步骤,当然 YMP 是在启动状态下才可以。

如果没有启动,可直接删除相关的目录和文件。

代码语言:javascript
复制
 $ cd /home/ymp/yashan-migrate-platform/
 $ sh bin/ymp.sh uninstall

 # 使用uninstall功能时可携带-f参数,强制清理环境
 $ sh bin/ymp.sh uninstall -f

 # 验证
 $ ps -ef | grep yas        
 ymp       20840  6322  0 10:02 pts/14   00:00:00 grep --color=auto yas

1.卸载 YMP 时,会删除默认内置库(自定义内置库不受影响)并清空 db 和yashan_client 文件夹,若想替换数据库版本,请在卸载后重新部署。

2.强制清理功能会使用 kill -9 强制清理当前用户下 YMP 启动的所有进程,并删除内置库及 yasldr 文件夹下所有内容,请谨慎使用,建议在专用的 YMP 用户下使用。

3.最后还需要手动删除 ~/.bashrc 中与 YashanDB 有关的环境变量。

极端情况下由于笔记本蓝屏或断电重启了,可以直接删除目录和 lock 文件重新安装。

代码语言:javascript
复制
[ymp@JiekeXu yashan-migrate-platform]$ rm -rf /home/ymp/yashan-migrate-platform/bin/lock 
[ymp@JiekeXu yashan-migrate-platform]$ rm -rf /home/ymp/yashan-migrate-platform/bin/yashandb_client
[ymp@JiekeXu yashan-migrate-platform]$ rm -rf /home/ymp/yashan-migrate-platform/db

八、安装 YashanDB 简要步骤

由于过程中偷懒了,本想着使用以前安装的 23.1 版本的数据库作为目标库或者 YMP 内置库均行不通,所以后面只能单独安装 23.2 版本的数据库,以及内置库也使用 23.2 版本的库才算走通这条迁移道路了。下面是安装 23.2 时的主要步骤,仅供参考。

代码语言:javascript
复制
[yashan@jiekexu install]$ tar -zxf yashandb-personal-23.2.1.100-linux-x86_64.tar.gz 

[yashan@jiekexu install]$ ./bin/yasboot package se gen --cluster yashandb -u yashan -p Yashan23.2.2 --ip 12.0.217.173 --port 62022 --install-path /home/yashan/yasdb_home  --data-path /home/yashan/yasdb_data --begin-port 1688

 hostid   | group | node_type | node_name | listen_addr       | replication_addr  | data_path                   
------------------------------------------------------------------------------------------------------------
 host0001 | dbg1  | db        | 1-1       | 12.0.217.173:1688 | 12.0.217.173:1689 | /home/yashan/yasdb_data 
----------+-------+-----------+-----------+-------------------+-------------------+-------------------------

Generate config success

[yashan@jiekexu install]$ ./bin/yasboot package install -t hosts.toml -i yashandb-personal-23.2.1.100-linux-x86_64.tar.gz

[yashan@jiekexu instance]$ cat  /home/yashan/yasdb_home/yashandb/23.2.1.100/conf/yashandb.bashrc >> ~/.bashrc

[yashan@jiekexu instance]$ mv /home/yashan/yasdb_data/db-1-1/instance/yasdb.pwd  /home/yashan/yasdb_data/db-1-1/instance/yasdb.pwd_bak
[yashan@jiekexu instance]$ source ~/.bashrc
[yashan@jiekexu instance]$ yaspwd file=yasdb.pwd
Enter password for SYS:Yashan23.2.2

[yashan@jiekexu instance]$ yasboot cluster status -c yashandb
 host_id  | node_type | nodeid | pid   
---------------------------------------
 host0001 | db        | 1-1:1  | 26875 
----------+-----------+--------+-------
[yashan@jiekexu instance]$ 
[yashan@jiekexu instance]$ yasql sys/Yashan23.2.2
YashanDB SQL Personal Edition Release 23.2.1.100 x86_64

Connected to:
YashanDB Server Personal Edition Release 23.2.1.100 x86_64 - X86 64bit Linux

SQL> select status,version,startup_time from v$instance;

STATUS        VERSION                                                          STARTUP_TIME                                                     
------------- ---------------------------------------------------------------- ---------------------------------------------------------------- 
OPEN          Personal Edition Release 23.2.1.100 x86_64                       2024-05-21 11:37:46.763886                                      

1 row fetched.

九、小结

YMP 目前来看支持的数据库种类及版本有限,对于数据类型的支持也有限,仅在本次测试中就发现不支持 自定义类型、不能完全兼容函数以及约束、 Lob 大对象,而且在配置数据源的过程中发现对于 Oracle 的监听端口大于等于 60000 的也不支持,希望在下一个版本中有所改进。

另外,对于安装配置这块官网说明也有一些歧义,比如内置库和自定义库这里希望有个说明,什么情况下使用内置库,什么情况下使用自定义库以及版本是否必须要和目标库、 yasldr 保持一致。

全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JiekeXu之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、简 介
    • 核心特性
      • YMP 架构
        • 核心服务介绍
          • 数据库版本支持
            • 数据类型支持
            • 二、安装前说明
            • 三、安装前准备
              • 操作系统参数调整
                • 开放端口
                  • 关闭防火墙
                    • YMP 用户准备
                      • libaio 环境准备
                        • YashanDB 环境准备
                          • 软件包准备
                          • 四、安装 YMP
                            • 解压软件包
                              • 更改内置库SYS用户默认密码(可选)
                            • 查看运行状态
                              • 重启 YMP
                              • 查看版本
                          • 五、访问YMP
                          • 六、添加数据源
                            • 任务管理
                              • 创建任务
                            • 开始配置
                              • 兼容评估
                                • 不支持类型
                              • 迁移配置
                                • 离线迁移前的检查
                                • 更换 yasldr 版本
                                • 更换 OCI 客户端版本
                              • 离线迁移
                                • 初始化校验
                                  • 一致性校验
                                  • 七、卸载YMP(可选)
                                  • 八、安装 YashanDB 简要步骤
                                  • 九、小结
                                  相关产品与服务
                                  数据库
                                  云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                                  领券
                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档