Amazon Relational Database Service
用户指南 (API Version 2014-10-31)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

将 Oracle GoldenGate 与 Amazon RDS 结合使用

Oracle GoldenGate 用于收集、复制和管理数据库之间的事务性数据。它是一个基于日志的更改数据捕获 (CDC) 和复制软件包,与 Oracle 数据库结合使用,适用于联机事务处理 (OLTP) 系统。GoldenGate 从源数据库创建包含最近更改的数据的跟踪文件,然后将这些文件推送到目标数据库。您可以将 Oracle GoldenGate 与 Amazon RDS 结合使用,实现主动/主动数据库复制、零停机时间迁移和升级、灾难恢复、数据保护以及区域内和跨区域复制。

以下是在 Amazon RDS 上使用 Oracle GoldenGate 时的要点:

  • 您负责设置和维护 Amazon RDS 上的 GoldenGate。

  • 在所有 AWS 区域中,Amazon RDS 在自带许可模型下支持 Oracle GoldenGate。有关更多信息,请参阅 Oracle 许可

  • Amazon RDS 支持 Oracle GoldenGate for Oracle Database Standard Edition Two (SE2)、Standard Edition One (SE1)、Standard Edition (SE) 和 Enterprise Edition (EE)。

  • Amazon RDS 支持 Oracle GoldenGate 的数据库版本 11.2.0.4、12.1.0.1 或 12.1.0.2。

  • Amazon RDS 支持 Oracle GoldenGate 版本 11.2.1 和 12.1.x。

  • Amazon RDS 支持使用 Oracle GoldenGate 跨 Oracle 数据库进行迁移和复制。我们既不支持也不阻止客户跨异构数据库进行迁移或复制。

  • 您可以在使用 Oracle 透明数据加密 (TDE) 的 Amazon RDS Oracle 数据库实例上使用 GoldenGate。因为跟踪文件默认不加密保存数据,所以应使用 sqlnet.ora 加密对源实例、GoldenGate 枢纽和目标实例之间的管道进行加密。有关 sqlnet.ora 加密的更多信息,请参阅 Oracle 文档

  • 目前不支持 Oracle GoldenGate DDL。

概述

与 Amazon RDS 结合使用的 Oracle GoldenGate 架构包含三个分离的模块。源数据库可以是本地 Oracle 数据库、EC2 实例上的 Oracle 数据库或 Amazon RDS 数据库实例上的 Oracle 数据库。接下来,将事务信息从源数据库移动到目标数据库的 GoldenGate 枢纽可以是安装了 Oracle Database 11.2.0.4 和 GoldenGate 11.2.1 的 EC2 实例,或者是本地 Oracle 安装。您可以有多个 EC2 枢纽;如果要将 GoldenGate 用于跨区域复制,则建议使用两个枢纽。最后,目标数据库可位于 Amazon RDS 数据库实例上、位于 EC2 实例上或位于一个本地位置。

Amazon RDS 上的 Oracle GoldenGate 支持以下常见方案:

方案 1:本地 Oracle 源数据库和本地 Oracle GoldenGate 枢纽,用于向目标 Amazon RDS 数据库实例提供数据.

 使用 Amazon RDS 的 GoldenGate 配置 0

方案 2:充当源数据库的本地 Oracle 数据库,连接至向目标 Amazon RDS 数据库实例提供数据的 Amazon EC2 实例枢纽。

 使用 Amazon RDS 的 GoldenGate 配置 1

方案 3:Amazon RDS 数据库实例上充当源数据库的 Oracle 数据库,连接至向目标 Amazon RDS 数据库实例提供数据的 Amazon EC2 实例枢纽。

 使用 Amazon RDS 的 GoldenGate 配置 2

方案 4:Amazon EC2 实例上充当源数据库的 Oracle 数据库,连接至向目标 Amazon RDS 数据库实例提供数据的 Amazon EC2 实例枢纽。

 使用 Amazon RDS 的 GoldenGate 配置 3

方案 5:Amazon RDS 数据库实例 (连接至同一区域中的 Amazon EC2 实例枢纽) 上的 Oracle 数据库,连接至另一区域中的 Amazon EC2 实例枢纽以作为第二个 EC2 实例枢纽向同一区域中的目标 Amazon RDS 数据库实例提供数据。

 使用 Amazon RDS 的 GoldenGate 配置 4

注意

