#迁移配置
# 前提条件
- 数据源已添加完成。
- 跳过评估或评估已经完成。

# 选择需要迁移的目标端数据库
- 选择目标端数据库,系统会自动过滤出YashanDB的数据源。
- 可添加目标端数据源,详见添加数据源。添加的数据源与在数据源列表处添加数据源效果一致,最终会保存在YMP数据库中。

# 确认需要迁移步骤
- 支持自由选择需要迁移的步骤,进行组合迁移。
- 相应阶段选完后同步展示阶段下可迁移对象列表,下面的确认迁移对象范围只展示选中阶段的对象。
- 迁移步骤包括元数据迁移1、数据迁移和元数据迁移2,默认勾选三个阶段。其中:
- 元数据迁移1:展示和迁移范围为除主键约束、唯一约束、外键约束、索引和触发器之外的其他对象。
- 数据迁移:展示和迁移范围为表。
- 元数据迁移2:展示和迁移范围为主键约束、唯一约束、外键约束、索引和触发器。

# 确认需要迁移的对象
- 选择需要迁移的对象(对象来源于评估后的对象或是跳过评估时获取的对象)。
- 支持根据对象名称搜索对象。
- 支持根据对象类型,评估结果,对象状态,是否迁移进行筛选对象,其中:
- Oracle数据源支持对象状态,MySQL数据源不支持对象状态。
- 支持对对象进行批量设置是否迁移。
- 支持查看每个对象的DDL(跳过评估的任务无法查看)。
- 如果勾选全选所有会选中所有分页中满足条件的对象。

# 迁移初始化配置选择
- 支持选择对象迁移的策略,默认是跳过,选择覆盖时遵循下方的对象冲突策略。
- 支持选择数据迁移的策略,默认是截断。
- 配置禁用规则:
- 迁移步骤不勾选数据迁移时,数据迁移策略禁用。
- 对象冲突策略为覆盖时,数据迁移策略中的不截断选项禁用,只能选择截断。
# 对象冲突策略
当目标数据库中已存在对象,使用离线迁移时对象的判定冲突规则:
| 对象类型 | 冲突判定规则 | 策略为跳过 | 策略为覆盖 |
|---|---|---|---|
| 约束-主键约束 | 同一张表里存在主键约束表示冲突 | 保持不动 | 删除后重建 |
| 约束-唯一约束 | 同列同顺序上有一个唯一约束表示冲突 | 保持不动 | 删除后重建 |
| 约束-检查约束 | 检查约束名称一样表示冲突 | 保持不动 | 删除后重建 |
| 约束-外键约束 | 同列同顺序上有一个外键约束表示冲突 | 保持不动 | 删除后重建 |
| 约束-非空约束 | 同一字段上有非空约束表示冲突 | 保持不动 | 删除后重建 |
| 索引-约束自建索引 | 约束创建的索引跟着约束的规则走, 约束创建成功就自动成功, 冲突判定和处理和主键约束、唯一约束一致 | 跟随约束 | 跟随约束 |
| 索引-其他索引 | 同列同顺序上有一个索引表示冲突 | 保持不动 | 删除后重建 |
| 其他对象 | 根据对象名,大小写敏感 | 保持不动 | 删除后重建 |
根据上面规则,需要注意以下几点:
- 如果目标端已有不同名的检查约束,不管跳过还是覆盖,都不会删除掉,需要用户自己检查删掉。该场景风险:就算选了覆盖,数据迁移时还是需要满足两边的检查约束,不然会迁移失败风险。
- 如果源端和目标端的两个外键在两个不同列上,跳过策略,会保留两个外键。该场景风险:如果选择了数据迁移,在enable的时候,可能会出现enable外键约束失败:not parent found。

