使用 Striim 将 Oracle 数据库迁移到 Cloud SQL for PostgreSQL

Last reviewed 2021-06-28 UTC

在本教程中,您将使用 StriimOracle® Database Enterprise Edition 18c 或更高版本从本地环境或云环境迁移到 Google Cloud 的 Cloud SQL for PostgreSQL 实例上。本教程使用 Oracle 人力资源示例架构中的表。

本教程适用于计划使用 Striim 将 Oracle 数据库迁移或复制到 Cloud SQL for PostgreSQL 的企业数据库架构师、数据库工程师和数据所有者。您应该对如何使用 Striim 构建流水线有基本的了解。您还应该熟悉 Striim 网页界面、Striim 的主要概念,以及如何使用 Striim 的 Flow Designer 创建应用。

Striim 是 Google Cloud 数据库迁移技术合作伙伴。Striim 使用拖放式界面在数据库之间设置持续数据迁移,从而简化了在线迁移。迁移到 Google Cloud 后,Striim 会提供无干扰的流式提取平台,用于提取、转换和加载 (ETL),该平台部署效率高且易于迭代。如需构建迁移流水线,请在本教程中使用 Striim 的 Flow Designer

如果您不熟悉数据库迁移,请参阅 Cloud Next '19 中的这项技术讲座

架构

使用 Striim 进行数据库迁移涉及顺序数据移动的两个阶段:

  • 第 1 阶段:Oracle 数据库的一次性初始复制。
  • 第 2 阶段:此后使用变更数据捕获 (CDC) 持续复制在源数据库系统上提交的每项更改。

下图展示了一个基本的部署架构:

部署架构连接到 Oracle 数据库并将数据写入 Google Cloud 上的 Cloud SQL for PostgreSQL 实例。

此架构涉及在 Compute Engine 实例上运行 Striim 应用。它可连接到托管在本地或云端的 Oracle 数据库,并将数据写入 Google Cloud 上的 Cloud SQL for PostgreSQL 实例。

为避免 Striim 和 Cloud SQL 实例之间出现任何网络或连接问题,请对两个实例使用同一网络。您可以在 Compute Engine 实例上从 Google Cloud Marketplace 部署 Striim;如果您需要高可用性,也可以将 Striim 部署为集群

在本教程中,请从 Cloud Marketplace 进行部署。

从 Cloud Marketplace 部署 Striim 的优势在于,您可以使用其内置适配器连接到各种数据库和数据源。您可以使用 Flow Designer、Striim 的交互式拖放界面连接适配器,以形成非循环图。此图也称为 Striim 流水线或 Striim 应用

本教程中的迁移用例使用三个 Striim 适配器:

  • Database Reader:在初始加载阶段从 Oracle 源数据库读取数据。
  • Oracle Reader:在连续数据复制阶段使用 LogMiner 从 Oracle 源数据库读取数据。
  • Database Writer:在初始加载和连续数据复制期间将数据写入 Cloud SQL for PostgreSQL 数据库。

目标

  • 准备 Oracle 数据库,作为迁移或复制的源数据库。

  • 准备 Cloud SQL for PostgreSQL 数据库,作为迁移或复制的目标数据库。

  • 满足安装和运行 Striim 的前提条件。

  • 将 Oracle 数据库的架构转换为 PostgreSQL 中的相应架构。

  • 执行从 Oracle 数据库到 Cloud SQL for PostgreSQL 的初始加载。

  • 设置从 Oracle 数据库到 Cloud SQL for PostgreSQL 的持续复制。

费用

在本文档中,您将使用 Google Cloud 的以下收费组件:

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

Cloud Marketplace 中的 Striim 解决方案提供限时免费试用许可。试用期结束后,我们会向您的 Google Cloud 账号收取使用费。您还可以直接从 Striim 获取 Striim 许可,用于本地部署和 Compute Engine 虚拟机中。您可能还需要支付在 Google Cloud 外部运行 Oracle 数据库相关的费用。

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  5. 确保您的 Google Cloud 项目已启用结算功能

本教程假定您已具备以下各项:

  • 您要迁移的 Linux x86-64 的 Oracle Database Enterprise Edition 18c 或更高版本。
  • 运行已安装 Striim 的 CentOS 的 Compute Engine。您可以通过 Google Cloud Marketplace 解决方案部署 Striim。

准备 Oracle 数据库

以下部分讨论了您连接到 Oracle 数据库并使用 Striim 迁移时所需的配置更改。如需了解配置详情,请参阅基本 Oracle 配置任务

选择 Oracle CDC 的来源

虽然存在不同的 Oracle CDC 来源,但本教程使用 LogMiner。如需了解备用选项,请参阅备用 Oracle CDC 来源

准备 Oracle Database Enterprise Edition 18c(或更高版本)

