旧版转换工作区是一种较旧且功能更有限的转换工作区。旧版转换工作区不支持 Gemini 增强的转换功能或交互式 SQL 编辑器。您只能使用它们通过 Ora2Pg 迁移工具转换源架构。
我们不建议您使用旧版转换工作区进行迁移,因为它们对转换工作流存在多项其他限制:
| 交互式转换工作区 | 旧版转换工作区 |
|---|---|
| 架构和代码对象转换在 Database Migration Service 中进行。 | 您可以使用 Ora2Pg 迁移工具在 Database Migration Service 外部执行架构和代码对象转换。 |
| 您可以直接在 Database Migration Service 中将转换后的源应用于目标数据库 。 | 您负责在 Cloud SQL for PostgreSQL 目标实例中将转换后的架构应用于目标 数据库。 |
| 您可以直接在 Database Migration Service 中测试草稿架构和代码 以确保它们可以成功应用于目标实例。 | 您无法在不影响 目标实例的情况下测试草稿架构和代码。 |
自动为没有主键和唯一限制条件的表添加缺少的 rowid 列。 |
您必须在应用架构后向目标表添加缺少的主键。 |
使用旧版转换工作区
如果您的场景需要使用旧版转换工作区,请通过以下操作修改迁移过程:
编写 Ora2Pg 配置文件。
如需了解如何使用 Ora2Pg 转换工具,请参阅 Ora2Pg 文档。展开即可下部分,查看 Database Migration Service 中支持的指令的完整列表。
Database Migration Service 中支持的 Ora2Pg 配置
Database Migration Service 支持 Ora2Pg 文件的以下配置项:
BOOLEAN_VALUESDATA_TYPEDEFAULT_NUMERICENABLE_MICROSECONDEXPORT_SCHEMAMODIFY_STRUCTMODIFY_TYPEPG_INTEGER_TYPEPG_NUMERIC_TYPEPG_SCHEMAPRESERVE_CASEREPLACE_AS_BOOLEANREPLACE_COLSREPLACE_TABLESREPLACE_ZERO_DATESCHEMA
Database Migration Service 使用连接配置文件来定义 连接详细信息,因此您无需在 Or2Pg 配置文件中定义以下信息 在您的 Or2Pg 配置文件中:
ORACLE_DSNORACLE_HOMEORACLE_PWDORACLE_USERPG_DSNPG_PWDPG_USER
此外,Database Migration Service 不使用
WHERE配置指令来限制要迁移的记录。- 创建旧版转换工作区,并上传 Ora2Pg 文件以转换 架构。
手动将转换后的架构应用于目标数据库。
创建 Ora2Pg 配置并创建工作区后, 您必须自行直接在目标 数据库上应用生成的代码。
迁移没有主键的表。
Database Migration Service 仅迁移具有主键的表。 如果您的源数据库包含没有主键的表, 您需要在应用转换后的架构后,在目标数据库的转换后的表中手动创建主键或唯一限制条件。展开即可下部分了解详情。
在目标数据库中添加主键限制条件
如需迁移没有主键的 Oracle 表,请执行以下操作:
- 使用 SQL 客户端连接到 Cloud SQL 目标实例。您可以使用以下方法:
-
psql客户端。您可以使用此方法连接 到实例专用 IP,但可能需要您创建 Compute Engine 虚拟机。 -
gcloud sql connect命令。此命令 仅适用于已启用公共 IP 地址 的 Cloud SQL 实例。
-
- 为表创建缺少的主键限制条件。如需详细了解主键,请参阅 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 会使用源 OracleROWID伪列中的相应数值填充该列。如需添加该列并将其设置为主键,请运行以下命令:
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);
- 使用 SQL 客户端连接到 Cloud SQL 目标实例。您可以使用以下方法:
后续步骤
使用旧版工作区执行转换工作流后,您可以继续执行标准迁移程序。请参阅 创建迁移作业。