# 高级配置选择
高级配置项包括兼容配置、性能配置和容错配置,其中:
- 兼容配置仅当源端为MySQL时使用,用于当MySQL部分值迁移到YashanDB转为null时,尝试删去非空约束,避免违反在该列上的非空约束,保证数据迁移,默认为不做兼容。
- 性能配置支持选择多表迁移并行度的配置,默认为4(最低为1,最高上限32)。
- 容错配置支持设置单表容错条数阈值,当容错配置开关为关时,该项配置不生效(即不进行容错,容错条数为0)。默认为200(最低为0,最高上限4,294,967,295),选择无限制时为4,294,967,295。
- 单表错误条数若超过该阈值时,中止迁移,迁移状态为失败。
- 单表错误条数若不超过该阈值,不中止迁移,但是迁移状态为失败。
- 对于有数据报错的表,在迁移过程和迁移报告中会展示部分错误信息,在迁移后可以下载完整错误信息和完整错误数据。
- 在数据导入阶段,由于使用了并发导入和批量提交,单表真实容错数据量一般会大于容错阈值,极端情况下不超过容错阈值+配置文件中的export.csv.exportRowsEveryFile的值。
- 注:此配置受数据库版本和迁移工具版本限制,当数据库或工具版本低于 22.2.7.2 时,不支持迁移容错。
- 配置禁用规则:
- 迁移步骤不勾选数据迁移时,兼容配置、性能配置、容错配置禁用。
- 源端不为MySQL或者迁移步骤不勾选数据迁移或者数据迁移策略选择截断,兼容配置禁用。

# 表空间初始化配置选择
(跳过评估的任务无该配置)
- 迁移前,需要加载源端迁移对象使用到的表空间,并展出目标端是否存在这样的表空间。
- 如果选择不跳过,迁移前则会将目标端不存在的表空间创建(支持编辑需要创建表空间文件的参数和数量,编辑后需要点击保存即可生效)。
- 如果选择跳过,则迁移前不会对表空间进行初始化。
- 支持展示源端所有的表空间个数和总数据量。
- 支持展示源端单个表空间的信息(名称,大小,已用大小)。
- 支持展示目标端存放数据文件的路径。
- 支持批量修改数据文件的参数。
- 支持刷新表空间信息。

- 当源端表空间数据文件大小、自增步长、文件最大大小不符合目标端数据库要求时,自动将参数调整为YashanDB兼容的值。



- 当默认表类型为LSC时,支持对目标端不存在的表空间配置数据桶路径。

# 迁移预检查
点击【下一步:离线迁移】将进行迁移前的预检查。
评估的任务,预检查包括连接检查、权限检查、容量检查、部署方式检查、版本检查、默认表类型检查、表空间检查、类型检查和其他检查。其中部署方式检查、类型检查和其他检查为可选项,可不做检查。

跳过评估的任务,预检查包括连接检查、权限检查、容量检查、版本检查、表重名检查(源端为MySQL时)、类型检查和其他检查,其中表重名检查、类型检查和其他检查为可选项,可不做检查。

# 连接检查
预检查内容
连接检查将对源端和目标端的数据库的连接可用状态进行检查,要求源端和目标端的数据库均在可用状态下,并对数据库有操作权限。
预检查结果
【阻塞】若检查不通过,页面将展示【检查未通过】及具体的报错信息,且阻塞下一步的离线迁移操作。