如需准备 Oracle 数据库,请按照 Striim 文档页面上的以下步骤进行操作:

  1. 启用 Striim 的 archivelog
  2. 启用 Striim 补充日志数据。
  3. 启用 Striim 主键日志记录。
  4. 创建具有 Striim 的 LogMiner 权限的 Oracle 用户。

    如需运行这些步骤,无论您要迁移 CDB 还是可插入数据库 (PDB),都必须连接到容器数据库 (CDB)。 我们建议安装并使用 SQL*Plus 与 Oracle 数据库进行交互。

  5. 创建 Striim quiescemarker

    CDC 的 Striim 的 Oracle Reader 适配器需要一个表,以便在应用处于静默状态时存储元数据。如果您使用 LogMiner 作为 CDC 的来源(如本教程所示),则需要 quiquecemarker 表。按照步骤创建表时,您必须连接到 CDB。

  6. 在 Oracle 数据库和 Striim 实例之间建立网络连接。

    默认情况下,Oracle 监听器位于端口 1521 上。确保 Striim 实例的 IP 地址可以连接到 Oracle 监听器端口,并且没有防火墙规则阻止它。配置了 Oracle 监听器的端口位于 $ORACLE_HOME/network/admin/tnsnames.ora 文件中。

  7. 记下 Oracle 数据库的系统更改编号 (SCN)

    SCN 是一个内部时间戳,用于引用对数据库所做的更改。

    在 Oracle 数据库上,获取最早的 SCN:

    SELECT MIN(start_scn) FROM gv$transaction;
    

    复制此号码。您稍后将在连续复制流水线步骤中用到它。

准备 Striim 实例

如需了解 Striim 支持的操作系统,请参阅系统要求。如需将 Oracle Reader 与 LogMiner 搭配使用,请在 Striim 实例的 Java 类路径中放置 Oracle JDBC 驱动程序。在运行 Oracle Reader 适配器的每个 Striim 服务器上执行以下步骤:

  1. 登录您的 Oracle 账号,然后在本地机器上下载 ojdbc8.jar 文件
  2. 点击 ojdbc8.jar 文件的下载链接。

    • 如果您接受许可条款,请点击我已查看并接受 Oracle 许可协议下载文件。
  3. 在 Cloud Shell 中,创建一个 Cloud Storage 存储桶,并将 .jar 文件上传到该存储桶:

    gsutil mb -b on -l REGION gs://BUCKET_NAME
    gsutil cp PATH/ojdbc8.jar gs://BUCKET_NAME
    

    请替换以下内容:

    • REGION:要在其中创建 Cloud Storage 存储桶的区域
    • BUCKET_NAME:您要存储 ojdbc8.jar 文件的 Cloud Storage 存储桶的名称
    • PATH:您下载 ojdbc8.jar 文件的路径

    将文件保存到本地机器后,我们建议您将 .jar 文件上传到 Cloud Storage 存储桶,以便将其下载到任何实例。

  4. 使用 Striim 实例打开 SSH 会话,然后将 .jar 文件下载到 Striim 实例,并将其放置在 /opt/striim/lib 目录中:

    sudo su - striim gsutil cp gs://BUCKET_NAME/ojdbc8.jar /opt/striim/lib
    
  5. 验证 ojdbc8.jar 文件是否具有正确的文件权限:

     sudo ls -l /opt/striim/lib/ojdbc8.jar
    

    输出应如下所示:

    -rwxrwx--- striim striim

  6. (可选)如果 .jar 文件没有上述权限,请设置正确的权限:

    sudo chmod 770 /opt/striim/lib/ojdbc8.jar
    sudo chown striim /opt/striim/lib/ojdbc8.jar
    sudo chgrp striim /opt/striim/lib/ojdbc8.jar
    
  7. 停止并重启 Striim。

    进行任何配置更改(例如上述权限更改)后,您必须重启 Striim。

    • 如果您使用的是 CentOS 7 Linux 发行版,请停止 Striim:

      sudo systemctl stop striim-node
      sudo systemctl stop striim-dbms
      
    • 如果您使用的是 CentOS 7 Linux 发行版,请启动 Striim:

      sudo systemctl start striim-dbms
      sudo systemctl start striim-node
      

    如果您想详细了解如何针对不同的操作系统停止和重启 Striim,请参阅启动和停止 Striim

  8. 在 Striim 实例上安装 psql 客户端

    您将使用此客户端连接到 Cloud SQL 实例,并在本教程的后面部分创建架构。

准备 Cloud SQL for PostgreSQL 架构

当您将表数据从一个数据库复制或持续复制到另一个数据库时,Striim 通常需要包含具有正确架构的相应表的目标数据库。Google Cloud 没有用于准备架构的实用程序,但您可以使用 Striim 的架构转换实用程序ora2pg 等开源实用程序。

在初始加载期间维护外键

在初始加载阶段,请注意对外键的处理方式。外键在关系型数据库中的表之间建立关系。在目标数据库中无序创建和插入外键可能会破坏两个表之间的关系。如果两个数据库之间的完整性被破解,则可能会出现错误。因此,请务必在本部分后面的架构导出期间将所有外键声明输出到单独的文件中。

