Goldengate Microservices — Downstream Capture Configuration
A. IMPLEMENTATION STEPS
- Force Logging must be enabled on source
- Create user C##GGS_ADMIN19C on source, downstream and target database
- Configure log_archive_Dest_n on source to the downstream
- Create standby redo logs on downstream
- Create credential store and add the credentials to source, downstream and target database
- Setup replication
B. PREPARE DOWNSTREAM DATABASE
Enable goldengate replication on downstream and set streams pool size
SQL> alter system set enable_goldengate_replication=TRUE;
SQL> alter system set streams_pool_size=64M;C. CREATE GOLDENGATE ADMIN USER
SQL> CREATE TABLESPACE OGG_TBS
DATAFILE '/u01/app/oracle/oradata/MSADS/oggtbs01.dbf' SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE 1G
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO; 2 3 4 5
Tablespace created.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 MASDSPDB1 READ WRITE NO
SQL> alter session set container=MASDSPDB1;
Session altered.
SQL> CREATE TABLESPACE OGG_TBS
DATAFILE '/u01/app/oracle/oradata/MSADS/masdspdb1/oggtbs01.dbf' SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE 1G
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO; 2 3 4 5
Tablespace created.
SQL>
ON CDB
SQL> CREATE USER C##OGGADMIN IDENTIFIED BY Welcome1 DEFAULT TABLESPACE OGG_TBS;
SQL> exec dbms_goldengate_auth.grant_admin_privilege('C##OGGADMIN',container=>'ALL');
GRANT SELECT ON V_$DATABASE TO C##OGGADMIN;
grant dba to C##OGGADMIN;
exec dbms_goldengate_auth.grant_admin_privilege('C##OGGADMIN');
grant flashback any table to C##OGGADMIN;
SQL>D. CONFIGURE LOG_ARCHIVE_DEST_N on Source Database
Add archive log dest for its local archives:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=USE_RECOVERY_FILE_DEST VALID_FOR=(ONLINE_LOGFILE,PRIMARY_ROLE)' scope=both;
alter system set log_archive_dest_state_1=enable;
Add archive log dest for foreign archives:
alter system set LOG_ARCHIVE_DEST_2='LOCATION=/u90/foreign_archivelog VALID_FOR=(STANDBY_LOGFILES, ALL_ROLES)' scope=both;
alter system set log_archive_dest_state_2=enable;E. CONFIGURE PARAMETERS ON DOWNSTREAM SERVER
[oracle@ocmsmicrosrc dbs]$ scp orapwMSASRCDS oracle@ocmsmacrods:/u01/app/oracle/product/19.3.0/dbhome_1/dbs
The authenticity of host 'ocmsmacrods (192.168.56.75)' can't be established.
ECDSA key fingerprint is SHA256:JZzNuZzWLFxOHk6UXHc0ynfMaazOyCDSp+QA/6InHVY.
ECDSA key fingerprint is MD5:b8:ec:3a:ea:5f:ea:ec:32:9f:08:64:86:b3:f5:74:c0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ocmsmacrods,192.168.56.75' (ECDSA) to the list of known hosts.
oracle@ocmsmacrods's password:
orapwMSASRCDS 100% 2048 3.0MB/s 00:00
[oracle@ocmsmicrosrc dbs]$
[oracle@ocmsmacrods dbs]$ ls -ltr
total 18348
-rw-r--r-- 1 oracle oinstall 3079 Mar 06 2026 init.ora
-rw-r----- 1 oracle oinstall 24 Mar 06 05:06 lkMSASRC
-rw-r----- 1 oracle oinstall 2048 Mar 06 05:22 orapwMSASRC
-rw-rw---- 1 oracle oinstall 1544 Mar 06 07:10 hc_MSASRC.dat
-rw-r----- 1 oracle oinstall 24 Mar 06 07:17 lkMSASRC2
-rw-r----- 1 oracle oinstall 2048 Mar 06 07:36 orapwMSASRC2_bak8187
-rw-r----- 1 oracle oinstall 2048 Mar 06 07:36 orapwMSASRC2
-rw-rw---- 1 oracle oinstall 1544 Mar 06 05:27 hc_MSASRC2.dat
-rw-r----- 1 oracle oinstall 24 Mar 06 05:36 lkMSADS
-rw-rw---- 1 oracle oinstall 1544 Mar 06 05:48 hc_MSADS.dat
-rw-r----- 1 oracle oinstall 2048 Mar 06 05:48 orapwMSADS
-rw-r----- 1 oracle oinstall 18726912 Mar 06 15:53 snapcf_MSADS.f
-rw-r----- 1 oracle oinstall 4608 Mar 06 16:23 spfileMSADS.ora
-rw-r----- 1 oracle oinstall 2048 Mar 06 16:26 orapwMSASRCDS
[oracle@ocmsmacrods dbs]$ ps -ef | grep smon
oracle 7433 1 0 05:48 ? 00:00:00 ora_smon_MSADS
oracle 13421 13148 0 16:26 pts/2 00:00:00 grep --color=auto smon
[oracle@ocmsmacrods dbs]$ mv orapwMSASRCDS orapwMSADS
[oracle@ocmsmacrods dbs]$F. CREATE TNS ENTRIES FOR DOWNSTREAM DATABASE
select name, pdb from v$services;SQL> SQL>
NAME PDB
-------------------- --------------------
MSADS CDB$ROOT
MSADSXDB CDB$ROOT
SYS$BACKGROUND CDB$ROOT
SYS$USERS CDB$ROOT
masdspdb1 MASDSPDB1
SQL>
MSADS =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ocmsmacrods.ocm.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MSADS)
)
)
MASDSPDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ocmsmacrods.ocm.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = masdspdb1)
)
)CONFUGING SOURCE DATABASE FOR REPLICATION
A. ENABLE GOLDENGATE REPLICATION ON DB LEVEL (FROM CONTAINER)
SQL> select name from v$database;
NAME
---------
MSASRCDS
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 MSASRCDSPDB READ WRITE NO
SQL>
SQL> alter system set enable_goldengate_replication=TRUE;
System altered.
SQL>B. CREATE TABLESPACE FOR OGG USER (The same tablespace must be created on both CDB and PDB)
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL>
SQL> CREATE TABLESPACE OGG_TBS
DATAFILE '/u01/app/oracle/oradata/MSASRCDS/oggtbs01.dbf' SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE 1G
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO; 2 3 4 5
Tablespace created.
SQL>
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 MSASRCDSPDB READ WRITE NO
SQL>
SQL> alter session set container=MSASRCDSPDB;
Session altered.
SQL>
SQL> show con_name
CON_NAME
------------------------------
MSASRCPDB
SQL>
SQL> CREATE TABLESPACE OGG_TBS
DATAFILE '/u01/app/oracle/oradata/MSASRCDS/msasrcdspdb/oggtbs01.dbf' SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE 1G
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO; 2 3 4 5
Tablespace created.
SQL>C. CREATE COMMON USER AND GRANT ADMIN PRIVILEGES (in CDB and PDB on source, downstream and target)
--ON CDB
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL>
SQL> CREATE USER C##OGGADMIN IDENTIFIED BY piremerd DEFAULT TABLESPACE OGG_TBS;
User created.
SQL>
SQL> exec dbms_goldengate_auth.grant_admin_privilege('C##OGGADMIN',container=>'ALL');
PL/SQL procedure successfully completed.
SQL>
SQL> GRANT SELECT ON V_$DATABASE TO C##OGGADMIN;
Grant succeeded.
SQL>
GRANT CREATE SESSION TO C##OGGADMIN container=all;
GRANT ALTER SYSTEM TO C##OGGADMIN container=all;
GRANT RESOURCE TO C##OGGADMIN container=all;
GRANT CONNECT TO C##OGGADMIN container=all;
GRANT DBA to C##OGGADMIN container=all;
GRANT SELECT ANY DICTIONARY TO C##OGGADMIN container=all;
GRANT EXECUTE on DBMS_FLASHBACK TO C##OGGADMIN container=all;
GRANT LOCK ANY TABLE TO C##OGGADMIN container=all;
GRANT SELECT ANY TRANSACTION TO C##OGGADMIN container=all;
GRANT SELECT ON V_$DATABASE TO C##OGGADMIN container=all;
SQL>
--ON PDB
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 MSASRCDSPDB READ WRITE NO
SQL>
SQL> alter session set container=MSASRCDSPDB;
Session altered.
SQL>
SQL> show con_name
CON_NAME
------------------------------
MSASRCDSPDB
SQL>
GRANT CREATE SESSION TO C##OGGADMIN;
GRANT ALTER SYSTEM TO C##OGGADMIN;
GRANT RESOURCE TO C##OGGADMIN;
GRANT CONNECT TO C##OGGADMIN;
GRANT DBA to C##OGGADMIN;
GRANT SELECT ANY DICTIONARY TO C##OGGADMIN;
GRANT EXECUTE on DBMS_FLASHBACK TO C##OGGADMIN;
GRANT LOCK ANY TABLE TO C##OGGADMIN;
GRANT SELECT ANY TRANSACTION TO C##OGGADMIN;
GRANT SELECT ON V_$DATABASE TO C##OGGADMIN;D. ENABLE SUPPLEMENTAL LOGGING ON DB LEVEL (on CDB — source, downstream and target)
Supplemental logging adds an extra column in redo logs so that a row can be uniquely identified.
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL>
SELECT SUPPLEMENTAL_LOG_DATA_MIN, FORCE_LOGGING FROM V$DATABASE;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (all) columns;
ALTER DATABASE FORCE LOGGING;
ALTER SYSTEM SWITCH LOGFILE;
SELECT SUPPLEMENTAL_LOG_DATA_MIN, FORCE_LOGGING FROM V$DATABASE;E. FIND PDB SERVICE NAME AND ITS TNS STRING TO TNSNAMES.ORA
col name for a20
col pdb for a20
select name, pdb from v$services;
NAME PDB
-------------------- --------------------
MSASRCDSXDB CDB$ROOT
SYS$BACKGROUND CDB$ROOT
SYS$USERS CDB$ROOT
MSASRCDS CDB$ROOT
msasrcdspdb MSASRCDSPDB
SQL>
-- add PDB connecion string to the tnsnames.ora on source and target host
MSASRCDS =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.71)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MSASRCDS)
)
)
MSASRCPDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.71)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = msasrcdspdb)
)
)
-- Target
MSATGTDS =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ocmsmacrotgt2.ocm.com)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MSATGTDS)
)
)
MSATGTDSPDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ocmsmacrotgt2.ocm.com)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = msatgtdspdb)
)
)F. CONFIGURE LOGMINER BUILD
SQL> EXECUTE DBMS_LOGMNR_D.BUILD(OPTIONS=> DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);
PL/SQL procedure successfully completed.
SQL>PREPARE TARGET DATABASE FOR REPLICATION
A. ENABLE GOLDENGATE REPLICATION ON DB LEVEL (FROM CONTAINER)
SQL> select name from v$database;
NAME
---------
MSATGTDS
SQL>
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 MSATGTDSPDB READ WRITE NO
SQL>
SQL> alter system set enable_goldengate_replication=TRUE;
System altered.
SQL>B. CREATE TABLESPACE FOR OGG USER (The same tablespace must be created on both CDB and PDB)
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL>
SQL> CREATE TABLESPACE OGG_TBS
DATAFILE '/u01/app/oracle/oradata/MSATGTDS/oggtbs01.dbf' SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE 1G
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO; 2 3 4 5
Tablespace created.
SQL>
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 MSATGTDSPDB READ WRITE NO
SQL>
SQL> alter session set container=MSATGTDSPDB;
Session altered.
SQL>
SQL> show con_name
CON_NAME
------------------------------
MSATGTDSPDB
SQL>
SQL> CREATE TABLESPACE OGG_TBS
DATAFILE '/u01/app/oracle/oradata/MSATGTDS/pdbseed/oggtbs01.dbf' SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE 1G
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO; 2 3 4 5
Tablespace created.
SQL>C. CREATE COMMON USER AND GRANT ADMIN PRIVILEGES (in CDB and PDB on source, downstream and target)
--ON CDB
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL>
SQL> CREATE USER C##OGGADMIN IDENTIFIED BY piremerd DEFAULT TABLESPACE OGG_TBS;
User created.
SQL>
SQL> exec dbms_goldengate_auth.grant_admin_privilege('C##OGGADMIN',container=>'ALL');
PL/SQL procedure successfully completed.
SQL>
SQL> GRANT SELECT ON V_$DATABASE TO C##OGGADMIN;
Grant succeeded.
SQL>
GRANT CREATE SESSION TO C##OGGADMIN container=all;
GRANT ALTER SYSTEM TO C##OGGADMIN container=all;
GRANT RESOURCE TO C##OGGADMIN container=all;
GRANT CONNECT TO C##OGGADMIN container=all;
GRANT DBA to C##OGGADMIN container=all;
GRANT SELECT ANY DICTIONARY TO C##OGGADMIN container=all;
GRANT EXECUTE on DBMS_FLASHBACK TO C##OGGADMIN container=all;
GRANT LOCK ANY TABLE TO C##OGGADMIN container=all;
GRANT SELECT ANY TRANSACTION TO C##OGGADMIN container=all;
GRANT SELECT ON V_$DATABASE TO C##OGGADMIN container=all;
SQL>
--ON PDB
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 MSATGTDSPDB READ WRITE NO
SQL>
SQL> alter session set container=MSATGTDSPDB;
Session altered.
SQL>
SQL> show con_name
CON_NAME
------------------------------
MSATGTDSPDB
SQL>
GRANT CREATE SESSION TO C##OGGADMIN;
GRANT ALTER SYSTEM TO C##OGGADMIN;
GRANT RESOURCE TO C##OGGADMIN;
GRANT CONNECT TO C##OGGADMIN;
GRANT DBA to C##OGGADMIN;
GRANT SELECT ANY DICTIONARY TO C##OGGADMIN;
GRANT EXECUTE on DBMS_FLASHBACK TO C##OGGADMIN;
GRANT LOCK ANY TABLE TO C##OGGADMIN;
GRANT SELECT ANY TRANSACTION TO C##OGGADMIN;
GRANT SELECT ON V_$DATABASE TO C##OGGADMIN;D. ENABLE SUPPLEMENTAL LOGGING ON DB LEVEL (on CDB — source, downstream and target)
Supplemental logging adds an extra column in redo logs so that a row can be uniquely identified.
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL>
SELECT SUPPLEMENTAL_LOG_DATA_MIN, FORCE_LOGGING FROM V$DATABASE;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (all) columns;
ALTER DATABASE FORCE LOGGING;
ALTER SYSTEM SWITCH LOGFILE;
SELECT SUPPLEMENTAL_LOG_DATA_MIN, FORCE_LOGGING FROM V$DATABASE;PREPARE DOWNSTREAM DATABASE FOR REPLICATION
A. SET LOG_ARCHIVE_DEST TO DOWNSTREAM
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL>
SQL>
alter system set LOG_ARCHIVE_DEST_2='SERVICE=MSADS ASYNC NOREGISTER VALID_FOR=(ONLINE_LOGFILES, PRIMARY_ROLE) DB_UNIQUE_NAME=MSADS)';
alter system set log_archive_dest_state_2=enable;SQL>
System altered.
SQL>
System altered.
SQL> show parameter LOG_ARCHIVE_DEST_2
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_2 string SERVICE=MSADS ASYNC NOREGISTERVALID_FOR=(ONLINE_LOGFILES, PRIMARY_ROLE) DB_UNIQUE_NAME=MSADS)
log_archive_dest_20 stringB. CONFIGURE LOG_ARCHIVE_DEST_N on Downstream Database
mkdir -p /u90/foreign_archivelogs
Add archive log dest for its local archives:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=USE_RECOVERY_FILE_DEST VALID_FOR=(ONLINE_LOGFILE,PRIMARY_ROLE)' scope=both;
alter system set log_archive_dest_state_1=enable;
Add archive log dest for foreign archives:
alter system set LOG_ARCHIVE_DEST_2='LOCATION=/u90/foreign_archivelog VALID_FOR=(STANDBY_LOGFILES, ALL_ROLES)' scope=both;
alter system set log_archive_dest_state_2=enable;C. CONFIGURE STANDBY REDO LOGS ON DOWNSTREAM SERVER
Get Omer Narman’s stories in your inbox
Join Medium for free to get updates from this writer.
Only for real-time mode. We use ALO (Archived Log Only) mode, so we won’t proceed with standby redo logs.
But if we are to use real time apply, then standby redo logs could be added with the following procedures:
SET LINESIZE 200
SET PAGESIZE 100
COLUMN GROUP# FORMAT 999
COLUMN THREAD# FORMAT 999
COLUMN SEQUENCE# FORMAT 999999
COLUMN SIZE_MB FORMAT 999.99
COLUMN STATUS FORMAT A10
COLUMN LOG_TYPE FORMAT A10
COLUMN MEMBERS FORMAT A100
-- Online redo logs with concatenated member paths
SELECT
l.GROUP#,
l.THREAD#,
l.SEQUENCE#,
l.BYTES/1024/1024 AS SIZE_MB,
l.STATUS,
'ONLINE' AS LOG_TYPE,
LISTAGG(f.MEMBER, ', ') WITHIN GROUP (ORDER BY f.MEMBER) AS MEMBERS
FROM
v$log l
JOIN
v$logfile f ON l.GROUP# = f.GROUP#
GROUP BY
l.GROUP#, l.THREAD#, l.SEQUENCE#, l.BYTES, l.STATUS
UNION ALL
-- Standby redo logs with concatenated member paths
SELECT
s.GROUP#,
s.THREAD#,
s.SEQUENCE#,
s.BYTES/1024/1024 AS SIZE_MB,
s.STATUS,
'STANDBY' AS LOG_TYPE,
LISTAGG(f.MEMBER, ', ') WITHIN GROUP (ORDER BY f.MEMBER) AS MEMBERS
FROM
v$standby_log s
JOIN
v$logfile f ON s.GROUP# = f.GROUP#
WHERE
f.TYPE = 'STANDBY'
GROUP BY
s.GROUP#, s.THREAD#, s.SEQUENCE#, s.BYTES, s.STATUS
ORDER BY
LOG_TYPE, GROUP#;
alter database add standby logfile '/u01/app/oracle/oradata/MSADS/stdb_redo01.log' size 200m;
alter database add standby logfile '/u01/app/oracle/oradata/MSADS/stdb_redo02.log' size 200m;
alter database add standby logfile '/u01/app/oracle/oradata/MSADS/stdb_redo03.log' size 200m;
alter database add standby logfile '/u01/app/oracle/oradata/MSADS/stdb_redo04.log' size 200m;INSTALLING MSA ON DOWNSTREAM
Servers:
#PUBLIC
192.168.56.71 ocmsmicrosrc.ocm.com ocmsmicrosrc
192.168.56.72 ocmsmacrotgt.ocm.com ocmsmacrotgt
192.168.56.73 ocmsmicrosrc2.ocm.com ocmsmicrosrc2
192.168.56.74 ocmsmacrotgt2.ocm.com ocmsmacrotgt2
192.168.56.75 ocmsmacrods.ocm.com ocmsmacrodsDownload Microservices binaries
/stage/oracle/gg_msa/fbo_ggs_Linux_x64_services_shiphome/Disk1Set environment variables for OGG database on both servers
On Downstream Machine : db.env
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
export ORACLE_SID=MSATGTDS
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/libOn Target Machine : .bash_profile
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_SID=MSADS; export ORACLE_SID
ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1; export ORACLE_HOME
OGG_HOME=/u01/app/ogg19/ma; export OGG_HOME
NLS_DATE_FORMAT="DD-MON-YYYY HH24:MI:SS"; export NLS_DATE_FORMAT
TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN
PATH=$PATH:$HOME/.local/bin:$HOME/bin
PATH=${PATH}:/usr/bin:/bin:/usr/local/bin
PATH=.:${PATH}:$ORACLE_HOME/bin
export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export CLASSPATH
export TEMP=/tmp
export TMPDIR=/tmp
umask 022Create Required Directories for MSA on both downstream and target
mkdir -p /u01/app/ogg19/ma
mkdir -p /u01/app/ogg19/sm
mkdir -p /u01/app/ogg19/deploy
chown -R oracle:oinstall /u01/app/ogg19
chmod -R 775 /u01/app/ogg19Installation
[oracle@ocmsmacrods~]$ export DISPLAY=:0.0
[oracle@ocmsmacrods~]$ cd /u02/install/fbo_ggs_Linux_x64_Oracle_services_shiphome/Disk1
[oracle@ocmsmacrods Disk1]$ ./runInstaller
Starting Oracle Universal Installer...
Checking Temp space: must be greater than 120 MB. Actual 993 MB Passed
Checking swap space: must be greater than 150 MB. Actual 10239 MB Passed
Checking monitor: must be configured to display at least 256 colors. Actual 16777216 Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2025-06-21_05-13-09AM. Please wait ...[oracle@ocmsmacrods Disk1]$CREATE DEPLOYMENT
[oracle@ocmsmacrods Disk1]$ cd /u01/app/ogg19/ma/
[oracle@ocmsmacrods ma]$ cd bin
[oracle@ocmsmacrods bin]$ ls -ltr
total 113596
-rwxrwxr-x 1 oracle oinstall 6809 Oct 18 2018 XAGTask
-rwxr-x--- 1 oracle oinstall 10362 Dec 16 2020 oggca.sh
-rwxrwxr-x 1 oracle oinstall 4369 Jul 28 2021 orapki
-rwxrwx--- 1 oracle oinstall 12413968 Jul 29 2021 distsrvr
-rwxrwxr-x 1 oracle oinstall 8483888 Jul 29 2021 ServiceManager
-rwxrwxr-x 1 oracle oinstall 1690360 Jul 29 2021 retrace
-rwxrwxr-x 1 oracle oinstall 1694456 Jul 29 2021 oggerr
-rwxrwxr-x 1 oracle oinstall 5568576 Jul 29 2021 logdump
-rwxrwxr-x 1 oracle oinstall 1645280 Jul 29 2021 cachefiledump
-rwxrwxr-x 1 oracle oinstall 11692320 Jul 29 2021 adminsrvr
-rwxrwxr-x 1 oracle oinstall 5111424 Jul 29 2021 adminclient
-rwxrwx--- 1 oracle oinstall 11236912 Jul 29 2021 replicat
-rwxrwxr-x 1 oracle oinstall 8977080 Jul 29 2021 pmsrvr
-rwxrwxr-x 1 oracle oinstall 5676840 Jul 29 2021 defgen
-rwxrwxr-x 1 oracle oinstall 1903992 Jul 29 2021 convchk
-rwxrwxr-x 1 oracle oinstall 5013192 Jul 29 2021 ggcmd
-rwxrwx--- 1 oracle oinstall 11182752 Jul 29 2021 extract
-rwxrwxr-x 1 oracle oinstall 4976136 Jul 29 2021 emsclnt
-rwxrwxr-x 1 oracle oinstall 3075192 Jul 29 2021 convprm
-rwxrwxr-x 1 oracle oinstall 2325248 Jul 29 2021 checkprm
-rwxrwxr-x 1 oracle oinstall 3185008 Jul 29 2021 certstore
-rwxrwx--- 1 oracle oinstall 10299008 Jul 29 2021 recvsrvr
-rwxrwxr-x 1 oracle oinstall 112920 Jul 29 2021 keygen
[oracle@ocmsmacrods bin]$ ./oggca.shConfigure Service Manager
[oracle@ocmsmicrosrc bin]$ pwd
/u01/app/ogg19/ma/bin
[oracle@ocmsmicrosrc bin]$ ls -ltr
total 113596
-rwxrwxr-x 1 oracle oinstall 6809 Oct 18 2018 XAGTask
-rwxr-x--- 1 oracle oinstall 10362 Dec 16 2020 oggca.sh
-rwxrwxr-x 1 oracle oinstall 4369 Jul 28 2021 orapki
-rwxrwx--- 1 oracle oinstall 12413968 Jul 29 2021 distsrvr
-rwxrwxr-x 1 oracle oinstall 8483888 Jul 29 2021 ServiceManager
-rwxrwxr-x 1 oracle oinstall 1690360 Jul 29 2021 retrace
-rwxrwxr-x 1 oracle oinstall 1694456 Jul 29 2021 oggerr
-rwxrwxr-x 1 oracle oinstall 5568576 Jul 29 2021 logdump
-rwxrwxr-x 1 oracle oinstall 1645280 Jul 29 2021 cachefiledump
-rwxrwxr-x 1 oracle oinstall 11692320 Jul 29 2021 adminsrvr
-rwxrwxr-x 1 oracle oinstall 5111424 Jul 29 2021 adminclient
-rwxrwx--- 1 oracle oinstall 11236912 Jul 29 2021 replicat
-rwxrwxr-x 1 oracle oinstall 8977080 Jul 29 2021 pmsrvr
-rwxrwxr-x 1 oracle oinstall 5676840 Jul 29 2021 defgen
-rwxrwxr-x 1 oracle oinstall 1903992 Jul 29 2021 convchk
-rwxrwxr-x 1 oracle oinstall 5013192 Jul 29 2021 ggcmd
-rwxrwx--- 1 oracle oinstall 11182752 Jul 29 2021 extract
-rwxrwxr-x 1 oracle oinstall 4976136 Jul 29 2021 emsclnt
-rwxrwxr-x 1 oracle oinstall 3075192 Jul 29 2021 convprm
-rwxrwxr-x 1 oracle oinstall 2325248 Jul 29 2021 checkprm
-rwxrwxr-x 1 oracle oinstall 3185008 Jul 29 2021 certstore
-rwxrwx--- 1 oracle oinstall 10299008 Jul 29 2021 recvsrvr
-rwxrwxr-x 1 oracle oinstall 112920 Jul 29 2021 keygen
[oracle@ocmsmicrosrc bin]$
[oracle@ocmsmicrosrc bin]$ ./oggca.shCREATE CREDENTIALS
From Admin Service navigate to the Configuration menu and click +
Repeat the same for all required credentials such as downstream cdb, downstream pdb, source cdb, source cdb, target cdb and target pdb
CREATE SAMPLE TABLES ON SOURCE AND TARGET
SOURCE
-- Create the APPTBS tablespace
CREATE TABLESPACE APPTBS
DATAFILE '/u01/app/oracle/oradata/MSASRCDS/msasrcdspdb/apptbs01.dbf'
SIZE 1G
AUTOEXTEND ON
NEXT 512M
MAXSIZE 5G
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
-- Create the APPDATA user with APPTBS as default tablespace
CREATE USER APPDATA IDENTIFIED BY piremerd
DEFAULT TABLESPACE APPTBS
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON APPTBS;
-- Grant necessary privileges
GRANT CONNECT, RESOURCE TO APPDATA;
GRANT CREATE VIEW, CREATE SYNONYM TO APPDATA;
-- Create EXTRACTION_RUN_ID_HISTORY table
CREATE TABLE APPDATA.EXTRACTION_RUN_ID_HISTORY (
RUN_NUMBER NUMBER,
START_TIME TIMESTAMP(6),
END_TIME TIMESTAMP(6),
RECORDS_PROCESSED NUMBER,
STATUS VARCHAR2(50),
EXTRACTION_TYPE VARCHAR2(100),
USER_NAME VARCHAR2(100),
SYSTEM_NAME VARCHAR2(100)
);
COMMIT;TARGET
-- Create the APPTBS tablespace
CREATE TABLESPACE APPTBS
DATAFILE '/u01/app/oracle/oradata/MSATGTDS/msatgtdspdb/apptbs01.dbf'
SIZE 1G
AUTOEXTEND ON
NEXT 512M
MAXSIZE 5G
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
-- Create the APPDATA user with APPTBS as default tablespace
CREATE USER APPDATA IDENTIFIED BY piremerd
DEFAULT TABLESPACE APPTBS
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON APPTBS;
-- Grant necessary privileges
GRANT CONNECT, RESOURCE TO APPDATA;
GRANT CREATE VIEW, CREATE SYNONYM TO APPDATA;
-- Create EXTRACTION_RUN_ID_HISTORY table
CREATE TABLE APPDATA.EXTRACTION_RUN_ID_HISTORY (
RUN_NUMBER NUMBER,
START_TIME TIMESTAMP(6),
END_TIME TIMESTAMP(6),
RECORDS_PROCESSED NUMBER,
STATUS VARCHAR2(50),
EXTRACTION_TYPE VARCHAR2(100),
USER_NAME VARCHAR2(100),
SYSTEM_NAME VARCHAR2(100)
);
COMMIT;CREATE EXTRACT ON DOWNSTREAM
Make sure you select “Downstream Capture” option when creating the Extract parameter. Up to this point, the rest is about configuring the capture process. From this point on, the rest of the remaining distribution path and replicat configurations are the same with regular replication.
A distribution path to be added to the downstream will read ds trail files and send data over to the target, and on the target the replicat will read from the remote trail file. In terms of downstream configuration, there is no other special requirements for distribution path and replicat.







