(一)崖山数据库介绍
崖山数据库系统YashanDB是深圳计算科学研究院完全自主研发设计的新型数据库系统,融入原创理论,支持单机/主备、共享集群、分布式等多种部署方式,覆盖OLTP/HTAP/OLAP交易和分析混合负载场景,为客户提供一站式的企业级融合数据管理解决方案。

网址:https://yashandb.com/
(二)YMP(Yashan Migration Platform)迁移平台介绍
YashanDB提供一站式数据迁移平台YMP(Yashan Migration Platform),支持异构数据库和YashanDB之间的数据迁移,帮助客户便捷地将旧业务系统迁移至YashanDB。

(三)YMP迁移平台安装部署
环境规划
| 主机名 | ip地址 | 操作系统 | 主机用途 | 主机部署应用 |
|---|---|---|---|---|
| nodeora | 192.168.100.50 | 欧拉21.10 | 源端-oracle | 源端oracle19c数据库 |
| node1 | 192.168.100.10 | centos7.9 | 目标端-yashandb | 崖山23.2.1数据库 |
| node3 | 192.168.100.12 | centos7.9 | 迁移平台-ymp | 迁移工具-ymp oracle oci包 崖山内置数据库 |
YMP下载
下载地址:https://download.yashandb.com/download
软件名称:yashan-migrate-platform-v23.2.1.0-linux-x86-64.zip
软件包上传位置:/home/ymp目录

YMP安装前准备工作
按照规划,以下操作在迁移平台服务器(192.168.100.12)上进行:
(1)服务器配置
关闭防火墙
systemctl disable firewalld.service
systemctl stop firewalld.service
systemctl status firewalld
设置资源限制
vi /etc/security/limits.conf
* soft nproc 65536
* hard nproc 65536
安装libaio动态库
--检查是否安装
rpm -qa | grep libaio
--如果没有安装,则使用yum安装
yum install -y libaio
创建安装用户
useradd -d /home/ymp -m ymp
passwd ymp
上传YMP安装包并解压:
--修改安装包所属用户及用户组为ymp用户
chown ymp:ymp yashan-migrate-platform-v23.2.1.0-linux-x86-64.zip
--从root用户切换至ymp用户
su - ymp
--切换至安装路径
cd /home/ymp
--解压ymp安装包
unzip yashan-migrate-platform-v23.2.1.0-linux-x86-64.zip
开放端口
| YMP监听 | 数据库监听 | 主机间通信 | yasom | yasagent |
|---|---|---|---|---|
| 8090 | 8091 | 8092 | 8093 | 8094 |
(2)应用环境准备
JDK环境准备
YMP仅支持在JDK8或JDK11的环境下安装。
下载jdk:https://www.oracle.com/java/technologies/downloads/#java8
下载JDK并安装成功后,还需配置如下环境变量:
# 以JDK安装路径为/usr/tools/jdk8为例
vi /etc/profile
--在文件结尾添加如下
export JAVA_HOME=/usr/tools/jdk8
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
--重新载入配置文件
source /etc/profile
--安装成功后查看JDK版本信息
# java -version
OCI环境准备
YMP现仅支持OCI Version 19.19.0.0.0及以上版本。
下载包:instantclient-basic-linux.x64-19.23.0.0.0dbru.zip
下载oci包:
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
上传oci包并解压:
--修改安装包所属用户及用户组为ymp用户
chown ymp:ymp instantclient-basic-linux.x64-19.23.0.0.0dbru.zip
--从root用户切换至ymp用户
su - ymp
--切换至安装路径
cd /home/ymp
-- 解压OCI安装包
unzip instantclient-basic-linux.x64-19.23.0.0.0dbru.zip
(3)yashanDB环境准备
使用默认内置库时,本步骤可省略。本次使用默认内置库。
使用外部内置库时:
如需一个全新的YashanDB单机环境,参考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
安装参数调整
依据实际需要对默认内置库安装及YMP启动参数进行调整。
默认内置库安装配置文件
cat /home/ymp/yashan-migrate-platform/conf/db.properties:
YASDB_PASSWORD=ymppw602. # 默认内置库sys用户默认密码
YASDB_PORT=8091 # 默认内置库默认端口号
YASDB_CHARACTER_SET=UTF8 # 默认内置库字符集,还可选择ASCII, ISO88591, GBK
YMP配置文件
cat /home/ymp/yashan-migrate-platform/conf/application.properties
# YMP服务端口
server.port=8090
# 用户登录后空闲过期时间,单位秒(s),默认15分钟
shiro.session.timeout=900
# YMP使用的最大堆内存,单位: GB
ymp_memory=4
# YMP使用的堆外内存,单位: GB
ymp_direct_memory=2
# ========================================YMP业务数据库=============================================
# YMP业务数据库连接信息
spring.datasource.url=jdbc:yasdb://192.168.8.201:1688/yashan
spring.datasource.username=YMP_DEFAULT
spring.datasource.password=ymppw602
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
# 导出时每个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
# #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
# ========================================校验=============================================
# 校验任务限制每个数据源支持的最大连接数
checkTask.datasource.max-connection=500
# 校验任务获取连接超时时间,单位:ms
checkTask.datasource.connection-timeout=300000
# 校验任务获取的连接池中维持的最小连接数
checkTask.datasource.minimum-idle=1
# 校验任务的最大并行任务数
checkTask.task.parallel.max-num=20
# 校验任务的子任务的最大并行任务数,即一个任务多少个表在同时校验
checkTask.subTask.parallel.max-num=200
# 校验任务的全量校验对FLOAT数据类型的校验精度
checkTask.checkFloatPrecision=6
# 校验任务的数据类型映射有一边是char数据类型就移除数据右侧空格进行对比
checkTask.charRightTrim=true
默认内置库安装YMP
YMP安装时按默认方式自行安装YashanDB作为内置库。
默认内置库相关信息:
部署形态:单机
集群名称:ymp
安装目录:/home/ymp/yashan-migrate-platform/db
如安装路径下已存在db目录与bin/yashandb_client目录,需先清空目录:
cd /home/ymp/yashan-migrate-platform/db
rm -rf *
cd /home/ymp/yashan-migrate-platform/bin/yashandb_client
rm -rf *
安装内置库和OCI客户端并启动YMP
--进入安装目录执行安装命令
$ cd /home/ymp/yashan-migrate-platform/
$ sh bin/ymp.sh install --db /opt/software/yashandb-personal-23.2.1.100-linux-x86_64.tar.gz --path /home/ymp/instantclient_19_23
执行过程如下:
[ymp@node3 yashan-migrate-platform]$ sh bin/ymp.sh install --db /opt/software/yashandb-personal-23.2.1.100-linux-x86_64.tar.gz --path /home/ymp/instantclient_21_14
checking install profile.toml...
install version: yashandb 23.2.1.100
update host to yasom...
type | uuid | name | hostid | index | status | return_code | progress | cost
---------------------------------------------------------------------------------------------------------
task | f798009581dd2578 | DeployYasdbCluster | - | ymp | SUCCESS | 0 | 100 | 13
------+------------------+--------------------+--------+-------+---------+-------------+----------+------
task completed, status: SUCCESS
type | uuid | name | hostid | index | status | return_code | progress | cost
-------------------------------------------------------------------------------------------------------
task | 3d575a54878e1bf7 | StopYasdbCluster | - | ymp | SUCCESS | 0 | 100 | 2
------+------------------+------------------+--------+-------+---------+-------------+----------+------
task completed, status: SUCCESS
type | uuid | name | hostid | index | status | return_code | progress | cost
--------------------------------------------------------------------------------------------------------
task | 22dc8a291a8d0ced | StartYasdbCluster | - | ymp | SUCCESS | 0 | 100 | 2
------+------------------+-------------------+--------+-------+---------+-------------+----------+------
task completed, status: SUCCESS
YMP started successfully!
查看YMP运行状态
$ cd yashan-migrate-platform/
$ bin/ymp.sh status
YMP is running, pid is 6084.
Built-in database is used, pid is 5988.
查看版本
$ cd /home/ymp/yashan-migrate-platform/
$ sh bin/ymp.sh -v
Yashan-migrate-platform version: Release v23.2.1.0
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.100.12:8090

