暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

「YashanDB 迁移体验官」崖山数据库 YMP 迁移工具使用体验

593

「YashanDB 迁移体验官」崖山数据库 YMP 迁移工具使用体验

作者:JiekeXu

20230831-151f2d4b-ba04-47a5-9a86-5a8b44fbc41e

一、简 介

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

核心特性

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

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

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

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

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

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

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

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

YMP 架构

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

IMG_256

核心服务介绍

对象评估:提供多源异构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,当然这些也不影响我作为一个中间机继续安装 YMP 以及自带内置库。

本次则是测试我们 Oracle 数仓环境下的测试数据及相关表结构迁移至单机 YashanDB23.2.1.100 版本,虽数据量较少,但也算是生产环境阉割版数据,下文中有些敏感词汇均已打码,但不影响阅读。

迁移信息

源端数据库

Oracle 11.2.0.4

IP 地址:192.168.217.124

RHEL7.6 4c16g

YMP 迁移工具

YMP v23.2.1.2

IP 地址:192.168.217.87

RHEL7.6 8c16g

目标端数据库

Yashan 23.2.1.100

IP 地址:192.168.217.173

RHEL7.6 8c16g

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

三、安装前准备

操作系统参数调整

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

# 查看最大用户线程数

# ulimit -u
复制

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

# ulimit -u 65536
复制

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

# 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

关闭防火墙

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

# 关闭防火墙
# systemctl stop firewalld
# 关闭开机自启
# systemctl disable firewalld
复制

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

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

# firewall-cmd --zone=public --list-ports

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

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

# 添加(--permanent 永久生效,没有此参数重启后失效)
# firewall-cmd --zone=public --add-port=8090/tcp --permanent
# 重新载入
# firewall-cmd --reload
# 查看
# firewall-cmd --zone=public --query-port=8090/tcp
如需从白名单中删除已添加的端口,使用如下命令:
# 删除已添加的端口
# firewall-cmd --zone=public --remove-port=8090/tcp --permanent
复制

YMP 用户准备

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

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

JDK环境准备

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

[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动态库。

# 查看是否已安装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/路径。

# 解压OCI安装包
$ unzip instantclient-basic-linux.x64-19.19.0.0.0dbru.el9.zip
复制

YashanDB环境准备

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

使用外部内置库时:

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

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

软件包准备

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目录下然后解压:

# 切换至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。

默认内置库安装配置文件

# /home/ymp/yashan-migrate-platform/conf

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

YMP 配置文件

# /home/ymp/yashan-migrate-platform/conf

# 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用户默认密码(可选)

# 进入安装目录执行更改密码命令,以 Yasdb_123 为例:

$ cd /home/ymp/yashan-migrate-platform/
$ sh bin/ymp.sh password --sys Yasdb_123
复制

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

# 进入安装目录执行安装命令

$ 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!
复制

自定义内置库安装YMP

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

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

修改配置文件

# 修改工具yashan-migration-platform/conf/application.properties文件

# YMP业务数据库连接信息# url改为自定义内置库的url,格式为 IP:PORT

# 进入安装目录执行更改连接信息指令,

$ cd /home/ymp/yashan-migrate-platform/
$ sh bin/ymp.sh connection --url 192.168.217.87:1688 --username YMP_DEFAULT --password ymppw602
复制

# 单独修改配置文件中连接用户密码

$ sh bin/ymp.sh password --user yasdb_123
复制

执行安装

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

# 进入安装目录执行安装命令

$ 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
复制

查看运行状态

$ 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.
复制

重启 YMP

默认内置库启动YMP:

$ cd /home/ymp/yashan-migrate-platform/
$ sh bin/ymp.sh start

自定义内置库重启YMP:

$ cd /home/ymp/yashan-migrate-platform/
$ sh bin/ymp.sh restartnodb

默认内置库停止YMP:

$ cd /home/ymp/yashan-migrate-platform/
$ sh bin/ymp.sh stop

自定义内置库停止YMP:

$ cd /home/ymp/yashan-migrate-platform/
$ sh bin/ymp.sh stopnodb

默认内置库重启YMP:

$ cd /home/ymp/yashan-migrate-platform/
$ sh bin/ymp.sh restart
复制

查看版本

$ 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)。

http://192.168.217.87:8090

1716174216562

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

六、添加数据源

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

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

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

IMG_256

添加数据源字段说明:

  • 数据源名称:系统内唯一数据源名称。
  • 数据源类型:支持选择Oracle、MySQL、YashanDB、DM。
  • 主机IP:数据库所在IP地址。
  • 端口:数据库监听端口,目前这个YMP23.2.1.2 版本监听端口不能大于等于 60000。
  • 数据库:可选项,Oracle必填、MySQL、DM、YashanDB选填。
  • 用户名:数据库连接用户(连接用户需要有迁移平台所需权限,所需权限详见:数据源权限配置)。
  • 密码:数据库连接用户密码。
  • 是否为普通用户:仅Oracle和DM数据源支持,默认为非普通用户。详见:普通用户配置

80fe200278e35b18bb271547b9a3279

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

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

任务管理

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

整个任务流程如图:

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

创建任务字段说明:

基础信息

  • 任务名称:必填,最大128字符长度,不支持空格,不能为空、不可与现有任务名称重复。
  • 迁移步骤:必填,且至少一个,不允许跨步骤勾选,目前开始步骤仅支持评估和迁移,该属性决定了任务的生命周期,即该任务所能执行的全部步骤。
  • 源端数据库:必填,选择已添加的数据源,也可以点击【添加数据源】进行添加要使用的数据库,该数据源为该任务使用的源端数据库。
  • 目标端数据库:选填,选择已经添加的YashanDB数据源,也可以点击【添加数据源】进行添加要使用的数据源,该数据源为迁移和校验使用的目标端数据库。
  • 备注说明:选填,该任务的一个简单说明,最长为100个字符。

创建任务

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

开始配置

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

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

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

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

兼容评估

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

不支持类型

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


CREATE OR REPLACE TYPE BODY "DXXX"."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 "OXXX"."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 "DXX"."HS_BOX_PLOT" (input float) return HS_NUMERIC_ARRAY AGGREGATE USING HS_BOX_PLOT_IMPL;
/
复制


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

迁移配置

离线迁移前的检查

更换 yasldr 版本

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

$ 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
$ 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用户目录下

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

更换OCI客户端版本

# 修改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

$ cd /home/ymp/yashan-migrate-platform/
$ sh bin/ymp.sh restart
复制

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

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

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

[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
复制

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

离线迁移

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

初始化校验

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

一致性校验

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

目标端数据库查看

[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 是在启动状态下才可以。

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

 $ 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 文件重新安装。

[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 时的主要步骤,仅供参考。

[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 的也不支持,还有一个就是 YMP 迁移平台的登录页 admin 管理账号,密码输入错误 5 次就需要重置密码,BUT 我就是没找到在哪里重置密码,页面也登录不了了,操作系统层面我也没找到,希望官方人员能解惑,更希望这些小问题在下一个版本中能有所改进。

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


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

❤️ 欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
————————————————————————————

公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
ITPUB:https://blog.itpub.net/69968215
腾讯云:https://cloud.tencent.com/developer/user/5645107
————————————————————————————
  20230831-151f2d4b-ba04-47a5-9a86-5a8b44fbc41e

最后修改时间:2024-05-22 00:25:19
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论