#迁移配置
# 前提条件
- 数据源已添加完成。
- 评估已经完成。
# 迁移配置
迁移配置页面如下:
该页面主要包含以下几个模块:
# 基础信息
迁移任务基础信息会展示任务名称、任务阶段、源库信息、目标库信息和距评估开始时间间隔等信息。
如果没有选择目标库,则无法进行保存和下一步迁移操作,需要点击基础信息右侧【编辑】按钮,修改任务信息,选择目标库。需要注意的是,编辑确认【保存】时会检查源端数据库连接用户是否满足选择的任务步骤所需的权限,权限详见:数据源权限配置。缺失的权限会弹窗提示。
如果迁移任务距离评估开始时间超过1小时或者已经跨天,则距上次评估则会变为红色。
# 迁移范围
确认需要迁移步骤:支持自由选择需要迁移的步骤,进行组合迁移。迁移步骤包括元数据迁移1、数据迁移和元数据迁移2,默认勾选三个阶段。其中:
- 元数据迁移1:展示和迁移范围为除主键约束、唯一约束、外键约束、索引和触发器之外的其他对象。
- 数据迁移:展示和迁移范围为表。
- 元数据迁移2:展示和迁移范围为主键约束、唯一约束、外键约束、索引和触发器。
Note: 如果开始步骤为迁移,则迁移步骤无法进行修改,强制选择数据迁移。
# 选择迁移对象
需注意:开始步骤为迁移时才存在该选项。
该选项需要选择至少一个SCHEMA/Database,选择完成后需要点击【确定范围】。
# 确认迁移对象
选择需要迁移的对象(对象来源于评估后的对象或是确认迁移范围时获取的对象)。
- 支持根据对象名称搜索对象,支持表列宽度拉伸。
- 支持根据对象类型,评估结果,对象状态,是否迁移进行筛选对象,其中:Oracle数据源支持对象状态,MySQL数据源不支持对象状态。
- 支持对对象进行批量设置是否迁移。
- 支持查看每个对象的DDL(开始步骤为迁移的任务无法查看)。
- 支持源端为Oracle、DM的Schema改名,库名不能超过64个字符,只能输入英文、数字和特殊字符_。
Note: 如果开始步骤为迁移,则迁移对象只有源端数据源下的所有表对象。
# 迁移初始化配置
配置禁用规则:
- 迁移步骤不勾选数据迁移时,数据迁移策略禁用。
- 对象冲突策略为覆盖时,数据迁移策略中的不截断选项禁用,只能选择截断。
Note: 如果开始步骤为迁移,则只需要选择【数据迁移策略】。
对象冲突策略
选择对象迁移的策略,默认【跳过】,选择覆盖时遵循下方的对象冲突策略。
当目标数据库中已存在对象,使用离线迁移时对象的判定冲突规则:
对象类型 | 冲突判定规则 | 策略为跳过 | 策略为覆盖 |
---|---|---|---|
约束-主键约束 | 同一张表里存在主键约束表示冲突 | 保持不动 | 删除后重建 |
约束-唯一约束 | 同列同顺序上有一个唯一约束表示冲突 | 保持不动 | 删除后重建 |
约束-检查约束 | 检查约束名称一样表示冲突 | 保持不动 | 删除后重建 |
约束-外键约束 | 同列同顺序上有一个外键约束表示冲突 | 保持不动 | 删除后重建 |
约束-非空约束 | 同一字段上有非空约束表示冲突 | 保持不动 | 删除后重建 |
索引-约束自建索引 | 约束创建的索引跟着约束的规则走, 约束创建成功就自动成功, 冲突判定和处理和主键约束、唯一约束一致 | 跟随约束 | 跟随约束 |
索引-其他索引 | 同列同顺序上有一个索引表示冲突 | 保持不动 | 删除后重建 |
其他对象 | 根据对象名,大小写敏感 | 保持不动 | 删除后重建 |
数据迁移策略
选择数据迁移的策略,默认【截断】。
权限冲突策略
选择权限迁移的策略,默认【跳过】,选择覆盖或合并时遵循下方的权限冲突策略;当不冲突时会默认进行权限迁移。
对象类型 | 冲突判定规则 | 策略为跳过 | 策略为覆盖 | 策略为合并 |
---|---|---|---|---|
权限 | 当目标端有需迁移的同名用户时表示冲突 | 保持不动 | 回收全部权限后赋权 | 直接赋权 |
Note:
- 如果目标端已有不同名的检查约束,不管跳过还是覆盖,都不会删除掉,需要用户自己检查删掉。 该场景风险:就算选了覆盖,数据迁移时还是需要满足两边的检查约束,不然会迁移失败风险。
- 如果源端和目标端的两个外键在两个不同列上,跳过策略,会保留两个外键。 该场景风险:如果选择了数据迁移,在enable的时候,可能会出现enable外键约束失败:not parent found。
- 如果权限冲突策略选择跳过,当迁移任务终止后再次执行时权限冲突判定结果可能发生变化。 该场景风险:可能会出现首次判定为非冲突,而重试时由于在目标端已经创建用户,判定为冲突的情况,此时重试执行跳过策略,目标端用户权限为空。
# 高级配置
高级配置项包括兼容配置、性能配置和容错配置,其中:
兼容配置:适合MySQL、DM迁移到Yashan的高级配置。
- 当MySQL、DM部分值迁移到YashanDB转为null时,会尝试删去非空约束,避免违反在该列上的非空约束,保证数据迁移,默认为不做兼容。
- 如果目标端YashanDB版本大于等于23.3,则迁移时会受数据库配置参数EMPTY_STRING_AS_NULL影响:当EMPTY_STRING_AS_NULL为FALSE时,CHAR、VARCHAR类型的空字符串会迁移成为空字符串,其余类型会受非空约束影响插入失败,尝试去掉非空约束后重新迁移。
性能配置:支持选择多表迁移并行度的配置,默认为4(最低为1,最高上限32)。需要注意的是,多表迁移并行度配置过高时,可能会由于内存不足导致OOM。数据迁移阶段的内存占用参考如下:
- 如果表内存在大量的大lob列(超过8K),则每张表对内存的占用不超过1.6GB。对于此情况,如果[高级配置-性能配置]的值为4,则
ymp_memory
的值应该配置为7G或更高,修改参数后需要重启YMP生效; - 如果表内不存在大量的大lob列(超过8K),则每张表对内存的占用不超过1GB。对于此情况,如果[高级配置-性能配置]的值为4,则
ymp_memory
的值也应该配置为4G或更高,修改参数后需要重启YMP生效;
- 如果表内存在大量的大lob列(超过8K),则每张表对内存的占用不超过1.6GB。对于此情况,如果[高级配置-性能配置]的值为4,则
容错配置:支持设置单表容错条数阈值,当容错配置开关为关时,该项配置不生效(即不进行容错,容错条数为0)。默认为200(最低为0,最高上限4,294,967,295),选择无限制时为4,294,967,295。
单表错误条数若超过该阈值时,中止迁移,迁移状态为失败。
单表错误条数若不超过该阈值,不中止迁移,但是迁移状态为失败。
对于有数据报错的表,在迁移过程和迁移报告中会展示部分错误信息,在迁移后可以下载完整错误信息和完整错误数据。
在数据导入阶段,由于使用了并发导入和批量提交,单表真实容错数据量一般会大于容错阈值,极端情况下不超过容错阈值+配置文件中的export.csv.exportRowsEveryFile的值。
Note:
此配置受数据库版本和迁移工具版本限制,当数据库或工具版本低于 22.2.7.2 时,不支持迁移容错。
配置禁用规则:
- 迁移步骤不勾选数据迁移时,兼容配置、性能配置、容错配置禁用。
- 源端不为MySQL或者迁移步骤不勾选数据迁移或者数据迁移策略选择截断,兼容配置禁用。
# 表空间初始化配置
需注意:开始步骤为迁移的任务无该配置。
迁移前,需要加载源端迁移对象使用到的表空间,并展出目标端是否存在这样的表空间。
- 选择【不跳过】,迁移前则会将目标端不存在的表空间创建(支持编辑需要创建表空间文件的参数和数量,编辑后需要点击保存即可生效)。
- 选择【跳过】,则迁移前不会对表空间进行初始化。
支持展示源端所有的表空间个数和总数据量、源端单个表空间的信息(名称,大小,已用大小)、目标端存放数据文件的路径。
支持批量修改数据文件的参数、刷新表空间信息、表格列宽度拉伸。
当源端表空间数据文件大小、自增步长、文件最大大小不符合目标端数据库要求时,自动将参数调整为YashanDB兼容的值。
当默认表类型为LSC时,支持对目标端不存在的表空间配置数据桶路径。
# 角色初始化配置
需注意:开始步骤为迁移的任务无该配置,该配置只有源端数据源类型为Oracle时可使用。
该配置会自动加载源端SCHEMA所使用的角色相关信息,主要包括角色名、源端权限、目标端权限、角色属性等信息。
- 角色名:源端SCHEMA使用的角色名称。
- 源端权限:该角色在源端数据库中被赋予的系统权限、对象权限和其它角色列表,点击【展开】可查看详情,对于崖山不支持的权限会做标注。
- 目标端权限:该角色在目标端数据库中被赋予的系统权限、对象权限和其它角色列表,点击【展开】可查看详情。
- 冲突策略:角色进行迁移时采用的冲突策略。
- 角色属性:主要分为系统角色和非系统角色。
- 是否迁移:迁移标志是和否。
角色迁移的冲突策略有三种:跳过、覆盖、合并,默认冲突策略为跳过。
- 跳过:目标端存在同名角色,则不会迁移该角色。
- 覆盖:如果目标端存在同名角色,移除该角色所有权限,重新赋予迁移角色的源端YashanDB支持的权限给该角色,然后将角色赋予给对应用户。
- 合并:如果目标端存在同名角色,则赋予迁移角色的源端YashanDB支持的权限给该角色,同时保留角色原本拥有的权限。
Note:
如果所迁移的角色在目标端不存在,则上述三种策略都会直接创建该角色,并赋予迁移角色的源端YashanDB支持的权限给该角色,然后将角色赋予给对应用户。
角色表单详情如下:
支持以下操作:
- 更改策略:修改选择的角色的冲突策略。
- 迁移/不迁移:修改选择的角色的迁移标志。
- 下拉筛选:支持根据角色名、冲突策略、角色属性和是否迁移进行下拉筛选。
- 模糊搜索:支持角色名忽略大小写模糊搜索。
- 批量设置冲突策略:可以选择多个角色进行批量修改冲突策略。
- 批量设置是否迁移:可以用选择多个角色进行批量修改迁移标志。
Note:
系统角色不支持修改冲突策略和迁移标志。
如果源端和目标端角色信息有变化,要同步新的角色信息,则需要用户进行手动刷新,点击右上角旋钮[刷新角色列表]可以刷新角色权限信息。
角色迁移属于元数据阶段一,且位于元数据阶段一末尾,在迁移完成后会在对象列表中展示。
如果角色迁移失败,则会回滚至该角色迁移前的情况,如果为YMP创建的角色,则会删除掉,不是则会回滚权限至迁移前的情况。
# 迁移预检查
点击【下一步:离线迁移】将进行迁移前的预检查。
开始步骤为评估的任务,预检查包括连接检查、权限检查、容量检查、部署方式检查、版本检查、默认表类型检查、表空间检查、类型检查、字符集检查和其他检查。
其中部署方式检查、类型检查、字符集检查和其他检查为可选项,可不做检查。
开始步骤为迁移的任务,预检查包括连接检查、权限检查、容量检查、版本检查、表重名检查(源端为MySQL时)、类型检查、字符集检查和其他检查。
其中表重名检查、类型检查、字符集检查和其他检查为可选项,可不做检查。
# 连接检查
预检查内容
连接检查将对源端和目标端的数据库的连接可用状态进行检查,要求源端和目标端的数据库均在可用状态下,并对数据库有操作权限。
预检查结果
若检查不通过,页面将展示【检查未通过】及具体的报错信息,且阻塞下一步的离线迁移操作。
# 权限检查
预检查内容
权限检查要求使用的源端和目标端数据库用户拥有足够的权限,数据源权限详见:数据源权限配置 。
预检查结果
若检查不通过,页面将展示【检查未通过】及具体的报错信息,并且将阻塞下一步的离线迁移操作。
# 容量检查
预检查条件
当勾选【数据迁移】时,会进行该项检查。
预检查内容
容量检查将检查离线迁移任务的文件保存路径(${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 Oracle和YashanDB的支持范围不同 DATE Oracle和YashanDB的支持范围不同 TIMESTAMP Oracle和YashanDB的支持范围、精度不同 TIMESTAMP WITH TIME ZONE Oracle和YashanDB的支持范围、精度不同,且会丢失时区信息 TIMESTAMP WITH LOCAL TIME ZONE Oracle和YashanDB的支持范围、精度不同,且会丢失时区信息,若YMP与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 DM和YashanDB的支持范围不同 TIMESTAMP、DATETIME、TIMESTAMP WITH LOCAL TIME ZONE DM和YashanDB的支持范围不同 TIME WITH TIME ZONE 时区信息丢失 TIMESTAMP WITH TIME ZONE、DATETIME WITH TIME ZONE DM和YashanDB的支持范围不同且会丢失时区信息 INTERVAL DAY TO SECOND、INTERVAL YEAR TO MONTH DM和YashanDB的精度范围不同
自定义类型检查将检查迁移的自定义类型是否存在于目标端且被引用。
预检查结果
- 当存在上列的数据类型时,页面将展示【警告】及具体的告警信息,但不阻塞下一步的离线迁移操作。
- 当迁移的自定义类型在目标端被引用时,页面将展示【警告】及具体的告警信息,但不阻塞下一步的离线迁移操作。
# 字符集检查(可选)
预检查内容
字符集检查要求源端与目标端字符集兼容,避免迁移时数据出现乱码等问题。
根据YashanDB支持字符集(GB18030、GBK、UTF8、ASCII和ISO-8859-1),字符集兼容规则如下:
YashanDB | Oracle | DM | MySQL |
---|---|---|---|
GB18030 | ZHS16GBK、ZHS32GB18030 | GB18030 | gbk、gb2312、gb18030 |
GBK | ZHS16GBK | 无 | gbk、gb2312 |
UTF8 | AL32UTF8、UTF8 | UTF-8 | utf8、utf8mb4 |
ASCII | US7ASCII | 无 | ascii |
ISO-8859-1 | WE8ISO8859P1 | 无 | latin1 |
预检查结果
若源端字符集与目标端字符集不兼容,页面将展示【警告】及具体的告警信息,但不阻塞下一步的离线迁移操作。
# 其他检查(可选)
其他检查包括活跃定时任务检查和非自动刷新模式的物化视图检查。
预检查内容
活跃定时任务检查要求源端不存在活跃定时任务(不包括数据库自带的定时任务)。对Oracle而言,定时任务为Job/Scheduler;对MySQL而言,定时任务为Event。 非自动刷新模式的物化视图检查,要求源端Oracle或DM8不存在非ON COMMIT刷新模式的物化视图。
预检查结果
若源端存在活跃定时任务,页面将展示【警告】及具体的告警信息,但不阻塞下一步的离线迁移操作。
若源端存在非ON COMMIT刷新模式的物化视图,页面将展示【警告】及具体的告警信息,但不阻塞下一步的离线迁移操作。
# 操作
# 保存
点击【保存】将保存迁移配置,重新进入页面会展示已保存的配置。
# 上一步
点击【上一步】,返回到迁移评估阶段。
# 下一步:离线迁移
保存迁移配置,当预检查通过后,如果无风险提示,会自动开始离线迁移,如果有风险提示,会提示后确认开始离线迁移。
# 重新评估
点击【重新评估】将跳转至评估配置保存页面。
# 迁移步骤勾选
在该页面右上角显示已选择的迁移步骤,如果没有勾选校验阶段,迁移结束后无法进行下一步执行校验任务的创建和执行等操作。