使用转换工作区

本文档介绍了如何在 Database Migration Service 中使用不同的转换工作区。

将转换工作区与内置编辑器搭配使用

转换工作区可帮助您将源数据库中的架构和对象转换为与目标数据库兼容的格式。在该工作区中,您可以查看、修改和应用整体转换结构,但不会更改源数据库中的任何数据。

转换源架构和代码

设置工作区后,Database Migration Service 会对源数据库架构和代码对象执行初始拉取,然后您选择要转换的对象(您稍后可以添加更多对象)。这些对象现在显示在 Oracle 标签页中。Cloud SQL for PostgreSQL 草稿面板会显示 Database Migration Service 生成的最终 PostgreSQL 架构和代码。

此时,Database Migration Service 会显示预期的转换后对象,而不是目标实例上的实际对象。

  1. 在 Google Cloud 控制台中,前往转化工作区

    前往“转换工作区”

  2. 从可用转换工作区列表中,选择要使用的转换工作区。

    系统随即会打开转换工作区编辑器。

  3. 可选:上传 Ora2Pg 配置文件,为生成的 SQL 提供其他映射:

    1. 依次点击修改配置 > 使用配置文件自定义映射

    2. Ora2Pg 配置文件框中,点击浏览,然后使用系统文件选择器选择您的配置文件。

    3. 依次点击添加文件 > 生成

  4. 可选:如果您已转换架构和代码,但想在再次运行转换之前手动调整生成的 SQL,请执行以下步骤:

    1. Oracle 面板中,选择要调整生成的 SQL 的对象。

    2. 前往 SQL 标签页,然后检查语句。

    3. 根据您的场景需要调整脚本,然后点击保存

  5. 完成所有调整后,点击转换来源

  6. 在确认对话框中,点击转换

从来源架构中移除对象

从来源架构中移除对象,以将其从转换中排除。 如有需要,您可以稍后添加已移除的对象

  1. 在 Google Cloud 控制台中,前往转化工作区

    前往“转换工作区”

  2. 从可用转换工作区列表中,选择要使用的转换工作区。

    系统随即会打开转换工作区编辑器。

  3. Oracle 标签页中,找到要移除的对象,然后依次选择 更多 > 移除

  4. 移除对象确认对话框中,点击移除

  5. 再次转换来源,以反映 Cloud SQL for PostgreSQL 草稿标签页中的更新。

将对象添加到来源架构中

您可以添加之前从来源架构中移除的对象,以将其添加到转换中。

  1. 在 Google Cloud 控制台中,前往转化工作区

    前往“转换工作区”

  2. 从可用转换工作区列表中,选择要使用的转换工作区。

    系统随即会打开转换工作区编辑器。

  3. Oracle 标签页中,点击 Add objects(添加对象)。

  4. 添加对象部分中,使用来源列表选择要添加到来源架构中的所有实体。

    您可以使用过滤字段来减少显示的对象数量。 请参阅在“来源架构”视图中过滤对象

  5. 点击添加对象

  6. 再次转换来源,以反映 Cloud SQL for PostgreSQL 草稿标签页中的更新。

拉取来源架构和代码快照

您可以随时将架构和代码从源数据库拉取到转换工作区。拉取来源后,您可以添加新的对象或更新转化中的现有对象。

拉取更新的数据库架构和代码不会重置转换工作区中 Ora2Pg 配置文件中存在的任何其他映射,除非您明确选择移除自定义映射。

此外,拉取源代码不会替换对代码对象的 SQL 更改。您可以直接在对象级别重置这些更改。

  1. 在 Google Cloud 控制台中,前往转化工作区

    前往“转换工作区”

  2. 依次点击修改配置 > 再次拉取来源架构快照

  3. 在对话框中:

    1. (可选)选择重置自定义映射以移除现有自定义映射和 DDL 修改。
    2. 点击拉取架构快照

    Database Migration Service 会从源数据库中拉取新的快照。操作完成后,请再次转换来源