(四)迁移oracle数据库到崖山数据库
添加数据源

创建迁移任务

选择评估对象,需要迁移的schema:

其他设置

迁移评估

对象兼容统计

整体对象分布情况

迁移配置
选择目标数据库

确认迁移对象

迁移初始化配置

离线迁移


忽略即可

校验初始化


这个地方有些奇怪!
人工校验
oracle源端
[oracle@nodeora dbs]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Sat Mar 16 01:11:15 2024
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
SQL> col owner format a20
SQL> col object_name format a30
SQL> col object_type format a30
SQL> set lines 1000
SQL> select owner,object_name,object_type from dba_objects where owner in ('TESTUSR','TESTUSR2') order by owner;
OWNER OBJECT_NAME OBJECT_TYPE
-------------------- ------------------------------ ------------------------------
TESTUSR TAB1 TABLE
TESTUSR V_TAB1 VIEW
TESTUSR SEQ_ID SEQUENCE
TESTUSR2 TAB2 TABLE
TESTUSR2 SYN_TAB2 SYNONYM
SQL> select count(*) from testusr.tab1 union all select count(*) from testusr2.tab2;
COUNT(*)
----------
1
1
yashandb目标端
[yashan@node1 software]$ yasboot sql -d sys/Well%1234@192.168.100.10:1688
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 owner,object_name,object_type from dba_objects where owner in ('TESTUSR','TESTUSR2') order by owner;
select owner,object_name,object_type from dba_objects where owner in ('TESTUSR','TESTUSR2') order by owner;
OWNER OBJECT_NAME OBJECT_TYPE
---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------
TESTUSR SEQ_ID SEQUENCE
TESTUSR TAB1 TABLE
TESTUSR V_TAB1 VIEW
TESTUSR2 SYN_TAB2 SYNONYM
TESTUSR2 TAB2 TABLE
5 rows fetched.
SQL> select count(*) from testusr.tab1 union all select count(*) from testusr2.tab2;
select count(*) from testusr.tab1 union all select count(*) from testusr2.tab2;
COUNT(*)
---------------------
1
1
至此,数据全部迁移完成。