# 权限检查
预检查内容
权限检查要求使用的源端和目标端数据库用户拥有足够的权限,若没有相关权限,可通过 GRANT XXX TO USER_NAME 赋权。
其中,源端用户所需权限:
Oracle:
GRANT SELECT ON DBA_SEGMENTS TO youruser; GRANT SELECT ON DBA_LOBS TO youruser; GRANT SELECT ON DBA_TAB_COLS TO youruser; GRANT SELECT ON DBA_CONS_COLUMNS TO youruser; GRANT SELECT ON DBA_DATA_FILES TO youruser; GRANT SELECT ON DBA_CONSTRAINTS TO youruser; GRANT SELECT ON DBA_SCHEDULER_JOBS TO youruser; GRANT SELECT ON V_$PARAMETER TO youruser; -- 建议权限,不强制要求,可被迁移表的SELECT ON权限替换 GRANT SELECT ANY TABLE TO youruser; -- 建议权限,不强制要求,可被迁移序列的SELECT ON权限替换 GRANT SELECT ANY SEQUENCE TO youruser;MySQL5.6.*,5.7.*:
GRANT SELECT, PROCESS, SHOW VIEW, SHOW DATABASES, TRIGGER ON *.* TO 'yourUser'@'IP';MySQL8.0.*:
GRANT SELECT, PROCESS, SHOW VIEW, SHOW DATABASES, TRIGGER, SHOW_ROUTINE ON *.* TO 'yourUser'@'IP';DM8:
GRANT SELECT ON DBA_CONSTRAINTS TO youruser; GRANT SELECT ON DBA_SEGMENTS TO youruser; GRANT SELECT ON DBA_TAB_COLS TO youruser; GRANT SELECT ON DBA_DATA_FILES TO youruser; GRANT SELECT ON DBA_CONS_COLUMNS TO youruser; -- 建议权限,不强制要求,可被迁移表的SELECT ON权限替换 GRANT SELECT ANY TABLE TO youruser; -- 建议权限,不强制要求,可被迁移序列的SELECT ON权限替换 GRANT SELECT ANY SEQUENCE TO youruser;
目标端用户所需权限:
YashanDB:
GRANT DBA TO youruser;YashanDB(三权分立模式):
GRANT DBA TO youruser; GRANT CREATE USER TO youruser; GRANT CREATE ANY TABLE TO youruser; GRANT DROP ANY TABLE TO youruser; GRANT ALTER ANY TABLE TO youruser; GRANT COMMENT ANY TABLE TO youruser; GRANT CREATE ANY SEQUENCE TO youruser; GRANT DROP ANY SEQUENCE TO youruser; GRANT SELECT ANY SEQUENCE TO youruser; GRANT CREATE ANY INDEX TO youruser; GRANT ALTER ANY INDEX TO youruser; GRANT DROP ANY INDEX TO youruser; GRANT CREATE ANY SYNONYM TO youruser; GRANT CREATE PUBLIC SYNONYM TO youruser; GRANT DROP ANY SYNONYM TO youruser; GRANT DROP PUBLIC SYNONYM TO youruser; GRANT CREATE ANY VIEW TO youruser; GRANT DROP ANY VIEW TO youruser; GRANT CREATE ANY TYPE TO youruser; GRANT DROP ANY TYPE TO youruser; GRANT CREATE ANY PROCEDURE TO youruser; GRANT DROP ANY PROCEDURE TO youruser; GRANT CREATE ANY TRIGGER TO youruser; GRANT DROP ANY TRIGGER TO youruser; GRANT ALTER ANY TRIGGER TO youruser; GRANT CREATE ANY MATERIALIZED VIEW TO youruser; GRANT DROP ANY MATERIALIZED VIEW TO youruser; GRANT SELECT ANY TABLE TO youruser; GRANT INSERT ANY TABLE TO youruser;
预检查结果
【阻塞】若检查不通过,页面将展示【检查未通过】及具体的报错信息,并且将阻塞下一步的离线迁移操作。

# 容量检查
预检查条件
当勾选【数据迁移】时,会进行该项检查。
预检查内容
容量检查将检查离线迁移任务的文件保存路径(${ymp.home}/tmp/)存储空间是否充足。
预检查结果
- 【阻塞】若路径容量小于待同步表中的最大单表数据量,页面将展示【检查未通过】及具体的报错信息,且阻塞下一步的离线迁移操作。
- 【告警】若路径容量小于待同步表中的最大单表数据量的三倍,页面将展示【警告】及具体的告警信息,但不阻塞下一步的离线迁移操作。
- 【通过】若路径容量不小于待同步表中的最大单表数据量的三倍,页面将展示【检查通过】。
# 部署方式检查(可选项)
预检查条件
当选择评估时,会进行该检查。
预检查内容
部署方式检查要求评估库和目标库部署方式相同:单机或者集群部署。
预检查结果
【告警】检查不通过,该检查项会告警提示,不阻塞接下来的离线迁移操作。