查看转换结果

执行源代码转换后,您可以在工作区编辑器区域查看转换结果以及每个转换对象可能存在的问题。您还可以使用 Google Cloud CLI 将所有结果和问题批量保存到文本文件中。

控制台

  1. 在 Google Cloud 控制台中,前往转化工作区

    前往“转换工作区”

  2. 点击要使用的转化工作区的显示名称。

    系统随即会打开转换工作区编辑器。

  3. 选择 Oracle 标签页,然后在树状视图表格中找到要查看转化结果的对象。

  4. 选择对象。使用 SQL转换问题标签页查看转化。

gcloud

借助 Google Cloud CLI,您可以将所有转化结果或问题输出到终端。将输出重定向到文件,以便更方便地批量审核对象。

获取转化结果列表

gcloud CLI 会在终端中以数据定义语言 (DDL) 语句的形式显示转换结果。如需将转换结果保存到文件,请执行以下命令:

  gcloud database-migration conversion-workspaces describe-ddls \
  CONVERSION_WORKSPACE_ID \
  --region=REGION_ID \
  > OUTPUT_FILE_PATH

您需要进行如下替换:

  • CONVERSION_WORKSPACE_ID 与转换工作区标识符。 如需了解如何检索转换工作区标识符,请参阅查看转换工作区详情
  • REGION_ID 替换为转换工作区所在区域的名称。
  • OUTPUT_FILE_PATH 替换为您要将输出保存到的文本文件的路径。

    示例:

    gcloud database-migration conversion-workspaces describe-issues \
    my-conversion-workspace \
    --region=us-central1 \
    > ./my-conversion-issues.txt
    

    结果:

    架构转换结果以文本格式保存,其中第一行显示 DDLs,后续行则包含 SQL 语句:

    DDLs
    CREATE SCHEMA IF NOT EXISTS "SCHEMA1";
    ALTER TABLE "SCHEMA1"."EMPLOYEES" ADD CONSTRAINT PK_ID PRIMARY KEY ("ID");
    CREATE OR REPLACE FUNCTION mockschema.func_test_datatype(str1 VARCHAR(65000))
      RETURNS DECIMAL
      LANGUAGE plpgsql
      AS $$
        DECLARE
          str2 VARCHAR(100);
        BEGIN
          SELECT
              employees.first_name
            INTO STRICT
              STR2
            FROM
              mockschema.employees
            WHERE employees.employee_id = CAST(FUNC_TEST_DATATYPE.str1 as DECIMAL)
          ;
          RAISE NOTICE '%', concat('Input : ', FUNC_TEST_DATATYPE.str1, ' Output : ', str2);
          RETURN 0;
        END;
      $$;
    CREATE OR REPLACE PROCEDURE greetings AS BEGIN dbms_output.put_line('Hello World!'); END;
    CREATE SYNONYM TABLE "SCHEMA1"."SYNONYM1" ON "SCHEMA1"."EMPLOYEES";
    CREATE OR REPLACE VIEW "SCHEMA1"."VIEW1" AS SELECT * FROM JOBS;
    

获取转化问题列表

如需将转换问题保存到文件中,请执行以下命令:

  gcloud database-migration conversion-workspaces describe-issues \
  CONVERSION_WORKSPACE_ID \
  --region=REGION_ID \
  > OUTPUT_FILE_PATH

您需要进行如下替换:

  • CONVERSION_WORKSPACE_ID 与转换工作区标识符。 如需了解如何检索转换工作区标识符,请参阅查看转换工作区详情
  • REGION_ID 替换为转换工作区的所在区域的名称。
  • OUTPUT_FILE_PATH 替换为您要将输出保存到的文本文件的路径。

示例:

  gcloud database-migration conversion-workspaces describe-issues \
  my-conversion-workspace \
  --region=us-central1 \
  > ./my-conversion-issues.txt

