本页面介绍了已知限制(包括处理 主键或 外键和触发器等实体的特殊注意事项),以及 使用 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
数据库的以下字符集编码:
AL16UTF16AL32UTF8IN8ISCIIIW8ISO8859P8JA16SJISJA16SJISTILDEKO16MSWIN949US7ASCIIUTF8WE8ISO8859P1WE8ISO8859P9WE8ISO8859P15WE8MSWIN1252ZHT16BIG5
表、架构和其他对象
- 在迁移期间,不支持对数据、架构、 和元数据进行数据定义语言 (DDL) 更改。如果您在迁移期间更新架构, 您需要将更改拉取到转换工作区,转换代码, 清理目标位置并再次运行迁移作业。
- 不支持包含字母数字
字符或下划线 (
_) 以外的字符的表列名称。 - 表或列的名称长度上限为 30 个字符。 则 Database Migration Service 无法复制超出此限制的表,或包含名称超出此限制的列的表。
- 不支持索引整理表 (IOT)。
- 全局临时表需要在目标位置安装并创建
pgttPostgreSQL 扩展程序。 - 对于
BFILE类型的列,只会复制文件路径。不复制文件的内容。 - 对于 Oracle 11g,不支持列的数据类型为
ANYDATA或UDT的表,并且不会复制整个表。 - 不会迁移使用
dbms_job或dbms_scheduler安排的作业。 - 系统会迁移具体化视图定义,但不会迁移其具体化数据 。迁移完成后,请刷新具体化视图,以便使用迁移后的表中的数据填充它们。
- 系统会迁移序列值,但源数据库中的序列值 可能会在迁移完成之前不断递增。迁移完成后,请更新目标实例上的序列值,使其与源数据库中的序列值一致。
- 迁移作业限 10,000 个表。
- 行的限制大小为 100 MB。不会迁移超出 100 MB 限制的行 ,并且这些行会在迁移作业中显示为错误。
- 在迁移开始后创建的任何表都不会自动迁移 。您需要先在转换工作区中拉取其架构, 将转换后的定义应用于目标位置,然后更新迁移作业。
- 在持续迁移中,不支持包含二进制列且没有主键的源表进行数据迁移。 不支持包含二进制列且没有主键的源表进行数据迁移。
数据类型限制
Oracle 迁移不支持以下数据类型:
ANYDATA(对于 Oracle 11g,完全不支持包含ANYDATA的表,并且不会复制这些表。)BFILEINTERVAL DAY TO SECONDINTERVAL YEAR TO MONTHLONG/LONG RAWSDO_GEOMETRYUDTUROWIDXMLTYPETIMESTAMP中的零日期
主键注意事项
没有主键的表无法保证一致的复制。
Database Migration Service 仅迁移具有主键的表。
如果您的源数据库包含没有主键的表,
当您转换源代码和架构时,Database Migration Service 转换工作区会自动在目标表中创建所有缺失的
主键。
您还可以使用
GENERATE_MISSING_PK转换指令停用自动主键生成。
对于持续迁移:在持续迁移中,不支持包含二进制列且 没有主键的源表进行数据迁移。
如果您使用旧版转换工作区,则需要在开始迁移之前,在目标数据库的转换后的表中手动创建主键限制条件。如需了解详情,请参阅 旧版转换工作区。
外键和触发器注意事项
源数据库中存在的外键和触发器可能会导致数据完整性问题,甚至导致迁移作业失败。
如果您使用迁移用户的 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 个迁移作业。 如需为更多任务腾出空间,可以删除一些迁移作业(包括已完成的作业) 和连接配置文件。