# 版本检查
版本检查包括评估库与目标库版本检查、yasldr与目标库版本检查、OCI版本检查。
预检查条件
当选择评估时,会进行评估库与目标库版本检查。
当勾选【数据迁移】时,会进行yasldr与目标库版本检查。
当勾选【数据迁移】且源端为Oracle时,会进行OCI版本检查。
预检查内容
版本检查将包含以下内容:
- 比较评估库和目标库版本号,可通过
SELECT VERSION_NUMBER FROM V$VERSION进行查询。 - yasldr与目标库版本检查将比较yasldr和目标库版本号,yasldr版本可通过
ymp.sh -v进行查询。 - OCI版本检查将比较当前OCI客户端版本与预期版本号。
预检查结果
评估库与目标库版本检查基于以下规则:
【阻塞】比较评估库与目标库版本号前三位,要求目标库版本大于等于评估库,否则页面将展示【检查未通过】及具体的报错信息,且阻塞下一步的离线迁移操作。

【告警】比较评估库与目标库版本号全部位数,若目标库前三位大于等于评估库,但全部位数不完全一致,则页面将展示【警告】及具体的告警信息,但不阻塞下一步的离线迁移操作。

【通过】比较评估库与目标库版本号全部位数,若完全一致,页面将展示【检查通过】。

yasldr与目标库版本检查基于以下规则:
【阻塞】比较yasldr与目标库版本号前三位,要求前三位完全一致,否则页面将展示【检查未通过】及具体的报错信息,且阻塞下一步的离线迁移操作。

【告警】比较yasldr与目标库版本号全部位数,若前三位一致,其余位不一致,则页面将展示【警告】及具体的告警信息,但不阻塞下一步的离线迁移操作。

【通过】比较yasldr与目标库版本号全部位数,若完全一致,页面将展示【检查通过】。

OCI版本检查基于以下规则:
【阻塞】比较当前OCI客户端版本与预期版本号,要求当前OCI客户端版本号不为空,否则页面将展示【检查未通过】及具体的报错信息,且阻塞下一步的离线迁移操作。

【告警】比较当前OCI客户端版本与预期版本号,若当前OCI客户端版本号不为空,但与预期版本号不完全一致,则页面将展示【警告】及具体的告警信息,但不阻塞下一步的离线迁移操作。

【通过】比较当前OCI客户端版本与预期版本号,若完全一致,页面将展示【检查通过】。

# 默认表类型检查
预检查条件
当选择评估时,会进行该检查。
预检查内容
默认表类型检查要求评估库和目标库的默认表类型相同:HEAP、LSC或TAC,可通过 SELECT DEFAULT_TABLE_TYPE FROM V$PARAMETER 查询。
预检查结果
【阻塞】若检查不通过,页面将展示【检查未通过】及具体的报错信息,并且将阻塞下一步的离线迁移操作。

# 表空间检查
表空间检查包括目标端表空间检查、表空间容量检查、LSC表空间检查。
预检查条件
当选择评估时,才会进行表空间检查。
除此之外,表空间容量检查还需勾选【数据迁移】时才进行,LSC表空间检查还需默认表类型为LSC才进行。
预检查内容
表空间检查将包含以下内容:
- 当表空间初始化选择【不跳过】时,实时获取一次目标端表空间信息是否存在,将结果和配置中的做对比。
- 当表空间初始化选择【跳过】时,检查所需表空间是否在目标端存在。
- 检查目标端已存在表空间容量是否满足数据迁移要求。
- 检查目标端已存在表空间是否挂载数据桶。
预检查结果
目标端表空间检查基于以下规则:
【阻塞】表空间初始化不跳过时,若目标端表空间的存在状态与配置不同,页面将展示【检查未通过】及具体的报错信息,且阻塞下一步的离线迁移操作。