结果:

您的工作区中包含的所有转化问题均以文本格式保存,其中第一行包含列标题,后续每行包含一个单独的转化问题:

  PARENT   NAME               ENTITY_TYPE       ISSUE_TYPE  ISSUE_SEVERITY  ISSUE_CODE  ISSUE_MESSAGE
  SCHEMA1  EMPLOYEES          TABLE             DDL         ERROR           500         unable to parse DDL.
  SCHEMA1  EMPLOYEES          TABLE             CONVERT     WARNING         206         no conversion done.
  SCHEMA1  STORED_PROCEDURE1  STORED_PROCEDURE  DDL         ERROR           500         invalid DDL.
  SCHEMA1  SYNONYM1           SYNONYM           CONVERT     WARNING         206         synonym warning message.

解决转换问题

Database Migration Service 可能无法自动转换您的整个源代码。

对于大多数 Oracle 对象,您可以直接在 Database Migration Service 中使用转换编辑器来调整生成的 SQL。对于其他对象,您可能需要直接在源数据库中更改对象,然后再次拉取源快照

如需查看 Database Migration Service 支持直接在转换工作区中修改的对象的完整列表,请参阅可修改的 Oracle 对象

如需解决支持实时编辑的对象遇到的转换问题,请执行以下操作:

  1. 查看转化结果并找出可能存在的问题。

    您可以使用 Google Cloud 控制台查看各个对象,也可以使用 gcloud CLI 批量查看所有对象。

  2. Cloud SQL for PostgreSQL 草稿标签页中,使用 SQL 编辑器更新生成的代码。

  3. 测试应用,验证 Database Migration Service 能否将您的代码正确应用于目标数据库。

如需解决因工作区编辑器不支持的对象而遇到的转换问题,请执行以下任一操作:

  • 更新来源:

    1. 直接在源数据库中更新架构和代码。
    2. 更新后的源代码拉取到 Database Migration Service。
    3. 再次转换来源,然后检查问题是否仍然存在。
  • 使用 Ora2Pg 配置工具提供其他映射:

    1. 配置 Ora2Pg 并为有故障的对象创建映射文件。
    2. 将配置文件添加到工作区。请参阅修改转换工作区
  • 请尝试从“来源”标签页中移除对象,然后重新转换架构。

  • 直接在目标实例上修改代码。请确保您不会更新可能会影响映射的对象。

测试应用于目标的过程

在将架构应用于目标数据库之前,您可以先执行不会影响目标 Cloud SQL 实例的测试应用。测试架构应用有助于您主动检查可能存在的问题。

  1. 在 Google Cloud 控制台中,前往转化工作区

    前往“转换工作区”

  2. 点击要使用的转化工作区的显示名称。

    系统随即会打开转换工作区编辑器。

  3. 依次点击应用到目标平台 > 测试(推荐)

    系统会显示用于将架构应用于目标数据库的向导。

  4. 定义目标位置部分,选择指向目标数据库的连接配置文件。

  5. 点击定义并继续

  6. 选择对象和测试应用部分,选择要针对目标数据库测试的数据库实体的架构。

    您可以使用过滤字段来减少显示的对象数量。 请参阅在“来源架构”视图中过滤对象

  7. 点击测试应用

    您可以在 Cloud SQL for PostgreSQL 草稿标签页中查看申请状态。

将架构应用于目标

当您希望在目标数据库中使用的架构根据您的要求和映射进行转换后,您可以将结果应用于目标数据库。

  1. 在 Google Cloud 控制台中,前往转化工作区

    前往“转换工作区”

  2. 点击要使用的转化工作区的显示名称。

    系统随即会打开转换工作区编辑器。

  3. 依次点击应用到目标位置 > 应用

    系统随即会显示用于将架构应用于目标数据库的向导。

  4. 定义目标位置部分,选择指向目标数据库的连接配置文件。

  5. 点击定义并继续

  6. 查看对象并将转换应用到目标位置部分,选择您要在目标数据库中创建的数据库实体的架构。

    您可以使用过滤字段来减少显示的对象数量。 请参阅在“来源架构”视图中过滤对象

  7. 点击应用到目标

    您可以在 Cloud SQL for PostgreSQL 草稿标签页中查看申请状态。

