作者 | 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之路”关注我的微信公众号,然后点击右上方三个点“设为星标”顶,更多干货文章才能第一时间推送,谢谢!
一、简 介
崖山迁移平台(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。
# 查看最大用户线程数
# 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
第一次登录需要修改密码,我这里将其修改为 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 大对象不支持。
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 版本的功能,使用时需指定用来替换的数据库安装包。
$ 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.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
然后点击下一步“离线迁移”。
离线迁移
这一步我们可以下载迁移报告和任务日志,由于我这里是生产环境所对应的准测试环境,数据量不大,迁移评估都很快,报告自然也不大,过大的对象可能会导致内存溢出无法下载等其他问题,具体可参考官方文档。然后点击下一步“初始化校验”。
初始化校验
这一步会选择需要校验的对象,默认是全选。然后点击下一步“开始一致性校验”。
一致性校验
任务完成后会自动生成报告,报告生成结束后可以对当前页面的报告信息进行离线展示和下载。
目标端数据库查看
[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 的也不支持,希望在下一个版本中有所改进。
另外,对于安装配置这块官网说明也有一些歧义,比如内置库和自定义库这里希望有个说明,什么情况下使用内置库,什么情况下使用自定义库以及版本是否必须要和目标库、 yasldr 保持一致。
全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~
❤️ 欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
分享几个数据库备份脚本
一文搞懂 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
————————————————————————————