在 CDC 流水线中持续复制期间,源数据库事件会按照发生的顺序传播到目标数据库。如果您在来源上正确维护外键,则外键操作会按相同顺序从源数据库复制到目标数据库。

相比之下,初始加载流水线默认按字母顺序加载您的表。如果您未在初始加载之前停用外键,则会出现外键违规错误。如需在初始加载期间将数据从源数据库表复制到 Cloud SQL for PostgreSQL 上的目标表,您必须停用表的外键限制条件。否则,在复制过程中,可能会违反限制条件。

从 2021 年 6 月开始,Cloud SQL for PostgreSQL 不再支持停用外键限制条件的配置选项。

要处理外键限制条件,请执行以下操作:

  1. 在架构导出期间,将所有外键声明输出到单独的文件中。
  2. 在 Cloud SQL for PostgreSQL 数据库中创建表架构,无需外键限制条件。
  3. 完成初始数据复制。
  4. 对表应用外键限制条件。
  5. 创建持续复制流水线。

本教程提供了两种架构转换选项,以下部分将对此进行解释:

使用 Striim 的架构转换实用程序转换架构

使用 Striim 的架构转换实用程序准备 Cloud SQL for PostgreSQL,以将数据与目标架构集成,并创建反映源 Oracle 数据库的表。

Striim 架构转换工具会将以下源对象转换为等效的目标对象:

  • 主键
  • 数据类型
  • 唯一的限制条件
  • NOT NULL 限制条件
  • 外键

使用 Striim 的架构转换实用程序,您可以分析源数据库并生成 DDL 脚本以在目标数据库中创建等效架构。

我们建议您使用生成的 DDL 脚本在目标数据库中手动创建架构。最简单的方法是选择一部分表,导出架构,然后将架构导入目标 Cloud SQL for PostgreSQL 数据库。

以下示例演示了如何使用 Striim 的架构转换实用程序导入架构,为目标 Cloud SQL for PostgreSQL 数据库完成初始加载:

  1. 打开与 Striim 实例的 SSH 连接

  2. 转到 /opt/striim 目录:

    cd /opt/striim
    
  3. 列出所有参数:

    bin/schemaConversionUtility.sh --help
    
  4. 运行架构转换实用程序并包含适合您用例的标志:

    bin/schemaConversionUtility.sh \
    -s=oracle \
    -d=SOURCE_DATABASE_CONNECTION_URL \
    -u=SOURCE_DATABASE_USERNAME \
    -p=SOURCE_DATABASE_PASSWORD \
    -b=SOURCE_TABLES_TO_CONVERT \
    -t=postgres \
    -f=false
    

    请替换以下内容:

    • SOURCE_DATABASE_CONNECTION_URL:Oracle 数据库的连接网址,例如 "jdbc:oracle:thin:@12.123.123.12:1521/APPSPDB.WORLD""jdbc:oracle:thin:@12.123.123.12:1521:XE"
    • SOURCE_DATABASE_USERNAME:用于连接到 Oracle 数据库的 Oracle 用户名
    • SOURCE_DATABASE_PASSWORD:用于连接到 Oracle 数据库的 Oracle 密码
    • SOURCE_TABLES_TO_CONVERT:源数据库中用于转换架构的表名称

    请务必使用 -f=false 参数。此参数将外键声明导出到单独的文件。

    输出文件夹可能包含以下部分或全部文件。如需详细了解这些文件,请参阅 Striim 的架构转换实用程序文档

    输出文件名 说明
    converted_tables.sql 包含所有不需要强制转换的转换表
    converted_tables_with_striim_intelligence.sql 包含已进行一些强制转换而的已转换的所有表
    conversion_failed_tables.sql 包含尝试转换但未获取映射的表
    converted_foreignkey.sql 包含所有外键限制条件声明
    conversion_failed_foreignkey.sql 包含所有失败的外键转换
    conversion_report.txt 包含架构转换的详细报告

    在本教程中,您将使用 converted_tables.sql 文件在 Cloud SQL for PostgreSQL 数据库中创建等效表,而无需任何外键限制条件。初始复制后,可使用 converted_foreignkey.sql 文件应用外键限制条件。

使用 Ora2Pg 转换架构

将 Oracle 表架构转换为等效 PostgreSQL 架构的另一个选项是 Ora2Pg 实用程序。您可以在单独的 Google Cloud 虚拟机上安装此实用程序。

Ora2Pg 实用程序转换 Oracle 架构,并导出在 PostgreSQL 数据库中创建等效表所需的 DDL 语句。这些 DDL 语句在名为 output.sql 的输出文件中导出。

在架构导出期间,请在 Ora2Pg 配置文件中使用以下标记,将所有外键声明导出并保存到单独的文件中:

FILE_PER_FKEYS 1

