实时数据迁移使用限制

以MySQL为源的数据库迁移

使用须知

类型名称

使用和操作限制

MySQL版本限制

源端MySQL支持5.7及以上版本。

数据库权限设置

  • 源数据库账号需要具备以下权限:

    • SELECT、SHOW VIEW、REPLICATION SLAVE、REPLICATIO CLIENT

  • 提供的目标数据库账号必须拥有如下权限:

    • SELECT、CREATE、INSERT、UPDATE、ALTER、CREATE VIEW、

    • CREATE ROUTINE。云数据库MySQL实例的root账户默认已具备上述权限。

同步对象约束

支持表、索引、存储过程、视图、函数的对象传输,不支持事件、触发器的对象传输。

相关关联的数据对象要确保同时迁移,避免迁移因关联对象缺失,导致迁移失败。常见的关联关系:视图引用表、视图引用视图、存储过程/函数引用视图/表、主外键关联表等。

源数据库要求

源MySQL源数据库的binlog日志必须打开,且binlog日志格式必须为Row格式,在磁盘空间允许的情况下,建议源数据库binlog保存时间越长越好,建议为3天。

目标数据库要求

  • 不支持目标端为MGR模式的迁移。

  • 目标数据库的字符集必须与源数据库一致。

  • 目标数据库的时区设置必须与源数据库一致。

其他限制

  • 目的端不允许存在与源端同名的无主键表。

  • 迁移时源库进行主备切换,会导致迁移任务失败。

  • 迁移时目标库进行主备切换等操作,会导致迁移任务失败。

  • 建议源和目标库的MySQL版本保持一致,以保障兼容性。

  • 实时同步过程中,如果修改了源库或者目标库的用户名、密码,会导致同步任务失败,不建议在迁移过程中修改上述信息。

MySQL支持字段类型

字段类型

说明

TINYINT

-

SMALLINT

-

TINYINT UNSIGNED

-

INT

-

MEDIUMINT

-

SMALLINT UNSIGNED

-

BIGINT

-

INT UNSIGNED

-

BIGINT UNSIGNED

-

FLOAT

Float(M,D)定点数M指定长度,D表示小数点位数, 当没有明确精度时,请确认精度是否符合业务预期,否则可能出现同步数据失效情况。

DOUBLE

-

NUMERIC

-

DECIMAL

-

BOOLEAN

-

BIT

-

DATE

-

TIMESTAMP

-

DATETIME

-

CHAR

-

VARCHAR

-

BIT

-

BINARY

-

VARBINARY

-

TINYTEXT

-

TEXT

-

MEDIUMTEXT

-

LONGTEXT

-

TINYBLOB

-

BLOB

-

MEDIUMBLOB

-

LONGBLOB

-

YEAR

-

ENUM

-

JSON

-

SET

-

GEOMETRY

-

POINT

-

LINESTRING

-

POLYGON

-

MULTIPOINT

-

MULTILINESTRING

-

MULTIPOLYGON

-

GEOMETRYCOLLECTION

-

以PostgreSQL为源的数据库迁移

使用须知

类型名称

使用和操作限制

PostgreSQL版本限制

源端PostgreSQL支持10、11、12版本。

数据库权限设置

  • 源数据库账号需要具备以下权限:

    • 待迁移库的READ权限,REPLICATION连接权限。

  • 提供的目标数据库账号必须拥有如下权限:

    • 全量+增量情况下:Schema的owner权限(没有schema的情况下需要有Create Schema的权限)。

    • 全量模式情况下:表的ower权限。

    • 推荐使用超级用户权限。

同步对象约束

支持表、索引、存储过程、视图、函数的对象传输,不支持事件、触发器的对象传输。

相关关联的数据对象要确保同时迁移,避免迁移因关联对象缺失,导致迁移失败,常见的关联关系:视图引用表、视图引用视图、存储过程/函数引用视图/表、主外键关联表等。

源数据库要求

源PostgreSQL数据库的WAL日志必须打开,即设置wal_level参数的值为logical。

目标数据库要求

  • 目标数据库的字符集必须与源数据库一致。

  • 目标数据库的时区设置必须与源数据库一致。

其他限制

  • 目的端不允许存在与源端同名的无主键表。

  • 迁移时源库进行主备切换,会导致迁移任务失败。

  • 迁移时目标库进行主备切换等操作,会导致迁移任务失败。

  • 建议源和目标库的PostgreSQL版本保持一致,以保障兼容性。

  • 实时同步过程中,如果修改了源库或者目标库的用户名、密码,会导致同步任务失败,不建议在迁移过程中修改上述信息。

  • 单个数据迁移任务只能迁移一个数据库,如需迁移多个数据库,您需要为每个数据库配置数据迁移任务。

  • 源端数据库不支持pg-pool组件实现的高可用ip。

