已知限制和建议

本页介绍了使用 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,不支持列的数据类型为 ANYDATAUDT 的表,并且不会复制整个表。
  • 使用 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 个迁移作业。如需为更多任务腾出空间,可以删除一些迁移作业(包括已完成的作业)和连接配置文件。