旧版转换工作区简介

旧版转换工作区是一种较旧且功能更有限的转换工作区。旧版转换工作区不支持 Gemini 增强的转换功能或交互式 SQL 编辑器。您只能使用它们通过 Ora2Pg 迁移工具转换源架构。

我们不建议您使用旧版转换工作区进行迁移,因为它们对转换工作流存在多项其他限制:

交互式转换工作区旧版转换工作区
架构和代码对象转换在 Database Migration Service 中进行。 您可以使用 Ora2Pg 迁移工具在 Database Migration Service 外部执行架构和代码对象转换。
您可以直接在 Database Migration Service 中将转换后的源应用于目标数据库 。 您负责在 Cloud SQL for PostgreSQL 目标实例中将转换后的架构应用于目标 数据库。
您可以直接在 Database Migration Service 中测试草稿架构和代码 以确保它们可以成功应用于目标实例。 您无法在不影响 目标实例的情况下测试草稿架构和代码。
自动为没有主键和唯一限制条件的表添加缺少的 rowid 列。 您必须在应用架构后向目标表添加缺少的主键。
表 1:转换工作区功能比较

使用旧版转换工作区

如果您的场景需要使用旧版转换工作区,请通过以下操作修改迁移过程:

  1. 编写 Ora2Pg 配置文件。

    如需了解如何使用 Ora2Pg 转换工具,请参阅 Ora2Pg 文档。展开即可下部分,查看 Database Migration Service 中支持的指令的完整列表。

    Database Migration Service 中支持的 Ora2Pg 配置

    Database Migration Service 支持 Ora2Pg 文件的以下配置项:

    • BOOLEAN_VALUES
    • DATA_TYPE
    • DEFAULT_NUMERIC
    • ENABLE_MICROSECOND
    • EXPORT_SCHEMA
    • MODIFY_STRUCT
    • MODIFY_TYPE
    • PG_INTEGER_TYPE
    • PG_NUMERIC_TYPE
    • PG_SCHEMA
    • PRESERVE_CASE
    • REPLACE_AS_BOOLEAN
    • REPLACE_COLS
    • REPLACE_TABLES
    • REPLACE_ZERO_DATE
    • SCHEMA

    Database Migration Service 使用连接配置文件来定义 连接详细信息,因此您无需在 Or2Pg 配置文件中定义以下信息 在您的 Or2Pg 配置文件中:

    • ORACLE_DSN
    • ORACLE_HOME
    • ORACLE_PWD
    • ORACLE_USER
    • PG_DSN
    • PG_PWD
    • PG_USER

    此外,Database Migration Service 不使用 WHERE 配置指令来限制要迁移的记录。

  2. 创建旧版转换工作区,并上传 Ora2Pg 文件以转换 架构
  3. 手动将转换后的架构应用于目标数据库。

    创建 Ora2Pg 配置并创建工作区后, 您必须自行直接在目标 数据库上应用生成的代码。

  4. 迁移没有主键的表。

    Database Migration Service 仅迁移具有主键的表。 如果您的源数据库包含没有主键的表, 您需要在应用转换后的架构后,在目标数据库的转换后的表中手动创建主键或唯一限制条件。展开即可下部分了解详情。

    在目标数据库中添加主键限制条件

    如需迁移没有主键的 Oracle 表,请执行以下操作:

    1. 使用 SQL 客户端连接到 Cloud SQL 目标实例。您可以使用以下方法:
      • psql 客户端。您可以使用此方法连接 到实例专用 IP,但可能需要您创建 Compute Engine 虚拟机。
      • gcloud sql connect 命令。此命令 仅适用于已启用公共 IP 地址 的 Cloud SQL 实例。
    2. 为表创建缺少的主键限制条件。如需详细了解主键,请参阅 PostgreSQL 文档中的 主键

      您还可以展开即可下部分,查看示例 SQL 命令:

      使用现有列创建主键

      您的表可能已具有基于 列或列组合的逻辑主键。例如,可能存在 配置了唯一限制条件或索引的列。使用这些 列为源数据库中的表生成新的主键。例如:

      ALTER TABLE TABLE_NAME
      ADD PRIMARY KEY (COLUMN_NAME);

      使用所有列创建主键

      如果您没有可作为 主键的预先存在的限制条件,请使用表的所有列创建主键。确保您没有超出 PostgreSQL 实例允许的主键的最大长度。例如:

      ALTER TABLE TABLE_NAME
      ADD PRIMARY KEY (COLUMN_NAME_1, COLUMN_NAME_2, COLUMN_NAME_3, ...);

      创建此类复合主键时,您需要明确 列出要使用的所有列名称。无法使用语句 检索所有列名称以实现此目的。

      使用 ROWID 伪列创建唯一限制条件

      Oracle 数据库使用 ROWID 伪列 来存储 表中每一行的位置。如需迁移没有主键的 Oracle 表 ,您可以在目标 PostgreSQL 数据库中添加 ROWID 列。Database Migration Service 会使用源 Oracle ROWID 伪列中的相应数值填充该列。

      如需添加该列并将其设置为主键,请运行以下命令:

      ALTER TABLE TABLE_NAME ADD COLUMN rowid numeric(33,0) NOT NULL;
      CREATE SEQUENCE TABLE_NAME_rowid_seq INCREMENT BY -1 START WITH -1 OWNED BY TABLE_NAME.rowid;
      ALTER TABLE TABLE_NAME ALTER COLUMN rowid SET DEFAULT nextval('TABLE_NAME_rowid_seq');
      ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_DISPLAY_NAME PRIMARY KEY (rowid);

后续步骤

使用旧版工作区执行转换工作流后,您可以继续执行标准迁移程序。请参阅 创建迁移作业