PostgreSQL支持字段类型

字段类型

说明

SMALLINT

-

INT2

-

SMALLSERIAL

-

SERIAL2

-

INTEGER

-

SERIAL

-

BIGINT

-

BIGSERIAL

-

BIGINT

-

REAL

FLOAT4

-

FLOAT8

-

DOUBLE PRECISION

-

NUMERIC(p, s)

-

DECIMAL(p, s)

-

BOOLEAN

-

DATE

-

TIME [(p)] [WITHOUT TIMEZONE]

-

TIMESTAMP [(p)] [WITHOUT TIMEZONE]

-

CHAR(n)

-

CHARACTER(n)

-

VARCHAR(n)

-

CHARACTER VARYING(n)

-

TEXT

-

BYTEA

-

以MongoDB为源的数据库迁移

使用须知

类型名称

使用和操作限制

MongoDB版本限制

源端MongoDB支持3.6、4.x、5.0版本

数据库权限设置

  • 源数据库账号需要具备以下权限:

    • 待迁移库的readAnyDataBase权限

    • admin库和local库的read权限

  • 提供的目标数据库账号必须拥有如下权限:

    • 目标库的readWrite权限

同步对象约束

支持集合的对象传输

源数据库要求

源Mongodb数据库的Oplog日志需开启

目标数据库要求

  • 目标数据库的字符集必须与源数据库一致

  • 目标数据库的时区设置必须与源数据库一致

  • 当目标库和源库同名时,目标数据库中不允许存在与源库同名的集合。

其他限制

  • 目的端不允许存在与源端同名的无主键集合。

  • 迁移时源库进行主备切换,会导致迁移任务失败

  • 迁移时目标库进行主备切换等操作,会导致迁移任务失败

  • 建议源和目标库的MongoDB版本保持一致,以保障兼容性

  • 实时同步过程中,如果修改了源库或者目标库的用户名、密码,会导致同步任务失败,不建议在迁移过程中修改上述信息

  • 不支持迁移admin和local库中的数据

MongoDB支持字段类型

字段类型

说明

Int

-

Long

-

Double

-

Decimal128

-

Boolean

-

Date

-

Timestamp

-

Date

-

Timestamp

-

Date

Timestamp

-

String

-

ObjectId

-

UUID

-

Symbol

-

MD5

-

JavaScript

-

Regex

-

BinData

-

Object

-

Array

-

DBPointer

-

GeoJSON

-

以Oracle为源的数据库迁移

使用须知

类型名称

使用和操作限制

Oracle版本限制

源端Oracle支持11g、12c、19c版本;仅支持单机版本,不支持RAC模式。

数据库权限设置

  • 源数据库账号需要具备以下权限:DBA

  • 提供的目标数据库账号必须拥有如下权限:SELECT、INSERT、CREATE、DROP、UPDATE、ALTER、DELETE

同步对象约束

支持表、视图的对象传输,不支持事件、触发器的对象传输。

相关关联的数据对象要确保同时迁移,避免迁移因关联对象缺失,导致迁移失败,常见的关联关系:视图引用表、视图引用视图、存储过程/函数引用视图/表、主外键关联表等。

源数据库要求

源Oracle数据库的归档日志和附加日志必须打开。开启示例如下:

  1. ‍开启归档日志

ORACLE_SID=SID

export ORACLE_SID

sqlplus /nolog

CONNECT sys/password AS SYSDBA

alter system set db_recovery_file_dest_size = 10G;

alter system set db_recovery_file_dest = '/opt/oracle/oradata/recovery_area' scope=spfile;

shutdown immediate;

startup mount;

alter database archivelog;

alter database open;

  1. 开启附加日志

alter database add supplemental log DATA(ALL) COLUMNS;

目标数据库要求

  • 目标数据库的字符集必须与源数据库一致。

  • 目标数据库的时区设置必须与源数据库一致。

