设置 Oracle GoldenGate - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

设置 Oracle GoldenGate

要使用 Amazon RDS 设置 Oracle GoldenGate,请在 Amazon EC2 实例上配置枢纽,然后配置源数据库和目标数据库。以下各节举例说明了如何设置 Oracle GoldenGate 以便与 Amazon RDS for Oracle 结合使用。

在 Amazon EC2 上设置 Oracle GoldenGate 枢纽

要在 Amazon EC2 实例上创建 Oracle GoldenGate 枢纽,首先应使用 Oracle RDBMS 的完整客户端安装创建 Amazon EC2 实例。Amazon EC2 实例也必须已安装 Oracle GoldenGate 软件。Oracle GoldenGate 软件版本取决于源和目标数据库版本。有关安装 Oracle GoldenGate 的更多信息,请参阅 Oracle GoldenGate 文档

用作 Oracle GoldenGate 枢纽的 Amazon EC2 实例会处理来自源数据库的事务信息并将这些信息存储到跟踪记录文件中。要支持此过程,请确保满足以下要求:

  • 您为跟踪记录文件分配了足够的存储空间。

  • Amazon EC2 实例有足够的处理能力来管理数据量。

  • EC2 实例在写入跟踪文件之前,有足够的内存来存储事务信息。

在 Amazon EC2 实例上建立 Oracle GoldenGate 经典架构枢纽
  1. 在 Oracle GoldenGate 目录中创建子目录。

    在 Amazon EC2 命令行 shell 中,启动 ggsci(Oracle GoldenGate 命令解释器)。CREATE SUBDIRS 命令在 /gg 目录下为参数、报告和检查点文件创建子目录。

    prompt$ cd /gg prompt$ ./ggsci GGSCI> CREATE SUBDIRS
  2. 配置 mgr.prm 文件。

    以下示例向 $GGHOME/dirprm/mgr.prm 文件中添加行。

    PORT 8199 PurgeOldExtracts ./dirdat/*, UseCheckpoints, MINKEEPDAYS 5
  3. 启动管理器。

    以下示例启动 ggsci 并运行 start mgr 命令。

    GGSCI> start mgr

Oracle GoldenGate 枢纽现已就绪,可供使用。

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

完成以下任务,设置源数据库以便与 Oracle GoldenGate 结合使用:

步骤 1:在源数据库上开启补充日志记录

要启用最低数据库级别的补充日志记录,请运行以下 PL/SQL 过程:

EXEC rdsadmin.rdsadmin_util.alter_supplemental_logging(p_action => 'ADD')

步骤 2:将 ENABLE_GOLDENGATE_REPLICATION 初始化参数设置为 true

ENABLE_GOLDENGATE_REPLICATION 初始化参数设置为 true 时,它允许数据库服务支持逻辑复制。如果源数据库位于 Amazon RDS 数据库实例上,请确保为数据库实例分配一个参数组,且将 ENABLE_GOLDENGATE_REPLICATION 初始化参数设置为 true。有关 ENABLE_GOLDENGATE_REPLICATION 初始化参数的更多信息,请参阅 Oracle Database 文档

步骤 3:在源数据库上设置日志保留期

确保将源数据库配置为保留存档重做日志。请考虑以下准则:

  • 以小时为单位指定日志保留的持续时间。最小值为一小时。

  • 设置持续时间以超过源数据库实例的任何可能的停机时间、任何可能的通信时间以及源实例的任何可能的联网问题期间。指定这样的持续时间后,可允许 Oracle GoldenGate 根据需要从源实例恢复日志。

  • 确保您的实例上有足够的文件存储空间。

例如,将存档重做日志的保留期设置为 24 小时。

EXEC rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',24)

如果未启用日志保留,或者保留值太小,则将收到类似以下内容的错误消息。

2022-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 1306 Not able to establish initial position for begin time 2022-03-06 06:16:55.

由于您的数据库实例会保留存档的重做日志,因此请确保您有足够的空间存放这些文件。要查看过去 num_hours 小时内使用了多少空间,请使用以下查询,并将 num_hours 替换为小时数。

SELECT SUM(BLOCKS * BLOCK_SIZE) BYTES FROM V$ARCHIVED_LOG WHERE NEXT_TIME>=SYSDATE-num_hours/24 AND DEST_ID=1;

步骤 4:在源数据库上创建 Oracle GoldenGate 用户账户。

Oracle GoldenGate 作为数据库用户运行,并且需要相应数据库权限才能访问源数据库的重做和存档的重做日志。要提供这些权限,请在源数据库上创建用户账户。有关 Oracle GoldenGate 用户账户权限的更多信息,请参阅 Oracle 文档

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

CREATE TABLESPACE administrator; CREATE USER oggadm1  IDENTIFIED BY "password" DEFAULT TABLESPACE ADMINISTRATOR TEMPORARY TABLESPACE TEMP; ALTER USER oggadm1 QUOTA UNLIMITED ON administrator;
注意

作为安全最佳实践,请指定除此处所示提示以外的密码。

步骤 5:向用户账户授予对源数据库的权限

在此任务中,您将为源数据库上的数据库用户授予必要的账户权限。

向账户授予对源数据库的权限
  1. 使用 SQL 命令 grantrdsadmin.rdsadmin_util 过程 grant_sys_object 向 Oracle GoldenGate 用户账户授予必要权限。下列语句向名为 oggadm1 的用户授予权限。

    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_master_user_name 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;
  2. 授予用户账户作为 Oracle GoldenGate 管理员所需的权限。运行以下 PL/SQL 程序。

    EXEC rdsadmin.rdsadmin_dbms_goldengate_auth.grant_admin_privilege ( grantee => 'OGGADM1', privilege_type => 'capture', grant_select_privileges => true, do_grants => TRUE);

    要撤消权限,请使用同一个程序包中的 revoke_admin_privilege 过程。

步骤 6:为源数据库添加 TNS 别名

将以下条目添加到 Oracle 主目录中的 $ORACLE_HOME/network/admin/tnsnames.ora,以供 EXTRACT 进程使用。有关 tnsnames.ora 文件的更多信息,请参阅 Oracle 文档

OGGSOURCE= (DESCRIPTION= (ENABLE=BROKEN) (ADDRESS_LIST= (ADDRESS=(PROTOCOL=TCP)(HOST=goldengate-source.abcdef12345.us-west-2.rds.amazonaws.com)(PORT=8200))) (CONNECT_DATA=(SERVICE_NAME=ORCL)) )

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

在本任务中,您将设置一个目标数据库实例以与 Oracle GoldenGate 结合使用。

步骤 1:将 ENABLE_GOLDENGATE_REPLICATION 初始化参数设置为 true

ENABLE_GOLDENGATE_REPLICATION 初始化参数设置为 true 时,它允许数据库服务支持逻辑复制。如果源数据库位于 Amazon RDS 数据库实例上,请确保为数据库实例分配一个参数组,且将 ENABLE_GOLDENGATE_REPLICATION 初始化参数设置为 true。有关 ENABLE_GOLDENGATE_REPLICATION 初始化参数的更多信息,请参阅 Oracle Database 文档

步骤 2:在目标数据库上创建 Oracle GoldenGate 用户账户

Oracle GoldenGate 以数据库用户身份运行,并且需要相应的数据库权限。为了确保它具备这些权限,请在目标数据库上创建用户帐户。

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

CREATE TABLESPSACE administrator; CREATE USER oggadm1  IDENTIFIED BY "password" DEFAULT TABLESPACE administrator TEMPORARY TABLESPACE temp; ALTER USER oggadm1 QUOTA UNLIMITED ON administrator;
注意

作为安全最佳实践,请指定除此处所示提示以外的密码。

步骤 3:授予账户对目标数据库的权限

在此任务中,您将为目标数据库上的数据库用户授予必要的账户权限。

授予账户对目标数据库的权限
  1. 向目标数据库上的 Oracle GoldenGate 用户账户授予必要权限。在以下示例中,您向 oggadm1 授予权限。

    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;
  2. 授予用户账户作为 Oracle GoldenGate 管理员所需的权限。运行以下 PL/SQL 程序。

    EXEC rdsadmin.rdsadmin_dbms_goldengate_auth.grant_admin_privilege ( grantee => 'OGGADM1', privilege_type => 'apply', grant_select_privileges => true, do_grants => TRUE);

    要撤消权限,请使用同一个程序包中的 revoke_admin_privilege 过程。

步骤 4:为目标数据库添加 TNS 别名

将以下条目添加到 Oracle 主目录中的 $ORACLE_HOME/network/admin/tnsnames.ora,以供 REPLICAT 进程使用。对于 Oracle 多租户数据库,请确保 TNS 别名指向 PDB 的服务名称。有关 tnsnames.ora 文件的更多信息,请参阅 Oracle 文档

OGGTARGET= (DESCRIPTION= (ENABLE=BROKEN) (ADDRESS_LIST= (ADDRESS=(PROTOCOL=TCP)(HOST=goldengate-target.abcdef12345.us-west-2.rds.amazonaws.com)(PORT=8200))) (CONNECT_DATA=(SERVICE_NAME=ORCL)) )