旧版转换工作区简介

旧版转换工作区是一种较旧且功能更有限的转换工作区。旧版转换工作区不支持 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 配置文件中定义以下信息:

    • 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);

后续步骤

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