Goldengate Multiple Schema Replication between
Oracle 11gR2 and Oracle 12cR1
include DDL replication
Source
Host:
OS:
Red Hat Enterprise Linux Server release
5.10 (Tikanga) x86_64
DB Name: source à
11gR2 (11.2.0.4.0) reside on ASM
Host Name: rac1.localdomain
Target
Host:
OS:
Red Hat Enterprise Linux Server release 6.6
(Santiago) x86_64
DB Name: target
à
12cR1 (12.1.0.2.0) reside on ASM
Host Name: node1.localdomain
Goldengate Version: 12.1.2.1.0
Main Configuration Steps
1- Install
Goldengate Software on both source and target systems
2- Export the schemas which will be replicated and import them to the
target database
3- Prepare the source database
4- Prepare the target database
5- Configure extract, pump and replicat process
6- Start extract and replication proccess
7- Control DML and DDL operations
1. Install Goldengate Software on both source
and target systems
Source:
[oracle@rac1
~]$ cd /media/sf_oracle_setups/goldengate/fbo_ggs_Linux_x64_shiphome/Disk1/
[oracle@rac1
Disk1]$ sh runInstaller
/u01/app/oracle/product/gg
[oracle@rac1 gg]$ ./ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 12.1.2.1.0
OGGCORE_12.1.2.1.0_PLATFORMS_140727.2135.1_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Aug 7 2014 09:14:25
Operating system character set identified as UTF-8.
Copyright (C) 1995, 2014, Oracle and/or its affiliates. All
rights reserved.
GGSCI (rac1.localdomain) 1> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
GGSCI (rac1.localdomain) 2>
Target:
[oracle@node1 goldengate]$ cd
/media/sf_12c/goldengate/fbo_ggs_Linux_x64_shiphome/Disk1/
[oracle@node1 Disk1]$ sh runInstaller
[oracle@node1 gg]$ ./ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 12.1.2.1.0
OGGCORE_12.1.2.1.0_PLATFORMS_140727.2135.1_FBO
Linux, x64, 64bit (optimized), Oracle 12c on Aug 7 2014 10:21:34
Operating system character set identified as UTF-8.
Copyright (C) 1995, 2014, Oracle and/or its affiliates. All
rights reserved.
GGSCI (node1.localdomain) 1> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
GGSCI (node1.localdomain) 2>
2. Export
the schemas which will be replicated and import them to the target database
Source:
create or replace directory pump_dir as '/u01/app/oracle/pump';
expdp userid='"/ as
sysdba"' schemas=hr,scott dumpfile=scott_hr.dmp directory='pump_dir'
Target:
create or replace directory pump_dir as '/u01/app/oracle/pump';
create tablespace target_tbs datafile '+DATA' size 500m;
impdp userid='"/ as
sysdba"' dumpfile=scott_hr.dmp directory='pump_dir'
remap_tablespace=example:target_tbs;
grant connect, resource, unlimited tablespace to hr, scott;
***impdp can give some errors about granting roles if you dont
create the roles first manually.
3. Prepare the source database
a. Switch database archivelog
[oracle@rac1 ~]$
srvctl stop database -d source
[oracle@rac1 ~]$
srvctl start database -d source -o mount
SQL> alter
database archivelog;
SQL> alter
database open;
b. Add supplemental log and disable recyclebin
SQL> alter database add supplemental log data;
SQL> alter system set recyclebin=off
scope=spfile;
SQL> purge dba_recyclebin;
c.
Create goldengate
tablespace and user
SQL> create tablespace gg_tbs datafile
'+DATA' size 500M reuse autoextend on;
SQL> create user gg_user identified by
oracle default tablespace gg_tbs quota unlimited on gg_tbs;
SQL> grant create session, connect,
resource to gg_user;
SQL> grant dba to gg_user;
SQL> grant execute on utl_file to
gg_user;
d. Create the objects and roles for ddl replication
[oracle@rac1 gg]$ pwd
/u01/app/oracle/product/gg
SQL> @marker_setup.sql
--enter gg_user for goldengate schema
SQL> @ddl_setup.sql
--enter gg_user for goldengate schema
SQL> @role_setup.sql
--enter gg_user for goldengate schema
SQL> GRANT GGS_GGSUSER_ROLE TO gg_user;
SQL> @ddl_enable.sql
SQL> alter system set
enable_goldengate_replication=true;
e. Add info about Goldengate DDL schema
[oracle@rac1 gg]$ ./ggsci
GGSCI (rac1.localdomain) 1> edit params ./GLOBALS
GGSCHEMA gg_user
GGSCI (rac1.localdomain) 2>
f.
Create trail and
discard(only on target) directories
Source:
[oracle@rac1 ~]$ mkdir -p /u01/app/oracle/product/gg/dirdat/tr
Target:
[oracle@node1 ~]$ mkdir -p /u01/app/oracle/product/gg/dirdat/tr
[oracle@node1 ~]$ mkdir -p
/u01/app/oracle/product/gg/discard
g. Check manager process and port on host side
GGSCI (rac1.localdomain) 1> edit params mgr
PORT 7809
GGSCI (rac1.localdomain) 2> info all
Program
Status Group Lag at Chkpt Time Since Chkpt
MANAGER
STOPPED
GGSCI (rac1.localdomain) 3> start manager
Manager started.
GGSCI (rac1.localdomain) 4> info all
Program
Status Group Lag at Chkpt Time Since Chkpt
MANAGER
RUNNING
h. Add primary key information to the logfiles for replicated
schemas
GGSCI (rac1.localdomain) 1> dblogin userid
gg_user;
Password:
Successfully logged into database.
GGSCI (rac1.localdomain as gg_user@source1) 2>
add schematrandata hr
2015-01-14 17:24:04
INFO OGG-01788 SCHEMATRANDATA has been added on schema hr.
2015-01-14 17:24:04
INFO OGG-01976 SCHEMATRANDATA for scheduling columns has
been added on schema hr.
GGSCI (rac1.localdomain as gg_user@source1) 3>
add schematrandata scott
2015-01-14 17:24:28
INFO OGG-01788 SCHEMATRANDATA has been added on schema
scott.
2015-01-14 17:24:28
INFO OGG-01976 SCHEMATRANDATA for scheduling columns has
been added on schema scott.
i.
Add ASM entry to
the tnsnames.ora for redo logs
ASM1 =
(DESCRIPTION
=
(ADDRESS =
(PROTOCOL = TCP)(HOST = 192.168.150.198)(PORT = 1521))
(CONNECT_DATA =
(INSTANCE_NAME = +ASM1)
(SERVER
= dedicated)
(SERVICE_NAME = +ASM)
)
)
4. Prepare the target database
SQL> create tablespace gg_tbs datafile '+DATA' size 500M
reuse autoextend on;
SQL> create user gg_user identified by oracle default
tablespace gg_tbs quota unlimited on gg_tbs;
SQL> grant create session, connect, resource to gg_user;
SQL> grant dba to gg_user;
SQL> grant execute on utl_file to gg_user;
SQL> alter system set enable_goldengate_replication=TRUE;
5. Configure extract, pump and replicat process
Source:
Source:
GGSCI (rac1.localdomain) 1> add extract ext1,
tranlog, begin now
EXTRACT added.
GGSCI (rac1.localdomain) 2> add exttrail
/u01/app/oracle/product/gg/dirdat/tr, extract ext1
EXTTRAIL added.
GGSCI (rac1.localdomain) 3> edit params ext1
extract ext1
userid gg_user password
oracle
tranlogoptions asmuser
sys@asm1 asmpassword 123456
exttrail /u01/app/oracle/product/gg/dirdat/tr
ddl include mapped
map hr.*;
map scott.*;
table hr.*;
table scott.*;
GGSCI (rac1.localdomain)
5> add extract pump1, exttrailsource /u01/app/oracle/product/gg/dirdat/tr,
begin now
EXTRACT added
GGSCI (rac1.localdomain)
7> add rmttrail /u01/app/oracle/product/gg/dirdat/tr, extract pump1
RMTTRAIL added.
GGSCI (rac1.localdomain)
6> edit params pump1
extract pump1
userid gg_user, password
oracle
rmthost 192.168.150.241,
mgrport 7809
rmttrail /u01/app/oracle/product/gg/dirdat/tr
passthru
table hr.*;
table scott.*;
GGSCI (rac1.localdomain)
8> info all
Program Status
Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT STOPPED
EXT1 00:00:00 00:31:46
EXTRACT STOPPED
PUMP1 00:00:00 00:09:15
Target:
GGSCI (node1.localdomain)
1> edit params mgr
PORT 7809
GGSCI (node1.localdomain)
5> info all
Program Status
Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
GGSCI (node1.localdomain)
6> edit params ./GLOBALS
checkpointtable gg_user.checkpoint
GGSCI (node1.localdomain)
1> dblogin userid gg_user
Password:
Successfully logged into
database.
GGSCI (node1.localdomain as
gg_user@target1) 2> add checkpointtable gg_user.checkpoint
Successfully created
checkpoint table gg_user.checkpoint.
GSCI (node1.localdomain as
gg_user@target1) 3> add replicat rep1, exttrail
/u01/app/oracle/product/gg/dirdat/tr, begin now
REPLICAT added.
GGSCI (node1.localdomain as
gg_user@target1) 4> edit params rep1
replicat rep1
assumetargetdefs
SETENV (ORACLE_SID=target1)
SETENV
(ORACLE_HOME=/u01/app/oracle/product/12.1.0/db_1)
userid gg_user, password
oracle
discardfile
/u01/app/oracle/product/gg/discard/rep1_discard.txt, append, megabytes 10
DDL
map hr.*, target hr.*;
map scott.*, target scott.*;
GGSCI (node1.localdomain as
gg_user@target1) 6> info all
Program Status
Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT STOPPED
REP1 00:00:00 00:11:44
6. Start extract and replication proccess.
Source:
GGSCI (rac1.localdomain)
1> start extract ext1
Sending START request to
MANAGER ...
EXTRACT EXT1 starting
GGSCI (rac1.localdomain)
2> start extract pump1
Sending START request to
MANAGER ...
EXTRACT PUMP1 starting
GGSCI (rac1.localdomain)
3> info all
Program Status
Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING
EXT1 00:00:00 00:00:00
EXTRACT RUNNING
PUMP1 00:00:00 00:00:08
Target:
GGSCI (node1.localdomain)
11> start replicat rep1
Sending START request to
MANAGER ...
REPLICAT REP1 starting
GGSCI (node1.localdomain)
12> info all
Program Status
Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING
REP1 00:00:00
00:00:08
7. Control DML and DDL operations
Source:
[oracle@rac1 ~]$ sqlplus
hr/hr
SQL> create table
emre_test (idx number);
SQL> insert into emre_test
values (1);
SQL> insert into emre_test
values (2);
SQL> commit;
exit;
[oracle@rac1 ~]$ sqlplus
scott/scott
SQL> create table emre_test2 (names varchar2(30));
SQL> insert into emre_test2 values ('emre');
SQL> insert into emre_test2 values ('emir');
SQL> commit;
[oracle@node1 tr]$ sqlplus
hr/hr
SQL> select * from
emre_test;
IDX
----------
1
2
[oracle@node1 tr]$ sqlplus
scott/scott
SQL> select * from
emre_test2;
NAMES
------------------------------
emre
emir