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

254deb7d14240f000ca8e2c88a01521c.gif

作者 | JiekeXu

来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)

如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA)

大家好,我是 JiekeXu,江湖人称“强哥”,荣获 Oracle ACE 称号,墨天轮 MVP,墨天轮年度“墨力之星”,拥有 Oracle 11g OCP/OCM 认证,MySQL 5.7/8.0 OCP 认证以及 PCA、PCTA、OBCA、OGCA、KCP 等众多国产数据库认证证书,今天和大家一起来看看崖山数据库 YMP 迁移工具使用体验,欢迎点击最上方蓝字“JiekeXu DBA之路”关注我的微信公众号,然后点击右上方三个点“设为星标”顶,更多干货文章才能第一时间推送,谢谢!

f339f34cb5904a6b2611246fffb35ab8.png

一、简 介  

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

核心特性  

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

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

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

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

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

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

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

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

YMP 架构   

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

0a2f699bd7eb9c6f99a3f6097bbcb15e.png

核心服务介绍  

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

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

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

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

数据库版本支持  

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

42442c418ce4c2dbf28f0f6182c7fdcb.png

数据类型支持  

6f82ee817997bdd1eb6153acbe85da5c.png

二、安装前说明  

本虚拟机为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。

# 查看最大用户线程数


# 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    

8d50d85adc0f634dd3cb99aa6d1295dc.png

上传安装包至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

0206ab7b1529490bafe60cac71f9ba1e.png

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

507bb8326b85574a9c46f3089f994d8b.png

六、添加数据源  

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

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

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

383e4c55dfed8c8846b5e605771a3cde.png

添加数据源字段说明:

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

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

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

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

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

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

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

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

81fb63f5f780d39ac5baad6aa92ea6c5.png

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

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

c0185871f0d6c6db2c700b44dfe98732.png

任务管理  

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

整个任务流程如图:

28e37a86ccc5f15fd6d85a442340cdaa.png

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

创建任务字段说明:

基础信息

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

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

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

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

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

创建任务  

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

开始配置  

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

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

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

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

57e6d01f672353cc565bf44c13f93325.png

d5b0434d4263ef1ab737ec09652f08b7.png

f2920fcb0456998a34019ed21b3e2b4c.png    

fe18ee8e16430ce9e160ad4372e0d0b7.png

兼容评估    

9e3380c7474e66a4a0f298f1fec6ac07.png

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

不支持类型  

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

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;
/

63f11d8f21f14c20726406ccbfda51fa.png

3df1bbedf8cc45bbe9e602a1059f0962.png

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

迁移配置 

0b30305431af1d08fab092035951e8b1.png

离线迁移前的检查  

29e272399e274e14bbc617986ac3dff8.png

5343e6616127192a88876223daaf9f41.png

bfc815c8fb8cc0c252ddf025a494c206.png

更换 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”不一样,可能存在风险。

9f1d0f7f7690849238025a8f95b5af61.png

我这里不小心点击了“重新评估”,然后点击“离线迁移”时就出现了“被 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任务评估占用;          

[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

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

离线迁移  

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

e0741a24e328ba89d815d8d7ee6a9e44.png    

dd8b2c91975c940b77c107af8500291a.png    

初始化校验  

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

c4ddb03a1ff8497593672fe1969812ed.png

一致性校验  

de3830277fe4cd2d77e3d00d987b2b08.png

15d3768cf91051de710d416e8f281054.png

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

目标端数据库查看

[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.

a88f42e984adbabcc1d0a44b9e404180.png

九、小结  

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

17cf714b557c67d34a1ae45e1a8a1147.png

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

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

de09ae5970356b692e3d58542a46c1da.png

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

58a4dd7dfe889e83a2f5e7814434851d.gif

分享几个数据库备份脚本

一文搞懂 Oracle 统计信息
 
 

我的 Oracle ACE 心路历程

MOP 系列|MOP 三种主流数据库索引简介

Oracle 主流版本不同架构下的静默安装指南
 
 

关机重启导致 ASM 磁盘丢失数据库无法启动

Oracle SQL 性能分析(SPA)原理与实战演练
 
 

Oracle 11g 升级到 19c 需要关注的几个问题

Windows 10 环境下 MySQL 8.0.33 安装指南

SQL 大全(四)|数据库迁移升级时常用 SQL 语句

OGG|使用 OGG19c 迁移 Oracle11g 到 19C(第二版)

Oracle 大数据量导出工具——sqluldr2 的安装与使用

从国产数据库调研报告中你都能了解哪些信息及我的总结建议

使用数据泵利用 rowid 分片导出导入 lob 大表及最佳实践

在归档模式下直接 rm dbf 数据文件并重启数据库还有救吗?

欢迎关注我的公众号【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
————————————————————————————
46283ce78e21e99cfaeac2e6e7fc0726.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值