已知限制和建议

本页面介绍了已知限制(包括处理 主键或 外键和触发器等实体的特殊注意事项),以及 使用 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,不支持列的数据类型为 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 转换工作区会自动在目标表中创建所有缺失的 主键。 您还可以使用 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 个迁移作业。 如需为更多任务腾出空间,可以删除一些迁移作业(包括已完成的作业) 和连接配置文件。