Introduction
In the previous article, we covered installing GoldenGate 21c and preparing both databases — see Windows to Linux GoldenGate Setup: Installation and Preparation if you haven't set that up yet. This article covers the essential steps to configure Extract and Replicat for real-time replication.
Prerequisites
- Oracle GoldenGate software should be installed.
- Database configuration for GoldenGate should be done on both the source and target database.
Environment Used in this Guide
| Server | Source | Target |
|---|---|---|
| Hostname/IP | LAPTOP-JO563L1O.oraeasy.com | ogg21.oraeasy.com |
| OS | Windows 11 | OEL 8.5 |
| Database Version | 19.28 | 19.28 |
| Database Name | windb | lindb |
| GoldenGate Version | 21.3.0.0.1 | 21.3.0.0.1 |
| GoldenGate Home | D:\OGG | /u01/ogg/ogg_home |
Configuration Steps Overview
This article covers four phases, in order:
- Extract configuration
- Distribution path
- Initial load
- Replicat configuration
Configuring Extract and Replicat Step by Step
Step 1: Configure Extract at the Source
This creates a normal (non-integrated) extract, with the initial load handled manually in Step 3 rather than automatically.
Click on Administration Service and then click the + sign in the Extract section.
Select the Extract type and click Next.
Provide the Extract name and trail file name.
Provide the credentials domain and alias, then click Next.
Add the replication schema and table details. Here we're replicating a table from the CORPDATA schema. Click Create & Run.
The Extract is now created and running.
Step 2: Configure the Distribution Path
The Distribution Path is what actually transfers trail files from the source to the target for replication — without it, the Extract's captured changes never leave the source.
Click on Distribution Service and click the + sign.
Provide the path name, the source side (Extract and trail name) details, and the target side (protocol, hostname, port, and trail name) details. Click Next.
Keep the default options.
Keep the default options and click Create & Run.
The Distribution Path has now been created.
Step 3: Perform the Initial Load from Source to Target
With the Extract and Distribution Path running, the target still needs a starting copy of the data. This uses Data Pump's network import with flashback_scn set to the SCN captured at the source, so the import is transactionally consistent with the exact point where the Extract began capturing.
Verify the table data at source. Also note the current SCN:
SQL> def
DEFINE _DATE = "24-FEB-26" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "windb" (CHAR)
DEFINE _USER = "SYS" (CHAR)
DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1927000000" (CHAR)
DEFINE _EDITOR = "Notepad" (CHAR)
DEFINE _O_VERSION = "Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.27.0.0.0" (CHAR)
DEFINE _O_RELEASE = "1927000000" (CHAR)
SQL>
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
4267104
SQL>
SQL> select * from corpdata.corp_accounts;
ACCOUNT_ID ACCOUNT_NAME INDUSTRY COUNTRY ANNUAL_REVENUE CREDIT_RAT STATUS UPDATED_A
---------- ---------------------------------------- -------------------- ------------ -------------- ---------- -------------------- ---------
1001 Alpha Tech Pvt Ltd IT Services India 45000000 A ACTIVE 29-NOV-25
1002 Global Infoworks Ltd Software USA 120000000 AAA ACTIVE 29-NOV-25
1003 Zenith Logistics Transport UK 75000000 BBB HOLD 29-NOV-25
1004 BlueOcean Pharma Pharmaceuticals Singapore 90000000 A ACTIVE 29-NOV-25
1005 Nova Retail Corp Retail India 30000000 BB SUSPENDED 29-NOV-25
On target create the directory for import. Also create a Public database link to
connect source:
[oracle@ogg21 ~]$ mkdir -p /u01/app/oracle/imp
[oracle@ogg21 ~]$
[oracle@ogg21 ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Feb 24 21:25:45 2026
Version 19.28.0.0.0
Copyright (c) 1982, 2025, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.28.0.0.0
SQL> select name,open_mode from v$database;
NAME OPEN_MODE
--------- --------------------
LINDB READ WRITE
SQL> create or replace directory imp as '/u01/app/oracle/imp';
Directory created.
SQL> grant read, write on directory imp to public;
Grant succeeded.
SQL> create database link import connect to system identified by sys using 'windb';
Database link created.
SQL> select sysdate from dual@import;
SYSDATE
---------
24-FEB-26
Do the import using Database Link with flashback_scn:
[oracle@ogg21 ~]$ impdp schemas=CORPDATA directory=imp logfile=import.log network_link=import flashback_scn=4267104
Import: Release 19.0.0.0.0 - Production on Tue Feb 24 21:32:56 2026
Version 19.28.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Username: / as sysdba
Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
FLASHBACK automatically enabled to preserve database integrity.
Starting "SYS"."SYS_IMPORT_SCHEMA_01": /******** AS SYSDBA schemas=CORPDATA directory=imp logfile=import.log network_link=import flashback_scn=4267104
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/PROCACT_INSTANCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
. . imported "CORPDATA"."CORP_ACCOUNTS" 5 rows
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
Job "SYS"."SYS_IMPORT_SCHEMA_01" successfully completed at Tue Feb 24 21:33:43 2026 elapsed 0 00:00:36
[oracle@ogg21 ~]$
Verify the data at target:
SQL> def
DEFINE _DATE = "24-FEB-26" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "lindb" (CHAR)
DEFINE _USER = "SYS" (CHAR)
DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1928000000" (CHAR)
DEFINE _EDITOR = "vi" (CHAR)
DEFINE _O_VERSION = "Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.28.0.0.0" (CHAR)
DEFINE _O_RELEASE = "1928000000" (CHAR)
SQL> select * from corpdata.corp_accounts;
ACCOUNT_ID ACCOUNT_NAME INDUSTRY COUNTRY ANNUAL_REVENUE CREDIT_RAT STATUS UPDATED_A
---------- ------------------------------ --------------- --------------- -------------- ---------- -------------------- ---------
1001 Alpha Tech Pvt Ltd IT Services India 45000000 A ACTIVE 29-NOV-25
1002 Global Infoworks Ltd Software USA 120000000 AAA ACTIVE 29-NOV-25
1003 Zenith Logistics Transport UK 75000000 BBB HOLD 29-NOV-25
1004 BlueOcean Pharma Pharmaceuticals Singapore 90000000 A ACTIVE 29-NOV-25
1005 Nova Retail Corp Retail India 30000000 BB SUSPENDED 29-NOV-25
Matching row counts (5) on both sides confirm the initial load transferred cleanly. The recorded SCN, 4267104, is what the Replicat will use in Step 6 to know exactly where in the change stream to start applying from.
Step 4: Create the Checkpoint Table
The Replicat needs a checkpoint table on the target to track its own progress. This is set up through the console before creating the Replicat itself.
In Administration Service, click Configuration. In the Database → Credential section, click the database icon to check login.
Provide the checkpoint table name and click Submit.
Step 5: Configure the Replicat at the Target
With the checkpoint table in place, create the Replicat that will apply the incoming changes to the target database.
Click on Administration Service and then click the + sign in the Replicat section.
Provide the Replicat type and click Next.
Provide the trail name and credential details.
Provide the checkpoint table and click Next.
Configure the parameter file and add the replication table details. Click Create.
The Replicat has now been created.
Step 6: Start the Replicat with the Source SCN
The Replicat needs to start from the exact SCN captured during the initial load in Step 3, so it doesn't miss or double-apply any transactions.
Click on Action and then click Start with Options.
Select After CSN as the start point and provide the SCN number in the CSN section. Click Submit.
Wait a few moments and the Replicat lag will settle to zero.
Step 7: Test Replication with DML
With GoldenGate configuration complete, insert a row on the source and confirm it replicates through to the target.
At Source:
SQL> def
DEFINE _DATE = "24-FEB-26" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "windb" (CHAR)
DEFINE _USER = "SYS" (CHAR)
DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1927000000" (CHAR)
DEFINE _EDITOR = "Notepad" (CHAR)
DEFINE _O_VERSION = "Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.27.0.0.0" (CHAR)
DEFINE _O_RELEASE = "1927000000" (CHAR)
SQL> INSERT INTO CORPDATA.CORP_ACCOUNTS
(ACCOUNT_ID, ACCOUNT_NAME, INDUSTRY, COUNTRY, ANNUAL_REVENUE,
CREDIT_RATING, STATUS, UPDATED_AT)
VALUES
(2001, 'Prime Solutions Ltd', 'Consulting', 'India', 15000000,
'A', 'ACTIVE', SYSDATE);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from corpdata.corp_accounts;
ACCOUNT_ID ACCOUNT_NAME INDUSTRY COUNTRY ANNUAL_REVENUE CREDIT_RAT STATUS UPDATED_A
---------- ------------------------------ --------------- --------------- -------------- ---------- -------------------- ---------
2001 Prime Solutions Ltd Consulting India 15000000 A ACTIVE 24-FEB-26
1001 Alpha Tech Pvt Ltd IT Services India 45000000 A ACTIVE 29-NOV-25
1002 Global Infoworks Ltd Software USA 120000000 AAA ACTIVE 29-NOV-25
1003 Zenith Logistics Transport UK 75000000 BBB HOLD 29-NOV-25
1004 BlueOcean Pharma Pharmaceuticals Singapore 90000000 A ACTIVE 29-NOV-25
1005 Nova Retail Corp Retail India 30000000 BB SUSPENDED 29-NOV-25
6 rows selected.
SQL>
At Target:
SQL> def
DEFINE _DATE = "24-FEB-26" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "lindb" (CHAR)
DEFINE _USER = "SYS" (CHAR)
DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1928000000" (CHAR)
DEFINE _EDITOR = "vi" (CHAR)
DEFINE _O_VERSION = "Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.28.0.0.0" (CHAR)
DEFINE _O_RELEASE = "1928000000" (CHAR)
SQL>
SQL> select * from corpdata.corp_accounts;
ACCOUNT_ID ACCOUNT_NAME INDUSTRY COUNTRY ANNUAL_REVENUE CREDIT_RAT STATUS UPDATED_A
---------- ------------------------------ --------------- --------------- -------------- ---------- -------------------- ---------
1001 Alpha Tech Pvt Ltd IT Services India 45000000 A ACTIVE 29-NOV-25
1002 Global Infoworks Ltd Software USA 120000000 AAA ACTIVE 29-NOV-25
1003 Zenith Logistics Transport UK 75000000 BBB HOLD 29-NOV-25
1004 BlueOcean Pharma Pharmaceuticals Singapore 90000000 A ACTIVE 29-NOV-25
1005 Nova Retail Corp Retail India 30000000 BB SUSPENDED 29-NOV-25
2001 Prime Solutions Ltd Consulting India 15000000 A ACTIVE 24-FEB-26
6 rows selected.
The new row appearing on the target with matching values confirms the end-to-end Windows-to-Linux replication is working correctly.
Thank you for reading!
I hope this content has been helpful to you. Your feedback and suggestions are always welcome. Feel free to leave a comment or reach out with any queries.
Abhishek Shrivastava
Oracle DBA with hands-on experience managing production Data Guard, RAC, GoldenGate, and APEX environments. I write practical, tested installation and troubleshooting guides based on real deployment work.























Comments
Post a Comment