设置 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 经典架构枢纽
-
在 Oracle GoldenGate 目录中创建子目录。
在 Amazon EC2 命令行 shell 中,启动
ggsci
(Oracle GoldenGate 命令解释器)。CREATE SUBDIRS
命令在/gg
目录下为参数、报告和检查点文件创建子目录。prompt$ cd /gg prompt$ ./ggsci GGSCI> CREATE SUBDIRS
-
配置
mgr.prm
文件。以下示例向
$GGHOME/dirprm/mgr.prm
文件中添加行。PORT 8199 PurgeOldExtracts ./dirdat/*, UseCheckpoints, MINKEEPDAYS 5
-
启动管理器。
以下示例启动
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:向用户账户授予对源数据库的权限
在此任务中,您将为源数据库上的数据库用户授予必要的账户权限。
向账户授予对源数据库的权限
-
使用 SQL 命令
grant
和rdsadmin.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; -
授予用户账户作为 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:授予账户对目标数据库的权限
在此任务中,您将为目标数据库上的数据库用户授予必要的账户权限。
授予账户对目标数据库的权限
-
向目标数据库上的 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;
-
授予用户账户作为 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)) )