默认情况下,系统会将外键导出到主输出文件 (output.sql)。 当启用 FILE_PER_FKEYS 标志 (1) 后,系统会将外键导出到名为 FKEYS_output.sql 的单独文件。

在本教程中,您将使用 output.sql 文件在 Cloud SQL for PostgreSQL 数据库中创建等效表,而无需任何外键限制条件。初始复制后,可使用 FKEY_output.sql 文件应用外键限制条件。

准备 Cloud SQL for PostgreSQL 实例

如需使 Striim 能够将数据写入 Cloud SQL for PostgreSQL 实例,您需要创建一个 Cloud SQL 实例。您还需要创建数据库表以及 Striim 向其写入数据的架构:

  1. 在 Cloud Shell 中,创建 Cloud SQL for PostgreSQL 实例。我们建议您将 Cloud SQL 配置为使用专用 IP 地址。使用 --network 参数配置此地址:

    $INSTANCE_NAME=INSTANCE_NAME
    
    gcloud beta sql instances create INSTANCE_NAME \
        --database-version=POSTGRES_12 \
        --network=NETWORK \
        --cpu=NUMBER_CPUS \
        --memory=MEMORY_SIZE \
        --region=REGION
    

    请替换以下内容:

    • INSTANCE_NAME:实例名称
    • NETWORK:您用于此实例的 VPC 网络的名称
    • NUMBER_CPUS:实例中的 vCPU 数量
    • MEMORY_SIZE:实例的内存量。例如,3072MiB 或 9GiB。如果您未指定单位,则系统会假定为 GiB。
    • REGION:您在其中创建了 Cloud Storage 存储桶的地区
  2. 在 Cloud SQL 实例上创建用户名和密码

    CLOUD_SQL_USERNAME=CLOUD_SQL_USERNAME
    
    gcloud sql users create $CLOUD_SQL_USERNAME \
      --instance=$INSTANCE_NAME \
      --password=CLOUD_SQL_PASSWORD
    

    请替换以下内容:

    • CLOUD_SQL_USERNAME:您的 Cloud SQL 实例的用户名
    • CLOUD_SQL_PASSWORD:Cloud SQL 用户名的密码

    此用户被授予 PostgreSQL 表的所有权。Striim 还会使用此用户的凭据连接到 Cloud SQL for PostgreSQL 数据库。

    架构转换步骤中导出的架构文件可能具有授予用户所有权的 DDL 语句,如以下示例所示:

    CREATE SCHEMA <SCHEMA_NAME>;
    ALTER SCHEMA <SCHEMA_NAME> OWNER TO <USER>;
    

    您可能需要将 SCHEMA_NAME 替换为 CLOUD_SQL_SCHEMA,将 USER 替换为之前创建的 CLOUD_SQL_USERNAME

  3. 创建 PostgreSQL 数据库

    CLOUD_SQL_DATABASE_NAME=CLOUD_SQL_DATABASE_NAME
    
    gcloud sql databases create $CLOUD_SQL_DATABASE_NAME \
      --instance=$INSTANCE_NAME
    

    请替换以下内容:

    • CLOUD_SQL_DATABASE_NAME:PostgreSQL 数据库名称
  4. 配置 Cloud SQL for PostgreSQL 数据库,以允许从 Striim 实例访问。连接方案取决于您是否将 Cloud SQL 实例配置为使用公共或专用 IP 地址。

    1. 如果您配置了公共 IP 地址,请将 Striim 的实例 IP 地址添加为 Cloud SQL 实例上的授权地址。以下屏幕截图显示了如何通过 Google Cloud Console 执行此操作:

      配置 Cloud SQL for PostgreSQL 数据库,以允许从 Striim 实例访问。

    2. 如果您配置了专用 IP 地址,则可用的连接方案取决于 Cloud SQL 实例和 Striim 实例是否位于同一 VPC 网络中。

      1. 如果您的 Striim 实例与 Cloud SQL 实例位于同一 VPC 网络中,则该 Striim 实例可以与 Cloud SQL 实例建立连接。

        以下屏幕截图显示 Cloud SQL 实例已与默认 VPC 网络相关联。如果还在默认 VPC 网络上创建了 Striim 实例,则该实例可以与 Cloud SQL 实例建立私密连接。

        Cloud SQL 实例与默认 VPC 网络相关联。

      2. 如果您的 Striim 实例与 Cloud SQL 实例位于不同的 VPC 网络上,请在 Striim 实例的 VPC 网络上配置专用服务访问通道

  5. 在 Cloud SQL for PostgreSQL 数据库中创建无外键限制条件的表架构。

    1. 如需在架构转换步骤中导出 output.sql,请使用 output.sql 文件创建架构。

    2. 如需在架构转换步骤中导出 converted_tables.sql,请使用 converted_tables.sql 文件创建架构。

      您可以使用任何与 Cloud SQL for PostgreSQL 实例连接的 PostgreSQL 客户端运行任一脚本。但是,我们建议您使用之前在 Striim 实例上安装的 PostgreSQL 客户端。

    3. 使用 Striim 实例打开 SSH 会话

    4. 创建架构:

      psql -h HOSTNAME -p CLOUD_SQL_PORT -d CLOUD_SQL_DATABASE_NAME -U CLOUD_SQL_USERNAME -f PATH_TO_MAIN_SQL_FILE
      

      请替换以下内容:

      • HOSTNAME:Cloud SQL 实例的 IP 地址
      • CLOUD_SQL_PORT:要连接的 Cloud SQL 实例的端口 - 默认情况下,此端口为 5432
      • PATH_TO_MAIN_SQL_FILE:Striim 实例上的主脚本路径

      例如:

      psql -h 12.123.123.123 -d testdb -U hr -p 5432 -f output.sql

  6. 验证表是否已创建:

    1. 连接到 Cloud SQL for PostgreSQL 数据库:

      psql -h HOSTNAME -p 5432 -d CLOUD_SQL_DATABASE_NAME -U
      CLOUD_SQL_USERNAME
      
    2. 列出此数据库中的表:

      \dt
      

      输出是上一步中创建的表架构转换脚本的表列表。

  7. 在 Cloud SQL for PostgreSQL 数据库上创建检查点表

    1. 连接到 Cloud SQL for PostgreSQL 数据库:

      psql -h HOSTNAME -p 5432 -d CLOUD_SQL_DATABASE_NAME -U
      CLOUD_SQL_USERNAME
      
    2. 创建表:

      CREATE TABLE chkpoint (
      id character varying(100) primary key,
      sourceposition bytea,
      pendingddl numeric(1),
      ddl text);
      

      Striim 需要此表在持续复制过程中维护检查点。

