任务 1:为 Oracle GoldenGate 配置源数据库和目标数据库
应使用以下建议配置源和目标 Oracle GoldenGate 数据库。
执行以下步骤以完成此任务:
-
步骤 1.1 - 数据库配置
-
步骤 1.2 - 创建数据库复制管理员用户
-
步骤 1.3 - 创建数据库服务
步骤 1.1 - 数据库配置
应使用以下建议配置源和目标 Oracle GoldenGate 数据库:
| 配置 | 范围 | 示例 |
|---|---|---|
| 启用归档日志模式 | 源和目标 | SQL> ARCHIVE LOG LIST Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 110 Next log sequence to archive 113 Current log sequence 113 |
启用 FORCE LOGGING |
源和目标 | ALTER DATABASE FORCE LOGGING; |
ENABLE_GOLDENGATE_REPLICATION |
源、目标和备用数据库 | ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION=TRUE SCOPE=BOTH SID='*'; |
| 补充日志记录 | 来源 复制反转时在目标上需要 |
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; |
| 为复制的对象添加方案或表级别日志记录 | 来源 复制反转时在目标上需要 |
ADD SCHEMATRANDATA 或 ADD TRANDATA |
STREAMS_POOL_SIZE |
来源 复制反转时在目标上需要 |
例如,在具有 2 个提取和 2 个集成复制的数据库中:
ALTER SYSTEM SET STREAMS_POOL_SIZE=5G SCOPE=BOTH SID='*'; |
有关准备 Oracle GoldenGate 数据库的步骤,请参阅为 Oracle GoldenGate 准备数据库。
步骤 1.2 - 创建数据库复制管理员用户
源数据库和目标数据库需要创建 GoldenGate 管理员用户,并按如下方式分配相应的权限:
-
对于多租户容器数据库 (Container Database,CDB):
-
源数据库 GoldenGate Extract 必须配置为使用 c## 连接到根容器数据库中的用户
-
目标数据库,每个可插入数据库 (pluggable database,PDB) 需要一个单独的 GoldenGate 管理员用户。
-
有关在 Oracle Multitenant 数据库中创建 GoldenGate 管理员的更多详细信息,请参阅在多租户容器数据库中配置 Oracle GoldenGate 。
-
-
有关非 CDB 数据库,请参阅为 Oracle 准备数据库用户和权限
作为源数据库系统上的 oracle OS 用户,执行以下 SQL 说明为 Oracle GoldenGate 创建数据库用户并分配所需的权限:
[opc@exadb1_node1 ~]$ sudo su - oracle
[oracle@exadb1_node1 ~]$ source dbName.env
[oracle@exadb1_node1 ~]$ sqlplus / as sysdba
# Source CDB
SQL>
alter session set container=cdb$root;
create user c##ggadmin identified by "ggadmin_password" container=all default tablespace USERS temporary tablespace temp;
alter user c##ggadmin quota unlimited on users;
grant set container to c##ggadmin container=all;
grant alter system to c##ggadmin container=all;
grant create session to c##ggadmin container=all;
grant alter any table to c##ggadmin container=all;
grant resource to c##ggadmin container=all;
exec dbms_goldengate_auth.grant_admin_privilege('c##ggadmin',container=>'all');
# Source PDB
SQL>
alter session set container=pdbName;
create user ggadmin identified by "ggadmin_password" container=current;
grant create session to ggadmin container=current;
grant alter any table to ggadmin container=current;
grant resource to ggadmin container=current;
exec dbms_goldengate_auth.grant_admin_privilege('ggadmin');
作为目标系统上的 oracle OS 用户,执行以下 SQL 说明为 Oracle GoldenGate 创建数据库用户并分配所需的权限:
[opc@exadb2_node1 ~]$ sudo su - oracle
[oracle@exadb2_node1 ~]$ source dbName.env
[oracle@exadb2_node1 ~]$ sqlplus / as sysdba
# Target PDB
SQL>
alter session set container=pdbName;
create user ggadmin identified by "ggadmin_password" container=current;
grant alter system to ggadmin container=current;
grant create session to ggadmin container=current;
grant alter any table to ggadmin container=current;
grant resource to ggadmin container=current;
grant dv_goldengate_admin, dv_goldengate_redo_access to ggadmin container=current;
exec dbms_goldengate_auth.grant_admin_privilege('ggadmin');
步骤 1.3 - 创建数据库服务
如果源数据库和目标数据库使用 Oracle Data Guard 在 Oracle RAC 集群上运行建议的配置,则必须创建基于角色的服务,以允许提取或复制进程连接到正确的 Data Guard 主数据库实例。
使用源多租户数据库时,根容器数据库 (root container database,CDB) 和包含要复制的方案的可插入数据库 (pluggable database,PDB) 需要单独的服务。对于目标多租户数据库,需要为 PDB 提供单个服务。
以主数据库系统上的 oracle OS 用户身份,使用 dbaascli 查找 CDB 和 PDB 名称,如下所示:
[opc@exadb1_node1 ~]$ sudo su - oracle
[oracle@exadb1_node1 ~]$ source dbName.env
[oracle@exadb1_node1 ~]$ dbaascli database getDetails
--dbname dbName |egrep 'dbName|pdbName'
"dbName" : "dbName",
"pdbName" : "pdbName",
以主数据库系统和备用数据库系统上的 oracle OS 用户身份,使用以下命令创建和启动 CDB 数据库服务:
[opc@exadb1_node1 ~]$ sudo su - oracle
[oracle@exadb1_node1 ~]$ source dbName.env
[oracle@exadb1_node1 ~]$ srvctl add service -db $ORACLE_UNQNAME
-service dbName.ggoraclevcn.com -preferred ORACLE_SID1
-available ORACLE_SID2 -role PRIMARY
以主数据库系统和备用数据库系统上的 oracle OS 用户身份,使用以下命令创建和启动 PDB 数据库服务:
[oracle@exadb1_node1 ~]$ srvctl add service -db $ORACLE_UNQNAME
-service dbName.pdbName.ggoraclevcn.com -preferred ORACLE_SID1
-available ORACLE_SID2 -pdb pdbName -role PRIMARY
以主数据库系统和备用数据库系统上的 oracle OS 用户身份,启动并验证服务是否正在运行,如下所示:
[oracle@exadb1_node1 ~]$ srvctl start service -db $ORACLE_UNQNAME -role
[oracle@exadb1_node1 ~]$ srvctl status service -d $ORACLE_UNQNAME |grep goldengate
Service dbName.ggoraclevcn.com is running on instance(s) SID1
Service dbName.pdbName.ggoraclevcn.com is running on instance(s) SID1
注:在源和目标数据库系统中重复步骤 1.3。