Seamless Data Replication from Oracle to YugabyteDB using Goldengate
YugabyteDB is a PostgreSQL-compatible, multi-master RDBMS that supports global data distribution, resilience, scalability, and enterprise features. Customer can migrate, deploy, and run their applications with YugabyteDB across regions, clouds, and edges.
In this blog, we will see how data can be replicated between Oracle Database and YugabyteDB using Oracle’s Goldengate classic.

At Source :
Create goldengate replication user c##ggadmin (common user in case of Container DB)
Grant required permission to goldengate extract user
Set/enable required parameter in database
Install Oracle Goldengate for Oracle database
Start Manager process
Create defgen file for target database for the table having different definition
Transfer defgen file to target server
Create Credentialstore and add credentials
Configure Extract process
Start extract
At Target :
Create goldengate user in target
Grant required permission to goldengate replication user
Install required packages
Install Oracle client
Install Oracle Goldengate for PostgreSQL
Setup ODBC config file
Connect goldengate and start manager process
Configure replicate process
Start replicat
Source Configuration :
1. Create goldengate replication user c##ggadmin (common user in case of Container DB)
create user C##GGADMIN identified by ggadmin;
2. Grant required permission to user:
GRANT RESOURCE to c##ggadmin; GRANT CREATE SESSION to c##ggadmin;
GRANT CREATE VIEW to c##ggadmin; GRANT CREATE TABLE to c##ggadmin;
GRANT CONNECT to c##ggadmin CONTAINER=all;
GRANT ALTER SYSTEM to c##ggadmin;
GRANT ALTER USER to c##ggadmin;
ALTER USER c##ggadmin SET CONTAINER_DATA=all CONTAINER=current;
ALTER USER c##ggadmin QUOTA unlimited ON GG_DATA;
GRANT SELECT ANY DICTIONARY to c##ggadmin;
GRANT SELECT ANY TRANSACTION to c##ggadmin; EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('c##ggadmin’);
GRANT DV_GOLDENGATE_ADMIN; ——— for data vault user
GRANT DV_GOLDENGATE_REDO_ACCESS; —— for data vault user
3. Enable parameters in database :
alter database add supplemental log data;
alter system set enable_goldengate_replication=TRUE;
4. Install Oracle Goldengate binaries for Oracle Database :
In my case, I have downloaded and install Oracle Goldengate 21c for Oracle Database. https://www.oracle.com/in/middleware/technologies/goldengate-downloads.html
5. Connect to Goldengate console and start manager process on port 7809
./ggsci
start manager
6. Create defgen file which is required when source and target table structure is not same, mostly when configuring replication between heterogeneous databases.
edit params defgen
DEFSFILE ./dirprm/t1.def
USERIDALIAS oracredcdb
TABLE ORCLPDB1.ggpdbuser.t1;
Generate a definition file “./dirprm/t1.def” from defgen console. .
./defgen paramfile ./dirprm/defgen.prm
7. Transfer t1.def file to target server.
8. Create credntialstore for oracle database login in goldengate
ADD CREDENTIALSTORE
ALTER CREDENTIALSTORE ADD USER c##ggadmin@ORCLCDB, PASSWORD ggadmin, ALIAS oracredcdb
ALTER CREDENTIALSTORE ADD USER c##ggadmin@ORCLPDB1, PASSWORD ggadmin, ALIAS oracredalias
9. Configure Extract process :
EXTRACT extora
USERIDALIAS oracredcdb
SETENV (LD_LIBRARY_PATH='opt/oracle/product/19c/dbhome_1/lib')
SETENV (TNS_ADMIN = '/opt/oracle/product/19c/dbhome_1/network/admin')
RMTHOST 10.98.41.29, MGRPORT 7810
RMTTRAIL ./dirdat/rt
DDL INCLUDE MAPPED
LOGALLSUPCOLS
UPDATERECORDFORMAT COMPACT
TABLE ORCLPDB1.ggpdbuser.t1;
10. Start Extract
add extract extora, integrated tranlog, begin now
add rmttrail ./dirdat/rt, extract extora, megabytes 10
Start extract extora
Target Configuration :
1. Create Goldengate user in target database :
create user ggpguser with superuser password 'ggpguser';
2. Grant required permission to user :
GRANT CONNECT ON DATABASE dbname TO gguser;
ALTER USER gguser WITH SUPERUSER; < Required to enable table level supplemental logging (ADD TRANDATA) but can be revoked after TRANDATA is enabled for the table(s).>
GRANT USAGE ON SCHEMA tableschema TO gguser;
GRANT SELECT ON ALL TABLES IN SCHEMA tableschema TO gguser;
GRANT INSERT, UPDATE, DELETE, TRUNCATE ON TABLE tablename TO gguser;
GRANT CREATE ON DATABASE dbname TO gguser;
GRANT CREATE, USAGE ON SCHEMA ggschema TO gguser;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA ggschema TO gguser;
GRANT SELECT, INSERT, UPDATE, DELETE, ON ALL TABLES IN SCHEMA ggschema TO gguser;
3. Install following packages as pre-requisites :
sudo yum install unixODBC* libaio* psqlodbc* libnsl*
4. Install Oracle Client
yum install oracle-instantclient-basic-23.6.0.24.10-1.el8.x86_64.rpm
5. Install Oracle GoldenGate binaries for PostgreSQL
Download and unzip the 213000_ggs_Linux_x64_PostgreSQL_64bit.zip
6. Next, we’ll do ODBC configuration
# cat /etc/odbc.ini
#Sample DSN entries
[ODBC Data Sources]
YB_tgt=DataDirect 7.1 PostgreSQL Wire Protocol
[ODBC]
IANAAppCodePage=4
#InstallDir=/home/postgres/gg_pg_21c/
InstallDir=/home/yugabyte/gg_yb_21c
[YB_tgt]
Driver=/home/postgres/gg_pg_21c/lib/GGpsql25.so
Description=DataDirect 7.1 PostgreSQL Wire Protocol
Database=yugadb
HostName=localhost
PortNumber=5433
7. Connect Goldengate console for postgreSQL :
./ggsci
start mgr. >> manager is configure on 7810 port
create SUBDUERS
8. Add target YugabyteDB login credential to Goldengate credntialstore and configure replicate process
set environment variable :
export PATH=/usr/lib/oracle/23/client64/bin:$PATH
export LD_LIBRARY_PATH=/usr/lib/oracle/23/client64/lib
export LD_LIBRARY_PATH=/home/yugabyte/gg_yb_21c/lib:$LD_LIBRARY_PATH
export PG_HOME=/home/yugabyte/yb-software/yugabyte-2024.1.3.0-b105-centos-x86_64
export ODBCINI=/etc/odbc.ini
Login to ggsci
DBLOGIN SOURCEDB YB_tgt userid yugabyte password yourpassword
alter credentialstore add user yugabyte, password yourpassword, alias yugacredalias
list tables
Edit replicat param file
REPLICAT repyuga
SOURCEDEFS dirdef/t1.def
SETENV (ODBCINI="/etc/odbc.ini")
SETENV (PGCLIENTENCODING="UTF8")
SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8")
TARGETDB YB_tgt USERIDALIAS yugacredalias
BATCHSQL
GETTRUNCATES
DISCARDFILE ./dirrpt/diskg.dsc, purge
MAP ORCLPDB1.ggpdbuser.t1, TARGET public.t1, COLMAP (T1_ID=t1_id, T1_NAME=t1_name);
9. Start replicat
add replicat repyuga, NODBCHECKPOINT, exttrail ./dirdat/yb
start repyuga
Awesome! Here we have done with initial setup for data replication for table T1 from Oracle to Yugabyte. Let’s test by performing DML on source T1 table.
At Source >>
SQL> insert into t1 values (2024,'yugabyte');
1 row created.
SQL> commit;
Commit complete.
At Target >>
yugadb=# select * from t1;
t1_id | t1_name
-------+----------
2024 | yugabyte
(1 row)
Reference Documents :
How To Replicate Data from Oracle to Postgres Using GoldenGate (Doc ID 1544137.1)
Comments
Post a Comment