在转化编辑器中创建迁移作业

您可以直接在转化数据分析工具界面中创建使用转换工作区的迁移作业。

  1. 在 Google Cloud 控制台中,前往转化工作区

    前往“转换工作区”

  2. 点击要使用的转化工作区的显示名称。

    系统随即会打开转换工作区编辑器。

  3. 点击创建迁移作业

  4. 继续执行创建迁移作业中所述的标准迁移作业步骤。

在“来源架构”视图中过滤对象

数据库架构通常包含数千个对象,因此很难对转换工作进行分区。将架构快照中的对象添加到源架构视图时,您可以使用过滤条件来限制显示的对象数量。借助过滤条件,您可以更精细地添加对象,并专注于转换架构的部分子集。

在向来源架构视图添加对象时,请使用过滤视图:

  1. 过滤条件字段中,使用以下过滤方法之一:

    • 媒体资源列表中,选择以下自动建议的选项之一:

      • 对象名称,用于按名称(例如 ADMIN)过滤对象。
      • 对象类型,用于按多种类型(例如函数)过滤对象。
      • 转化状态,用于按转化状态(例如需要执行操作无问题)过滤对象。

      您可以将过滤条件属性与逻辑运算符结合使用。

    • 输入您的查询。例如:type=table

      如需详细了解过滤语法,请参阅支持的过滤语法

  2. 选择要添加到来源架构视图中的对象。

支持的过滤语法

您可以使用基本自由文本搜索按名称过滤对象,也可以使用专用的 type 属性。这两种方法都支持 Google API 正式过滤规范,这意味着您可以将字面量与通配符以及逻辑运算符和比较运算符搭配使用。

使用自由文本按名称过滤对象。此方法区分大小写,并且支持通配符。

示例

*JOB* 查询使用通配符搜索包含 JOB 子字符串的实体。过滤后的视图会返回一些表和一个存储过程:

按名称过滤对象的示例结果的屏幕截图。
使用 type 属性进行过滤

您可以按 Database Migration Service 支持的所有标准类型过滤对象。

type 属性支持以下字面量与等式 (=) 和不等式 (!=) 运算符搭配使用:databaseschematablecolumnindexsequencestored_procedurefunctionviewsynonymmaterialized_viewudtconstraintdatabase_packagetriggerevent_trigger

示例

type=table 过滤条件仅会返回架构中存在的表:

按类型属性过滤对象的示例结果屏幕截图。
组合过滤条件

您可以将多个条件与逻辑运算符结合使用,指定多个条件。

例如,若要仅搜索名称包含 JOBEMPLOYEE 子字符串的表,请使用以下查询:

  type=table AND (*JOB* OR *EMPLOYEE*)

因此,过滤器会显示所有匹配的表格:

按类型和名称属性组合过滤对象的示例结果的屏幕截图。

使用旧版转换工作区

旧版转换工作区是只读工作区,用于将 Ora2Pg 配置文件与连接配置文件配对。

转换源架构

对于旧版工作区,您可以直接在源数据库上使用 Ora2Pg 迁移工具转换架构。架构转换是在 Database Migration Service 之外进行管理的。请参阅为架构转换做好准备

在您创建旧版转换工作区时,Database Migration Service 会运行源架构转换。如果您想更新映射,请使用更新后的配置文件重新创建旧版工作区

应用于目标

创建 Ora2Pg 配置文件并创建工作区后,您必须直接在目标数据库上自行应用生成的代码。如果您需要更改转换,请调整 Ora2Pg 配置文件,然后使用新设置重新创建旧版工作区