影响在本地环境中运行 Oracle GoldenGate 的任何问题也会影响在 AWS 上运行 GoldenGate。强烈建议对 GoldenGate 枢纽进行监控,以确保在发生故障转移的情况下恢复 EXTRACTREPLICAT。由于 GoldenGate 枢纽在 Amazon EC2 实例上运行,因此 Amazon RDS 不管理 GoldenGate 枢纽,且无法确保其运行。

您可以使用 GoldenGate 和 Amazon RDS 升级至 Oracle 的主要版本。例如,可以使用 GoldenGate 和 Amazon RDS 从 Oracle 版本 8 本地数据库升级至在 Amazon RDS 数据库实例上运行版本 11.2.0.4 的 Oracle 数据库。

要设置使用 Amazon RDS 的 Oracle GoldenGate,请在 EC2 实例上配置枢纽,然后配置源数据库和目标数据库。下面的步骤说明了如何设置 GoldenGate 以便与 Amazon RDS 结合使用。以下部分详细说明了每个步骤:

在 EC2 上设置 Oracle GoldenGate 枢纽

需要多个步骤在 Amazon EC2 实例上创建 Oracle GoldenGate 枢纽。首先,使用完整安装的 Oracle DBMS 11g 版本 11.2.0.4 创建一个 EC2 实例。该 EC2 实例必须还安装有 Oracle GoldenGate 11.2.1 软件,并且必须安装了 Oracle 修补程序 13328193。有关安装 GoldenGate 的多信息,请参阅 Oracle 文档

因为作为 GoldenGate 枢纽的 EC2 实例会将源数据库的事务信息存储到跟踪文件中并进行处理,您必须具有足够的已分配存储空间来存储这些跟踪文件。必须还要确保 EC2 实例具有足够处理能力以管理所处理的数据量,并具有足够内存以便在将事务信息写入跟踪文件之前对其进行存储。

下列任务将在 Amazon EC2 实例上设置 GoldenGate 枢纽;本节详细说明了每个任务。这些任务包括:

  • 向 tnsname.ora 文件添加别名

  • 创建 GoldenGate 子目录

  • 更新 GLOBALS 参数文件

  • 配置 mgr.prm 文件并启动管理器

向 tnsname.ora 文件添加以下条目以创建别名。有关 tnsname.ora 文件的更多信息,请参阅 Oracle 文档

Copy
$ cat /example/config/tnsnames.ora TEST= (DESCRIPTION=  (ENABLE=BROKEN) (ADDRESS_LIST=    (ADDRESS=(PROTOCOL=TCP)(HOST=goldengate-test.abcdef12345.us-west-2.rds.amazonaws.com)(PORT=8200)) ) (CONNECT_DATA=    (SID=ORCL) ) )

接下来,使用 EC2 命令行 shell 和 ggsci (GoldenGate 命令解释器),在 GoldenGate 目录中创建子目录。子目录是在 gg 目录下创建的,包含用于放置参数、报告和检查点文件的目录。

Copy
prompt$ cd /gg prompt$ ./ggsci GGSCI> CREATE SUBDIRS

使用 EC2 命令行 shell 创建 GLOBALS 参数文件。在 GLOBALS 参数文件中定义的参数会影响所有 GoldenGate 进程。下面的示例将创建必要的文件:

Copy
prompt$ cd $GGHOME prompt$ vi GLOBALS CheckpointTable oggadm1.oggchkpt

设置和配置 GoldenGate 枢纽的最后一步是配置管理器。向 mgr.prm 文件添加下列行,然后使用 ggsci 启动管理器

