本页介绍了使用 Database Migration Service 进行异构 Oracle 迁移的已知限制(包括处理 主键或 外键和触发器等实体的特殊注意事项),以及 推荐的做法。
哪些内容不会迁移
- 用户和权限不会迁移。
- 在有效迁移作业期间发生的架构更改不会自动迁移。如果您在迁移期间更改了架构,则需要先使用架构更改更新转换工作区,然后刷新相关迁移作业。如需了解详情,请参阅 向迁移作业添加更新后的架构或表。
- 不支持
SAVEPOINT
语句,如果发生回滚,可能会导致数据不一致。 -
Database Migration Service 会复制用户定义的数据类型,但只会存储您派生用户定义类型所依据的基本数据类型。
例如,如果您基于
VARCHAR2
数据类型定义USERNAME
数据类型,则数据会以VARCHAR
格式存储在目标位置。
数据库、事务和数据一致性
- 迁移最终是一致的,因为 Database Migration Service 不会实时复制每个事务。迁移会引入多个表中的数据。将数据加载到目标位置的顺序可能会有所不同,但在停止对源的写入操作并清除迁移缓冲区后,会与源重新对齐。
- 对于异构 Oracle 迁移,Database Migration Service 只能在每个迁移作业中迁移一个数据库。
- Database Migration Service 支持 Oracle 多租户架构 (CDB/PDB),但您只能在每个迁移作业中迁移单个可插入数据库。
- 不复制 Oracle 标签安全 (OLS)。
- 在迁移过程中,源数据库中回滚的任何事务都可能会暂时显示在目标数据库中(如果事务足够长)。
- Database Migration Service 不支持在 Oracle Real Application Clusters (RAC) 环境中使用单个客户端访问名称 (SCAN) 功能直接连接到数据库。如需了解使用公共 IP 许可名单连接方式与此类环境的潜在解决方案,请参阅 排查 Oracle SCAN 错误。
数据编码
- Database Migration Service 仅支持为目标数据库设置
UTF8
编码。不支持包含不属于UTF8
编码集的字符的架构和表名称。 - Database Migration Service 支持 Oracle 数据库的以下字符集编码:
AL16UTF16
AL32UTF8
IN8ISCII
IW8ISO8859P8
JA16SJIS
JA16SJISTILDE
KO16MSWIN949
US7ASCII
UTF8
WE8ISO8859P1
WE8ISO8859P9
WE8ISO8859P15
WE8MSWIN1252
ZHT16BIG5
表、架构和其他对象
- 在迁移期间,不支持对数据、架构和元数据进行数据定义语言 (DDL) 更改。如果您在迁移期间更新了架构,则需要将更改拉取到转换工作区,转换代码,清理目标并再次运行迁移作业。
- 不支持包含字母数字字符或下划线 (
_
) 以外的字符的表格列名称。 - 表或列的名称长度不得超过 30 个字符。 Database Migration Service 无法复制超出此限制的表,也无法复制包含名称超出此限制的列的表。
- 不支持索引整理表 (IOT)。
- 全局临时表需要在目标位置安装并创建
pgtt
PostgreSQL 扩展程序。 - 对于
BFILE
类型的列,只会复制文件路径。不复制文件的内容。 - 对于 Oracle 11g,不支持列的数据类型为
ANYDATA
或UDT
的表,并且不会复制整个表。 - 使用
dbms_job
或dbms_scheduler
调度的作业不会迁移。 - 系统会迁移具体化视图定义,但不会迁移其具体化数据。完成迁移后,刷新物化视图,以便使用迁移后的表中的数据填充这些视图。
- 系统会迁移序列值,但源数据库中的序列值可能会在迁移完成之前不断递增。迁移完成后,更新目标实例上的序列值,使其与源数据库中的序列值保持一致。
- 迁移作业限 10,000 个表。
- 行的大小限制为 100 MB。如果行的大小超过 100 MB 的限制,则不会迁移,并且会在迁移作业中显示为错误。
- 迁移开始后创建的任何表都不会自动迁移。首先,您需要在转换工作区中提取其架构,将转换后的定义应用于目标位置,然后更新迁移作业。
数据类型限制
以下数据类型不支持用于 Oracle 迁移:
ANYDATA
(对于 Oracle 11g,完全不支持具有ANYDATA
的表,并且不会复制这些表。)BFILE
INTERVAL DAY TO SECOND
INTERVAL YEAR TO MONTH
LONG/LONG RAW
SDO_GEOMETRY
UDT
UROWID
XMLTYPE
TIMESTAMP
中的零日期
主键注意事项
没有主键的表无法保证复制的一致性。Database Migration Service 仅迁移具有主键的表。如果源数据库包含没有主键的表,那么当您 转换源代码和架构时,Database Migration Service 转换工作区会自动在目标表中创建所有缺失的主键。
如果您使用的是旧版转化工作区,则需要在开始迁移之前,在目标数据库的已转换表中手动创建主键约束。如需了解详情,请参阅 旧版转换工作区。
外键和触发器的注意事项
源数据库中存在的外键和触发器可能会导致数据完整性问题,甚至导致迁移作业失败。如果您为迁移用户使用 REPLICATION
选项跳过外键和触发器,则可以避免这些问题。
或者,您也可以移除目标数据库中的所有外键和触发器,并在迁移完成后重新创建它们。
触发器
Database Migration Service 复制的数据已包含触发器对源数据库所做的任何更改。如果目标位置启用了触发器,它们可能会再次触发并可能操纵数据,从而导致数据完整性或重复问题。
外键
Database Migration Service 不会以事务方式复制数据,因此表可能会以无序方式迁移。如果存在外键,并且使用外键的子表在其父表之前迁移,您可能会遇到复制错误。
建议
-
创建目标 Cloud SQL 数据库时,请确保使用足够的计算和内存资源来满足迁移需求。我们建议使用至少具有双核 CPU 的机器类型。
例如,如果您的机器名称是
db-custom
,且其具有 2 个 CPU 和 3840 MB RAM,那么机器类型名称的格式为db-custom-2-3840
。 - 在迁移期间,目标 Cloud SQL 数据库可写入,以便在需要时应用数据操纵语言 (DML) 更改。 请注意,不要对数据库配置或表结构进行任何可能会导致迁移过程中断或影响数据完整性的更改。
配额
- 在任何给定时间,最多可以存在 2000 个连接配置文件和 1000 个迁移作业。如需为更多任务腾出空间,可以删除一些迁移作业(包括已完成的作业)和连接配置文件。