将 Oracle 数据库加载到 Cloud SQL for PostgreSQL 数据库

本部分介绍如何将 Oracle 数据库一次性初始复制到 Cloud SQL for PostgreSQL 数据库。

通过 Striim 与 Oracle 建立连接

按照在 Google Cloud 中运行 Striim 中的指导操作。对于初始加载,请使用 Striim Database Reader 适配器从 Striim 连接到 Oracle。您还可以使用 Striim 的 CDC 向导

  1. 在 Striim Database Reader 适配器中,转到来源,然后搜索并选择列表中的 Database

  2. Database 窗口中设置以下属性:

    • 名称:标识迁移流水线的此组件。
    • 适配器DatabaseReader
    • 连接网址:输入连接到 Oracle 数据库的唯一字符串:

      jdbc:oracle:thin:@HOSTNAME:ORACLE_PORT:SID
      

      jdbc:oracle:thin:@HOSTNAME:ORACLE_PORT/PDB_OR_CDB_SERVICE_NAME
      

      请替换以下内容:

      • ORACLE_PORT:Oracle 数据库端口(默认为 1521
      • SID:Oracle 数据库 SID
      • PDB_OR_CDB_SERVICE_NAME:Oracle PDB 或 CDB 服务名称:如果您的表位于 PDB 中,请使用 PDB_SERVICE_NAME;如果它们位于 CDB 中,请使用 CDB_SERVICE_NAME

      您可以在以下位置找到端口和服务名称:Oracle 实例上 $ORACLE_HOME/network/admin/tnsnames.oratnsnames.ora 文件。

    • 用户名密码:使用您在前提条件步骤中创建的 Oracle 用户(c##striim 用户)。Striim 使用此用户名和密码连接到您的 Oracle 数据库并读取表。

    • :对于 Oracle,Database Reader 还需要一个要复制的表名称的列表。此属性在显示可选属性下的“表格”字段中指定。此属性的格式如下:

      ORACLE_SCHEMA.ORACLE_TABLE_NAME
      

      请替换以下内容:

      • ORACLE_SCHEMA:Oracle 架构名称
      • ORACLE_TABLE_NAME:该架构中的 Oracle 表名称

      您还可以将多个表和具体化视图指定为以英文分号分隔的列表,或使用以下通配符:

      %:任何字符序列

      _:任何单个字符

      例如,HR.% 会读取人力资源架构中的所有表。至少有一个表必须与通配符匹配。否则,Database Reader 会失败,并显示以下错误:

      Could not find tables specified in the database

      • Quilce On IL Completion:将此字段切换为绿色,方法是在初始加载完成后将其滑动到右侧以暂停流水线。

      • 输出至:为此适配器的输出命名。使用区分大小写的字符串,不包含特殊字符或空格。

  3. 点击保存。适配器属性显示以下内容:

    Striim Database Reader Adapter 属性。

测试连接

现在您已从 Striim 连接到 Oracle,请测试连接。

  1. 点击已创建下拉列表以测试 Striim 与 Oracle 数据库的连接。

  2. 点击部署应用

  3. 选择此适配器的输出,然后点击预览,以在 Striim 从来源读取数据时实时显示该数据。

    Striim 界面中实时显示源数据。

  4. 点击已部署下拉列表,然后点击启动应用

  5. (可选)点击已部署下拉列表,然后点击取消部署应用以修复发生的任何错误。

  6. (可选)修复所有错误后,点击恢复应用以重启应用。

  7. 点击默认部署组。

  8. 验证已开启验证表映射选项,然后点击部署

    预览数据窗格和流水线状态将更改为 Quiesced

在本教程中,您已成功验证 Striim 能够与 Oracle 数据库建立连接并读取其中的数据。

将 Cloud SQL for PostgreSQL 数据库添加为目标

对于此迁移,您需要将数据写入 Cloud SQL for PostgreSQL 实例 Striim 提供了一种名为 Database Writer 的通用数据库写入器适配器,您可以使用它来进行迁移。

  1. 在 Striim Flow Designer 中,转到目标。搜索并从列表中选择 Cloud SQL Postgres
  2. Database Writer 拖动到流水线中。
  3. 设置以下属性:

    • 适配器DatabaseWriter

    • 连接网址:输入唯一字符串以与 Cloud SQL 实例建立连接:

      jdbc:postgresql://CLOUD_SQL_IP_ADDRESS:CLOUD_SQL_PORT/CLOUD_SQL_DATABASE_NAME?stringtype=unspecified
      

      请替换以下内容:

      • CLOUD_SQL_IP_ADDRESS:Cloud SQL 实例的 IP 地址

      例如:

      jdbc:postgresql://12.123.12.12:5432/postgres?stringtype=unspecified
      
    • 用户名密码:输入您之前创建的 Cloud SQL 用户名和密码。

    • :创建从 Oracle 数据库表名称到 Cloud SQL 表名称的映射。指定将哪个 Oracle 数据库表写入哪个 Cloud SQL 表。此映射采用以下格式:

      ORACLE_SCHEMA.ORACLE_TABLE_NAME,CLOUD_SQL_SCHEMA.CLOUD_SQL_TABLE_NAME
      

      请替换以下内容:

      • CLOUD_SQL_SCHEMA:PostgreSQL 架构名称
      • CLOUD_SQL_TABLE_NAME:PostgreSQL 表名称

      如需映射多个表,您可以在字段中使用通配符符号 (%),例如:

      HR.%,hr.%
      

      Database Writer 的必填字段已在以下屏幕截图中进行标记:Database Writer 的必填字段。

部署迁移流水线

迁移流水线准备就绪后,从 Striim Flow Designer 部署该流水线并启动该应用。您还可以实时预览正在复制的数据。使用监控报告跟踪复制的进度。如需跟踪进度,请选择应用进度图标。

点击“应用进度”图标 (Application Progress) 图标可查看数据库复制的进度。

  1. 在 Striim Flow Designer 中,部署迁移流水线。点击已创建下拉列表,然后点击 部署应用。初始加载完成后,流水线状态会更改为 Quiesced

  2. 点击取消部署应用以回滚部署。

  3. 通过检查行数验证数据加载是否成功:

    SELECT COUNT(*) FROM <TARGET CLOUD SQL TABLE>;
    

    您应该会看到非零输出。如为看到,则数据加载失败。

从 Oracle 数据库到 Cloud SQL for PostgreSQL 的初始数据加载是原子化的。整个数据加载成功或整个数据加载失败。如果初始加载失败,您必须再次加载数据

在 Cloud SQL for PostgreSQL 表上启用外键限制条件

初始加载完成后,在目标表上启用外键限制条件。将文件与您在架构转换期间创建的外键声明(FKEY_output.sqlconverted_foreignkey.sql)搭配使用。

  1. 在 Striim 中,打开 SSH 会话

  2. 创建表的外键限制条件:

    psql -h HOSTNAME -d CLOUD_SQL_DATABASE_NAME -U CLOUD_SQL_USERNAME -p
    CLOUD_SQL_PORT -f PATH_TO_FOREIGN_KEY_FILE
    

    请替换以下内容:

    • CLOUD_SQL_USERNAME:Cloud SQL for PostgreSQL 用户名
    • PATH_TO_FOREIGN_KEY_FILE:Striim 实例上具有外键限制条件的脚本路径

      例如:

      psql -h 12.123.123.123 -d testdb -U hr -p 5432 -f output.sql

将 Oracle 数据库持续复制到 Cloud SQL for PostgreSQL

完成初始数据加载后,创建单独的流水线以复制对 Oracle 数据库的更改。只要流水线保持运行状态,此流水线就会确保源数据库与目标数据库保持同步。

通过 Striim 与 Oracle 建立连接

对于持续复制,您可以使用 Striim Oracle Reader 适配器从 Striim 连接到 Oracle 数据库。此 Striim 适配器可以从 Oracle 读取 CDC 数据。

  1. 在 Striim Oracle Reader 适配器中,导航到来源
  2. 搜索 Oracle,然后从填充的列表中选择 Oracle CDC

  3. 设置以下属性:

    1. 连接网址

      HOSTNAME:ORACLE_PORT/SID
      

      HOSTNAME:ORACLE_PORT/CDB_SERVICE_NAME
      

      请替换以下内容:

      • CDB_SERVICE_NAME:Oracle 的 CDB 服务名称

      连接网址是用于连接到 Oracle 数据库的唯一字符串。与用于初始加载的 Database Reader 适配器不同,无论数据库表在 PDB 还是 CDB 中,您都可以使用 CDB 服务名称。

      例如:12.123.123.12:1521/ORCLCDB.WORLD

    2. 用户名/密码:使用您在前提条件步骤中创建的 Oracle 用户名 (c##striimuser)。

      此 Oracle 用户必须具有读取表的权限。

    3. :您还需要一个要复制的表名称的列表。系统会根据表在 CDB 还是 PDB 中,按以下格式指定名称。

      对于 CDB 表:

      ORACLE_SCHEMA.ORACLE_TABLE_NAME
      

      对于 PDB 表:

      PDB_NAME.ORACLE_SCHEMA.ORACLE_TABLE_NAME
      

      请替换以下内容:

      • PDB_NAME:Oracle PDB 名称

      此命令会复制您的 CDB 或 PDB 表。您可以在位于 Oracle 实例的 $ORACLE_HOME/network/admin/tnsnames.ora 上的 tnsnames.ora 文件中找到 PDB_NAME

      请注意,PDB_NAMEPDB_SERVICE_NAME 是不同的。您在本部分前面使用了 PDB_SERVICE_NAME。查看 tnsnames.ora 文件以获取 PDB 名称:

      sudo su - oracle // Login as oracle user
      cat  ORACLE_HOME/network/admin/tnsnames.ora
      

      以下是 tnsnames.ora 文件中的 PDB_NAME (APPSPDB) 示例:

        APPSPDB =
          (DESCRIPTION =
            (ADDRESS_LIST =
              (ADDRESS = (PROTOCOL = TCP) (HOST = orainst) (PORT = 1521))
            )
            (CONNECT_DATA =
              (SERVICE NAME = APPSPDB.WORLD)
            )
          )
      

      如需以列表形式指定多个表和具体化视图,请使用英文分号或通配符分隔表名称或视图名称。至少有一个表必须与通配符匹配;否则 Oracle Reader 会失败,并显示 Could not find tables specified in the database 错误。

    4. 启动 SCN:对于持续流水线,您需要提供 Oracle 数据库 SCN。Striim 需要该服务才能开始复制所有事务。输入您之前生成的 SCN 值。

      1. 支持 PDB 和 CDB:您可以使用 CDB 或 PDB;展开显示可选属性,然后将开关切换到右侧。

      2. 静默标记表:使用您之前创建的表名。

        以下屏幕截图概述了 Oracle Reader 适配器的必填字段:

        Oracle Reader 适配器的必填字段。

  4. 测试连接:点击测试连接。测试数据库连接需要连接网址、用户名和密码。如果 Striim 成功建立连接,系统会显示一个绿色对勾标记。

  5. 测试 Striim 读取 Oracle 数据库表的能力:

    1. 在 Oracle Reader 适配器中,选择部署应用
    2. 选择默认部署组。
    3. 点击部署
  6. 点击此适配器的波次(输出)图标。显示的眼睛(预览版)图标用于当 Striim 从来源读取数据时实时预览数据。

  7. 点击已部署下拉列表中的启动应用

    如果出现任何错误,请从同一下拉列表中选择取消部署应用并修复错误。修复错误后,点击恢复应用以重启应用。

    流水线启动时,流水线状态将更新为正在运行。对源表所做的任何新更改都会显示在预览窗口中。由于 Oracle Reader 适配器使用 CDC,因此预览数据窗格中显示的唯一表更改是在应用启动后发生的更改。

    “数据预览”标签页实时显示源表的新更改。

验证从 Oracle 读取 CDC 数据的能力

要测试适配器能否读取新更改,请按以下说明操作:

  1. 使用 SQL 语句在 Oracle 源表中插入新事务。
  2. 验证新事务是否显示在 Oracle Reader 适配器的预览数据标签页中。
  3. 停止应用,然后点击取消部署。现在,您可以进行下一步。

到目前为止,您尚未向流水线添加目标适配器。除非您添加目标适配器,否则系统不会复制任何数据。在下一部分中,您将添加目标适配器。

将 Cloud SQL for PostgreSQL 数据库添加为目标

要将数据写入 Cloud SQL for PostgreSQL 数据库,您需要向流水线添加 Database Writer 适配器。对于持续复制流水线,请使用初始加载流水线时使用的适配器。

  1. 在 Striim Flow Designer 中,转到目标,搜索并从列表中选择 Cloud SQL Postgres
  2. Database Writer 拖动到流水线中。
  3. 设置以下属性:

    • 适配器DatabaseWriter.

    • 连接网址:输入与 Cloud SQL 实例建立连接的连接网址:

    jdbc:postgresql://CLOUD_SQL_IP_ADDRESS:CLOUD_SQL_PORT/CLOUD_SQL_DATABASE_NAME?stringtype=unspecified
    

    例如:

    jdbc:postgresql://12.123.12.12:5432/postgres?stringtype=unspecified
    
    • 用户名密码:输入您之前创建的 Cloud SQL 用户名和密码。

    • :创建从 Oracle 数据库表名称到 Cloud SQL 表名称的映射。指定将哪个 Oracle 数据库表写入哪个 Cloud SQL 表。此映射采用以下格式:

    ORACLE_SCHEMA.ORACLE_TABLE_NAME,CLOUD_SQL_SCHEMA.CLOUD_SQL_TABLE_NAME
    

    如需映射多个表,您可以在字段中使用通配符符号 (%)。例如:

    HR.%,hr.%
    

    除了这些属性之外,您还需要为持续复制流水线设置以下属性:

  4. 点击显示可选属性

  5. 可忽略的异常代码字段选择以下值:

    23505,NO_OP_UPDATE,NO_OP_DELETE
    

    由于您从历史点启动 CDC 流水线,因此可能存在重复项。Striim 使用先前可忽略的异常代码属性对目标执行去重处理。如需详细了解异常代码,请参阅下表:

    异常代码 详细信息
    23505 重复的主键值违反唯一限制条件
    NO_OP_UPDATE 无法更新目标中的行(通常是因为没有相应的主键)
    NO_OP_DELETE 无法删除目标中的行(通常是因为没有相应的主键)
  6. 检查点表字段中输入 chkpoint。Striim 使用此表来存储与持续复制流水线的检查点关联的元数据。

启用恢复和加密

在部署 CDC 流水线之前,我们强烈建议您启用恢复功能。如果 Striim 应用或虚拟机发生故障,启用恢复功能有助于确保 Striim 可以继续处理。此步骤还有助于确保精确处理语义。这些语义跟踪源数据库上的最后一个已知良好读取检查点以及目标数据库上的最后一个已知良好写入检查点。如果应用或虚拟机发生故障,Striim 会协调这两个检查点,以确保没有数据丢失或重复。恢复不适用于初始加载应用。

启用恢复

  1. 在 Striim Flow Designer 中,点击 Configuration 图标,然后选择 App Settings
  2. 点击恢复间隔
  3. 输入 5,然后从下拉列表中选择第二个
  4. 点击启用加密。Striim 会对在 Striim 服务器之间或从转发代理向 Striim 服务器移动数据的所有流进行加密。

开启加密

  • 在 Striim Flow Designer 中,点击 Configuration 图标,选择 App Settings,然后在 Encryption 下,选中相应复选框。

如需详细了解 Striim 的恢复方法,请参阅 Striim 网站

启用日志记录异常

在部署持续复制流水线之前,我们建议您在 Striim 中启用异常存储。作为 CDC 应用的一部分,初始加载应用可能会编写多个重复项。Striim 应用会忽略这些错误,将其写入存储区(供您查看和处理)并继续处理。

  1. 在 Striim Flow Designer 中,选择异常图标。该图标显示两个曲线箭头之间的感叹号。
  2. 点击开启

部署流水线。

流水线准备就绪后,您可以进行部署并启动应用。您还可以实时预览复制的数据,并查看监控报告。当流水线成功启动持续复制时,流水线状态会更改为正在运行

  1. 在 Oracle Reader 适配器中,选择部署应用
  2. 选择默认部署组。
  3. 点击部署

只要您希望 Oracle 表与 Cloud SQL 表保持同步,就可以保持流水线运行。

您已完成该教程。如果您有兴趣了解其他 Oracle CDC 来源,请参阅以下部分。

备用 Oracle CDC 来源

除了 LogMiner 之外,Striim 的适配器也可以从 XStreamOracle Golden Gate 跟踪记录文件中读取 Oracle 数据库。

如需从 XStream 读取数据,请使用 Striim 的 Oracle Reader 适配器。XStream 可能具有更好的性能,但它需要 Golden Gate 许可并且仅支持 Oracle Database 11.2.0.4

如需读取 Golden Gate 跟踪记录文件,请使用 Striim 的 GG Trail Reader 适配器

下表介绍了 LogMiner 和 XStream 之间的差异:

Oracle 数据库
CDC 功能
LogMiner
是否支持?
XStream Out
是否支持?
读取数据定义语言 (DDL)、ROLLBACK 和未提交的事务
使用 DATA()BEFORE() 函数
使用 QUIESCE(请参阅控制台命令
接收 CDC 事件 批量接收 Oracle Reader 的 FetchSize 属性定义的事件 持续接收更改数据事件
从包含不支持类型的表中读取 无法读取该表格 读取支持的类型的列

清理

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

  1. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

后续步骤

Oracle、Java 和 MySQL 是 Oracle 和/或其关联公司的注册商标。其他名称可能是其各自所有者的商标。