其他限制

  • 目的端不允许存在与源端同名的表。

  • 实时同步过程中,如果修改了源库或者目标库的用户名、密码,会导致同步任务失败,不建议在迁移过程中修改上述信息。

  • 由于Oracle与MySQL的部分语法有明显区别,结构同步无法完全保证支持全部语法的转换,包括但不限于函数,表达式,依赖的系统表等。所以在同步过程中,会有在Oracle上存在,在MySQL中没有直接对应的语法,或者MySQL中有对应的语法,但当前还未适配转换的情况,这样会导致结构同步失败。此时,需要手工在目标数据库创建表结构。

  • Oracle开启归档日志模式下,磁盘使用较快,应及时检查,避免磁盘使用100%造成数据迁移失败情况。

  • 数据传输增量模式,不支持对主键的批量修改的情况,如update t_1 set id = id+1。

  • 源端表中如果存在特殊符号,如'(单引号)等,在进行结构传输时,可能会导致任务迁移失败。

  • 若源端表中存在注释,在进行迁移时注释不会同步至PostgreSQL。

  • 不支持使用超级管理员sys账号将Oracle数据迁移至PostgreSQL。

Oracle迁移MySQL的字段类型

类型

Oracle的数据类型

数值范围

MySQL数据类型

数字类型

NUMBER(p,s)

1 ~ 22 字节。

p代表精度位,取值范围是1 ~ 38。

s代表小数位,取值范围是-84 ~ 127。

【说明】当s为负数时,需要通过对象建议(请参见在线任务操作)进行结构订正。

DECIMAL[(p[,s])]

FLOAT(p)

1 ~ 22 字节。

p代表指针变量,取值范围是1 ~ 126 bit。

DOUBLE

BINARY_FLOAT

32-bit的浮点数,即4字节。

DECIMAL(65,8)

BINARY_DOUBLE

64-bit的浮点数,即8字节。

DOUBLE

日期类型

DATE

DATETIME

TIMESTAMP [(fractional_seconds_precision)]

DATETIME[(fractional_seconds_precision)]

TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE

DATETIME[(fractional_seconds_precision)]

TIMESTAMP [(fractional_seconds_precision)] WITH LOCAL TIME ZONE

DATETIME[(fractional_seconds_precision)]

字符串类型

CHAR [(size [BYTE | CHAR])]

2000 字节。

CHAR[(n)]

NCHAR[(size)]

2000 字节。

NATIONAL CHAR[(n)]

VARCHAR2(size [BYTE | CHAR])

当MAX_STRING_SIZE = EXTENDED时,最大长度为32767字节;

当MAX_STRING_SIZE = STANDARD,最大长度为4000字节。

VARCHAR(n)

NVARCHAR2(size)

当MAX_STRING_SIZE = EXTENDED时,最大长度为32767字节;

当MAX_STRING_SIZE = STANDARD,最大长度为4000字节。

NATIONALVARCHAR[(n)]

CLOB

最大长度(4 GB - 1)*DB_BLOCK_SIZE。

LONGTEXT

NCLOB

最大长度(4 GB - 1)*DB_BLOCK_SIZE。

LONGTEXT

ROWID类型

ROWID

64字符。

CHAR(20)

Oracle迁移PostgreSQL的字段类型

Oracle的数据类型

数值范围

PostgreSQL的数据类型

NUMBER(p,s)

1 ~ 22 字节。

p代表精度位,取值范围是1 ~ 38。

s代表小数位,取值范围是-84 ~ 127。

DECIMAL | TINYINT | SMALLINT | INTEGER | BIGINT

FLOAT(p)

1 ~ 22 字节。

p代表指针变量,取值范围是1 ~ 126 bit。

DOUBLE PRECISION

BINARY_FLOAT

32-bit的浮点数,即4字节。

DOUBLE PRECISION

BINARY_DOUBLE

64-bit的浮点数,即8字节。

DOUBLE PRECISION

DATE

TIMESTAMP(0)

TIMESTAMP [(fractional_seconds_precision)]

TIMESTAMP

TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE

TIMESTAMP WITH TIME ZONE

TIMESTAMP [(fractional_seconds_precision)] WITH LOCAL TIME ZONE

TIMESTAMP WITH TIME ZONE

CHAR [(size [BYTE | CHAR])]

2000 字节。

CHAR

NCHAR[(size)]

2000 字节。

VARCHAR

VARCHAR2(size [BYTE | CHAR])

  • 当MAX_STRING_SIZE = EXTENDED时,最大长度为32767字节;

  • 当MAX_STRING_SIZE = STANDARD,最大长度为4000字节。

VARCHAR

NVARCHAR2(size)

  • 当MAX_STRING_SIZE = EXTENDED时,最大长度为32767字节;

  • 当MAX_STRING_SIZE = STANDARD,最大长度为4000字节。

VARCHAR

CLOB

最大长度(4 GB - 1)*DB_BLOCK_SIZE。

TEXT

NCLOB

最大长度(4 GB - 1)*DB_BLOCK_SIZE。

TEXT

ROWID

64字符。

CHAR(20)