Copy
PORT 8199 PurgeOldExtracts ./dirdat/*, UseCheckpoints, MINKEEPDAYS 5
Copy
GGSCI> start mgr

完成这些步骤后,GoldenGate 枢纽就随时可以使用了。接下来,设置源数据库和目标数据库。

设置源数据库以便与 Amazon RDS 上的 GoldenGate 结合使用

如果源数据库运行的是 11.2.0.4 版或更高版本,则设置与 GoldenGate 结合使用的源数据库需要完成三个任务:

  • compatible 参数设置为 11.2.0.4 或更高版本。

  • ENABLE_GOLDENGATE_REPLICATION 参数设置为 True。此参数用于开启源数据库的补充日志记录。如果源数据库位于 Amazon RDS 数据库实例上,则必须为数据库实例分配一个参数组,且将其 ENABLE_GOLDENGATE_REPLICATION 参数设置为 true。有关 ENABLE_GOLDENGATE_REPLICATION 参数的更多信息,请参阅 Oracle 文档

  • 为 GoldenGate 源数据库设置存档重做日志的保留期。

  • 在源数据库上创建 GoldenGate 用户账户。

  • 为 GoldenGate 用户授予必要特权。

源数据库必须已将 compatible 参数设置为 11.2.0.4 或更高版本。如果将 Amazon RDS 数据库实例上的 Oracle 数据库用作源数据库,则您必须具有一个与该数据库实例关联的参数组,且其 compatible 参数设置为 11.2.0.4 或更高版本。如果更改了与数据库实例关联的参数组中的 compatible 参数,则需要执行一次实例重启。可以使用以下 Amazon RDS CLI 命令来创建新参数组并设置 compatible 参数。请注意,您必须将新参数组与源数据库实例进行关联:

针对 Linux、OS X 或 Unix:

Copy
aws rds create-db-parameter-group \ --db-parameter-group-name example-goldengate \ --description "Parameters to allow GoldenGate" \ --db-parameter-group-family oracle-ee-11.2 aws rds modify-db-parameter-group \ --db-parameter-group-name example-goldengate \ --parameters "ParameterName=compatible, ParameterValue=11.2.0.4, ApplyMethod=pending-reboot" aws rds modify-db-instance \ --db-instance-identifier example-test \ --db-parameter-group-name example-goldengate \ --apply-immediately aws rds reboot-db-instance \ --db-instance-identifier example-test

对于 Windows:

Copy
aws rds create-db-parameter-group ^ --db-parameter-group-name example-goldengate ^ --description "Parameters to allow GoldenGate" ^ --db-parameter-group-family oracle-ee-11.2 aws rds modify-db-parameter-group ^ --db-parameter-group-name example-goldengate ^ --parameters "ParameterName=compatible, ParameterValue=11.2.0.4, ApplyMethod=pending-reboot" aws rds modify-db-instance ^ --db-instance-identifier example-test ^ --db-parameter-group-name example-goldengate ^ --apply-immediately aws rds reboot-db-instance ^ --db-instance-identifier example-test

始终保留带有 compatible 参数的参数组。如果从数据库快照还原实例,则必须对还原的实例进行修改,以使用具有匹配或更大 compatible 参数值的参数组。还原操作结束之后,应尽快进行这种修改,并且需要重启实例。

设置为 TrueENABLE_GOLDENGATE_REPLICATION 参数会开启源数据库的补充日志记录,并配置所需的 GoldenGate 权限。如果源数据库位于 Amazon RDS 数据库实例上,则必须为数据库实例分配一个参数组,且将其 ENABLE_GOLDENGATE_REPLICATION 参数设置为 true。有关 ENABLE_GOLDENGATE_REPLICATION 参数的更多信息,请参阅 Oracle 文档

源数据库还必须保留存档重做日志。例如,下面的命令将存档重做日志的保留期设置为 24 小时:

Copy
exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',24);

日志保留持续时间是以小时为单位指定的。为了 Oracle GoldenGate 能够根据需要从源实例恢复日志,持续时间应超过源实例的任何可能的停机时间或者与源实例之间的任何可能的通信/联网问题的持续时间。所需的绝对最小值是将日志保留一 (1) 小时。

日志保留设置过小会导致以下消息:

Copy
ERROR OGG-02028 Failed to attach to logmining server OGG$<extract_name> error 26927 - ORA-26927: altering an outbound server with a remote capture is not allowed.

由于这些日志保留在数据库实例上,因此您需要确保实例上有足够的存储量来容纳日志文件。要查看过去“X”小时内使用了多少空间,请使用以下查询,并将“X”替换为小时数。

Copy
select sum(blocks * block_size) bytes from v$archived_log where next_time>=sysdate-X/24 and dest_id=1;

GoldenGate 作为数据库用户运行,并且必须具有相应数据库特权才能访问源数据库的重做和存档日志,因此,您必须在源数据库上创建 GoldenGate 用户账户。有关 GoldenGate 用户账户权限的更多信息,请参阅 Oracle 文档中的第 4 节、第 4.4 节和表 4.1。

下列语句将创建名为 oggadm1 的用户账户:

Copy
CREATE tablespace administrator; CREATE USER oggadm1  IDENTIFIED BY "XXXXXX"   default tablespace ADMINISTRATOR temporary tablespace TEMP;

最后,向该 GoldenGate 用户账户授予必要特权。下列语句向名为 oggadm1 的用户授予特权:

Copy
grant create session, alter session to oggadm1; grant resource to oggadm1; grant select any dictionary to oggadm1; grant flashback any table to oggadm1; grant select any table to oggadm1; grant select_catalog_role to <RDS instance master username> with admin option; exec RDSADMIN.RDSADMIN_UTIL.GRANT_SYS_OBJECT ('DBA_CLUSTERS', 'OGGADM1'); grant execute on dbms_flashback to oggadm1; grant select on SYS.v_$database to oggadm1; grant alter any table to oggadm1; EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE (grantee=>'OGGADM1', privilege_type=>'capture', grant_select_privileges=>true, do_grants=>TRUE);

设置目标数据库以便与 Amazon RDS 上的 GoldenGate 结合使用

以下任务设置了与 GoldenGate 一起使用的目标数据库实例:

  • compatible 参数设置为 11.2.0.4 或更高版本

  • 将 ENABLE_GOLDENGATE_REPLICATION 参数设置为 True。如果目标数据库位于某个 Amazon RDS 数据库实例上,则必须为该数据库实例分配一个参数组,并将其 ENABLE_GOLDENGATE_REPLICATION 参数设置为 true。有关 ENABLE_GOLDENGATE_REPLICATION 参数的更多信息,请参阅 Oracle 文档

  • 创建并管理目标数据库上的 GoldenGate 用户账户

  • 为 GoldenGate 用户授予必要特权

GoldenGate 作为数据库用户运行,并且必须具有相应数据库特权,因此,您必须在目标数据库上创建 GoldenGate 用户账户。下列语句将创建名为 oggadm1 的用户:

Copy
create tablespace administrator; create tablespace administrator_idx; CREATE USER oggadm1  IDENTIFIED BY "XXXXXX" default tablespace ADMINISTRATOR temporary tablespace TEMP; alter user oggadm1 quota unlimited on ADMINISTRATOR; alter user oggadm1 quota unlimited on ADMINISTRATOR_IDX;

最后,向该 GoldenGate 用户账户授予必要特权。下列语句向名为 oggadm1 的用户授予特权:

Copy
grant create session        to oggadm1; grant alter session         to oggadm1; grant CREATE CLUSTER        to oggadm1; grant CREATE INDEXTYPE      to oggadm1; grant CREATE OPERATOR       to oggadm1; grant CREATE PROCEDURE      to oggadm1; grant CREATE SEQUENCE       to oggadm1; grant CREATE TABLE          to oggadm1; grant CREATE TRIGGER        to oggadm1; grant CREATE TYPE           to oggadm1; grant select any dictionary to oggadm1; grant create any table      to oggadm1; grant alter any table       to oggadm1; grant lock any table        to oggadm1; grant select any table      to oggadm1; grant insert any table      to oggadm1; grant update any table      to oggadm1; grant delete any table      to oggadm1; EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE (grantee=>'OGGADM1',privilege_type=>'apply', grant_select_privileges=>true, do_grants=>TRUE);

使用 Oracle GoldenGate 的 EXTRACT 和 REPLICAT 实用工具

Oracle GoldenGate 实用工具 EXTRACTREPLICAT 相结合,可使用跟踪文件并通过增量事务复制来保持源数据库与目标数据库同步。源数据库上发生的所有更改会由 EXTRACT 自动检测,进行格式设置,然后传输至本地或 EC2 实例枢纽的 GoldenGate 上的跟踪文件。初始加载完成后,由 REPLICAT 实用工具从这些文件读取数据并复制到目标数据库。

运行 Oracle GoldenGate 的 EXTRACT 实用工具

EXTRACT 实用工具可对源数据库的数据进行检索、转换并输出至跟踪文件。EXTRACT 将事务详细信息排队至内存或临时磁盘存储。将事务提交到源数据库后,EXTRACT 将所有事务详细信息刷新至跟踪文件,以便路由至本地 GoldenGate 本地或 EC2 实例枢纽,然后路由至目标数据库。

下列任务将启用并启动 EXTRACT 实用工具:

  • 在 GoldenGate 枢纽 (本地或 EC2 实例) 上配置 EXTRACT 参数文件。下面的列表显示了一个示例 EXTRACT 参数文件。

    Copy
    EXTRACT EABC SETENV (ORACLE_SID=ORCL) SETENV (NLSLANG=AL32UTF8)   USERID oggadm1@TEST, PASSWORD XXXXXX EXTTRAIL /path/to/goldengate/dirdat/ab   IGNOREREPLICATES GETAPPLOPS TRANLOGOPTIONS EXCLUDEUSER OGGADM1   TABLE EXAMPLE.TABLE;
  • 在 GoldenGate 枢纽上,启动 GoldenGate 命令行界面 (ggsci)。登录到源数据库。下面的示例演示了登录格式:

    Copy
    dblogin userid <user>@<db tnsname>
  • 添加数据库的检查点表:

    Copy
    add checkpointtable
  • 添加 transdata 为数据库表开启补充日志记录:

    Copy
    add trandata <user>.<table>

    或者,您可以添加 transdata 为数据库中的所有表开启补充日志记录:

    Copy
    add trandata <user>.*
  • 使用 ggsci 命令行以及下列命令,启用 EXTRACT 实用工具:

    Copy
    add extract <extract name> tranlog, INTEGRATED tranlog, begin now add exttrail <path-to-trail-from-the param-file> extract <extractname-from-paramfile>, MEGABYTES Xm
  • 向数据库注册 EXTRACT 实用工具,以便不删除存档日志。这样,您就可以在必要时恢复未提交的旧事务。要向数据库注册 EXTRACT 实用工具,请使用下面的命令:

    Copy
    register EXTRACT <extract process name>, DATABASE
  • 要启动 EXTRACT 实用工具,请使用下面的命令:

    Copy
    start <extract process name>

运行 Oracle GoldenGate 的 REPLICAT 实用工具

REPLICAT 实用工具用于将跟踪文件中的事务信息“推送”至目标数据库。

下列任务将启用并启动 REPLICAT 实用工具:

  • 在 GoldenGate 枢纽 (本地或 EC2 实例) 上配置 REPLICAT 参数文件。下面的列表显示了一个示例 REPLICAT 参数文件。

    Copy
    REPLICAT RABC SETENV (ORACLE_SID=ORCL) SETENV (NLSLANG=AL32UTF8)   USERID oggadm1@TARGET, password XXXXXX   ASSUMETARGETDEFS MAP EXAMPLE.TABLE, TARGET EXAMPLE.TABLE;
  • 启动 GoldenGate 命令行界面 (ggsci)。登录到目标数据库。下面的示例演示了登录格式:

    Copy
    dblogin userid <user>@<db tnsname>
  • 使用 ggsci 命令行添加检查点表。请注意,所指示的用户应是 GoldenGate 用户账户,而不是目标表架构所有者。下面的示例将创建一个名为 gg_checkpoint 的检查点表。

    Copy
    add checkpointtable <user>.gg_checkpoint 
  • 要启用 REPLICAT 实用工具,请使用下面的命令:

    Copy
    add replicat <replicat name> EXTTRAIL <extract trail file> CHECKPOINTTABLE <user>.gg_checkpoint 
  • 要启动 REPLICAT 实用工具,请使用下面的命令:

    Copy
    start <replicat name>

排查 Oracle GoldenGate 与 Amazon RDS 结合使用时出现的问题

本节说明 GoldenGate 与 Amazon RDS 结合使用时的最常见问题。

日志保留

必须已启用日志保留。如果未启用,或者保留值太小,则会显示下列消息:

Copy
2014-03-06 06:17:27 ERROR OGG-00446 error 2 (No such file or directory) opening redo log /rdsdbdata/db/GGTEST3_A/onlinelog/o1_mf_2_9k4bp1n6_.log for sequence 1306Not able to establish initial position for begin time 2014-03-06 06:16:55.

GoldenGate 似乎配置正确,但复制不起作用

对于预先存在的表,需要告知 GoldenGate 该表应通过哪一个 SCN 运行。请执行以下步骤来修复此问题:

  • 启动 GoldenGate 命令行界面 (ggsci)。登录到源数据库。下面的示例演示了登录格式:

    Copy
    dblogin userid <user>@<db tnsname>
  • 使用 ggsci 命令行为 EXTRACT 过程设置起始 SCN。以下示例为提取过程将 SCN 设置为 223274:

    Copy
    ALTER EXTRACT <extract process name> SCN 223274 start <extract process name>
  • 登录到目标数据库。下面的示例演示了登录格式:

    Copy
    dblogin userid <user>@<db tnsname>
  • 使用 ggsci 命令行为 REPLICAT 过程设置起始 SCN。以下示例为 REPLICAT 将 SCN 设置为 223274:

    Copy
    start <replicat process name> atcsn 223274