这意味着用户需要关注表空间初始化的配置已经过期,和目标端实际存在情况不一致,需要重新获取后配置表空间。
【阻塞】表空间初始化跳过时,若迁移所需表空间不存在于目标端表空间,页面将展示【检查未通过】及具体的报错信息,且阻塞下一步的离线迁移操作。
表空间容量检查基于以下规则:
- 【告警】当目标端表空间文件有自动扩展时,若表空间文件最大大小的总和小于源端表空间文件已用大小,页面将展示【警告】及具体的告警信息,但不阻塞下一步的离线迁移操作。
- 【告警】当目标端表空间文件均无自动扩展时,若表空间文件大小的总和小于源端表空间文件已用大小,页面将展示【警告】及具体的告警信息,但不阻塞下一步的离线迁移操作。
【告警】若目标端已存在的表空间未挂载数据桶,页面将展示【警告】及具体的告警信息,但不阻塞下一步的离线迁移操作。用户可以自行挂载数据桶(通过 ALTER TABLESPACE tablesapce_name ADD DATABUCKET 'bucket1','bucket2' 进行挂载,具体语法参考崖山数据库文档ALTER TABLESPACE部分)。

# 表重名检查(可选项)
预检查条件
当跳过评估且源端数据库为MySQL时,将进行表重名检查。
预检查内容
表重名检查将检查源端是否存在忽略大小写重名的表。
预检查结果
【告警】若源端存在忽略大小写重名的表,页面将展示【警告】及具体的告警信息,但不阻塞下一步的离线迁移操作。

# 类型检查(可选项)
类型检查包括普通类型检查和自定义类型检查。
预检查条件
当勾选【数据迁移】时,将进行普通类型检查。
当勾选【元数据迁移1】且对象冲突策略选择【覆盖】时,将进行自定义类型检查。
预检查内容
普通类型检查根据源端类型不同,检查的数据类型不同。
Oracle:
数据类型 风险原因 VARCHAR2、NVARCHAR2 Oracle和YashanDB的支持范围不同 JSON Oracle和YashanDB的最大大小不同 INTERVAL DAY TO SECOND YashanDB的范围不能涵盖Oracle的范围 MySQL:
数据类型 风险原因 VARCHAR MySQL和YashanDB的支持范围不同 DECIMAL DECIMAL迁移到YashanDB为NUMBER,MySQL和YashanDB的精度范围不同 JSON MySQL和YashanDB的最大大小不同 SET SET迁移到YashanDB为VARCHAR,MySQL与YashanDB的支持范围不同 DM:
数据类型 风险原因 VARCHAR、VARCHAR2、CHAR、CHARACTER DM和YashanDB的支持范围不同 DATE、TIMESTAMP、DATETIME DM和YashanDB的支持范围不同 INTERVAL DAY TO SECOND、INTERVAL YEAR TO MONTH DM和YashanDB的精度范围不同
自定义类型检查将检查迁移的自定义类型是否存在于目标端且被引用。
预检查结果
【告警】当存在上列的数据类型时,页面将展示【警告】及具体的告警信息,但不阻塞下一步的离线迁移操作。

【告警】当迁移的自定义类型在目标端被引用时,页面将展示【警告】及具体的告警信息,但不阻塞下一步的离线迁移操作。

# 其他检查(可选项)
其他检查包括活跃定时任务检查。
预检查内容
活跃定时任务检查要求源端不存在活跃定时任务(不包括数据库自带的定时任务)。对Oracle而言,定时任务为Job/Scheduler;对MySQL而言,定时任务为Event。
预检查结果
【告警】若源端存在活跃定时任务,页面将展示【警告】及具体的告警信息,但不阻塞下一步的离线迁移操作。
