本页介绍了使用 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
JA16SJIS
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 个连接配置文件和 1,000 个迁移作业。如需为更多任务腾出空间,可以删除一些迁移作业(包括已完成的作业)和连接配置文件。